Configurer une passerelle NAT pour une adresse IP statique pour le trafic sortant à partir d’un groupe de conteneurs
La configuration d’un groupe de conteneurs avec une adresse IP externe permet aux clients externes d’utiliser l’adresse IP pour accéder à un conteneur du groupe. Par exemple, un navigateur peut accéder à une application web exécutée dans un conteneur. Toutefois, actuellement, un groupe de conteneurs utilise une adresse IP différente pour le trafic sortant. Cette adresse IP de sortie n’est pas exposée par programmation, ce qui rend plus complexe la surveillance et la configuration des groupes de conteneurs pour les règles de pare-feu du client.
Cet article décrit les étapes permettant de configurer un groupe de conteneurs dans un réseau virtuel intégré à une passerelle de traduction d’adresses réseau (NAT). Si vous configurez une passerelle NAT pour SNAT en spécifiant une plage d’adresses de sous-réseau déléguée à Azure Container Instances (ACI), vous pouvez identifier le trafic sortant à partir de vos groupes de conteneurs. Le trafic de sortie du groupe de conteneurs utilise l’adresse IP publique de la passerelle NAT. Plusieurs groupes de conteneurs déployés dans le sous-réseau du réseau virtuel peuvent utiliser une seule passerelle NAT.
Dans cet article, vous utilisez Azure CLI pour créer les ressources de ce scénario :
- Des groupes de conteneurs déployés sur un sous-réseau délégué dans le réseau virtuel
- Une passerelle NAT déployée sur le réseau avec une IP publique statique
Vous validez ensuite la sortie à partir d’exemples de groupes de conteneurs via la passerelle NAT.
Notes
Le service ACI recommande une intégration avec une passerelle NAT pour les charges de travail conteneurisées qui ont des exigences de sortie statiques, mais pas des exigences d’entrée statiques. Pour l’architecture ACI qui prend en charge à la fois l’entrée et la sortie statique, consultez le didacticiel suivant : Utiliser le pare-feu Azure pour l’entrée et la sortie.
Si vous n’avez pas d’abonnement Azure, créez un compte gratuit Azure avant de commencer.
Prérequis
Utilisez l’environnement Bash dans Azure Cloud Shell. Pour plus d’informations, consultez Démarrage rapide pour Bash dans Azure Cloud Shell.
Si vous préférez exécuter les commandes de référence de l’interface de ligne de commande localement, installez l’interface Azure CLI. Si vous exécutez sur Windows ou macOS, envisagez d’exécuter Azure CLI dans un conteneur Docker. Pour plus d’informations, consultez Guide pratique pour exécuter Azure CLI dans un conteneur Docker.
Si vous utilisez une installation locale, connectez-vous à Azure CLI à l’aide de la commande az login. Pour finir le processus d’authentification, suivez les étapes affichées dans votre terminal. Pour connaître les autres options de connexion, consultez Se connecter avec Azure CLI.
Lorsque vous y êtes invité, installez l’extension Azure CLI lors de la première utilisation. Pour plus d’informations sur les extensions, consultez Utiliser des extensions avec Azure CLI.
Exécutez az version pour rechercher la version et les bibliothèques dépendantes installées. Pour effectuer une mise à niveau vers la dernière version, exécutez az upgrade.
Lancement d’Azure Cloud Shell
Azure Cloud Shell est un interpréteur de commandes interactif et gratuit que vous pouvez utiliser pour exécuter les étapes de cet article. Il contient des outils Azure courants préinstallés et configurés pour être utilisés avec votre compte.
Pour ouvrir Cloud Shell, sélectionnez simplement Essayer en haut à droite d’un bloc de code. Vous pouvez aussi lancer Cloud Shell dans un onglet distinct du navigateur en accédant à https://shell.azure.com.
Quand Cloud Shell s’ouvre, vérifiez que Bash est sélectionné pour votre environnement. Les sessions ultérieures utiliseront Azure CLI dans un environnement Bash. Sélectionnez Copier pour copier les blocs de code, collez-les dans Cloud Shell, puis appuyez sur Entrée pour les exécuter.
Connexion à Azure
Cloud Shell est automatiquement authentifié sous le compte initial utilisé pour la connexion. Utilisez le script suivant pour vous connecter avec un autre abonnement, en remplaçant <Subscription ID>
par votre ID d’abonnement Azure. Si vous n’avez pas d’abonnement Azure, créez un compte gratuit Azure avant de commencer.
subscription="<subscriptionId>" # add subscription here
az account set -s $subscription # ...or use 'az login'
Pour plus d’informations, consultez Définir l’abonnement actif ou Se connecter de manière interactive
Notes
Pour télécharger le script complet, accédez au script complet.
Bien démarrer
Ce tutoriel utilise une variable aléatoire. Si vous avez utilisé un groupe de ressources existant, modifiez la valeur de cette variable de manière appropriée.
resourceGroup=resourceGroup$RANDOM
Groupe de ressources Azure : Si vous n’avez pas encore de groupe de ressources Azure, créez un groupe de ressources avec la commande az group create. Modifiez la valeur de l’emplacement de manière appropriée.
az group create --name $resourceGroup --location eastus
Déployer ACI dans un réseau virtuel
Dans un cas classique, vous disposez peut-être déjà d’un réseau virtuel Azure dans lequel déployer un groupe de conteneurs. À des fins de démonstration, les commandes suivantes créent un réseau virtuel et un sous-réseau lors de la création du groupe de conteneurs. Le sous-réseau est délégué à Azure Container Instances.
Le groupe de conteneurs exécute une petite application web à partir de l’image aci-helloworld
. Comme indiqué dans d’autres articles de la documentation, cette image contient une petite application web écrite en Node.js qui sert une page HTML statique.
Créez le groupe de conteneurs à l’aide de la commande az container create :
az container create \
--name appcontainer \
--resource-group $resourceGroup \
--image mcr.microsoft.com/azuredocs/aci-helloworld \
--vnet aci-vnet \
--vnet-address-prefix 10.0.0.0/16 \
--subnet aci-subnet \
--subnet-address-prefix 10.0.0.0/24
Notes
Ajustez la valeur de --subnet address-prefix
pour l’espace d’adressage IP dont vous avez besoin dans votre sous-réseau. Le plus petit sous-réseau pris en charge est /29, lequel fournit 8 adresses IP. Certaines >adresses IP sont réservées pour une utilisation par Azure. Vous pouvez en savoir plus sur ici.
Créer une adresse IP publique
Dans les sections suivantes, utilisez Azure CLI pour déployer une passerelle NAT Azure dans le réseau virtuel. Pour l’arrière-plan, consultez Démarrage rapide : Créer une passerelle NAT avec Azure CLI.
Tout d’abord, utilisez la commande az network vnet public-ip create pour créer une adresse IP publique pour la passerelle NAT. La passerelle utilise cette adresse IP publique pour accéder à Internet. Vous recevez un avertissement concernant un prochain gros changement où les adresses IP des références SKU standard sont compatibles avec la zone de disponibilité par défaut. Vous pouvez en savoir plus sur l’utilisation des zones de disponibilité et des adresses IP publiques ici.
az network public-ip create \
--name myPublicIP \
--resource-group $resourceGroup \
--sku standard \
--zone 1 \
--allocation static
Stockez l’adresse IP publique dans une variable à utiliser lors de l’étape de validation ultérieurement dans ce script.
ngPublicIp="$(az network public-ip show \
--name myPublicIP \
--resource-group $resourceGroup \
--query ipAddress --output tsv)"
Déployer une passerelle NAT dans un réseau virtuel
Utilisez la commande az network nat gateway create pour créer une passerelle NAT qui utilise l’adresse IP publique que vous avez créée à l’étape précédente.
az network nat gateway create \
--resource-group $resourceGroup \
--name myNATgateway \
--public-ip-addresses myPublicIP \
--idle-timeout 10
Configurer le service NAT pour le sous-réseau source
Nous configurons le sous-réseau source aci-subnet pour utiliser une ressource de passerelle NAT spécifique myNATgateway avec la commande az network vnet subnet update. Cette commande active le service NAT sur le sous-réseau précisé.
az network vnet subnet update \
--resource-group $resourceGroup \
--vnet-name aci-vnet \
--name aci-subnet \
--nat-gateway myNATgateway
Tester la sortie d’un groupe de conteneurs
Testez l’accès entrant au appcontainer
s’exécutant dans le réseau virtuel en accédant à l’IP publique du pare-feu. Précédemment, vous avez stocké l’IP publique dans la variable $NG_PUBLIC_IP
Déployez l’exemple de conteneur suivant dans le réseau virtuel. Lorsqu’il s’exécute, il envoie une requête HTTP unique à http://checkip.dyndns.org
, qui affiche l’adresse IP de l’expéditeur (l’adresse IP de sortie). Si la règle d’application sur le pare-feu est configurée correctement, l’IP publique du pare-feu est retournée.
az container create \
--resource-group $resourceGroup \
--name testegress \
--image mcr.microsoft.com/azuredocs/aci-tutorial-sidecar \
--command-line "curl -s http://checkip.dyndns.org" \
--restart-policy OnFailure \
--vnet aci-vnet \
--subnet aci-subnet
Affichez les journaux de conteneur pour confirmer que l’adresse IP est identique à l’IP publique que nous avons créée à la première étape du didacticiel.
az container logs \
--resource-group $resourceGroup \
--name testegress
Le résultat se présente ainsi :
<html><head><title>Current IP Check</title></head><body>Current IP Address: 52.142.18.133</body></html>
Cette adresse IP doit correspondre à l’adresse IP publique créée lors de la première étape du didacticiel.
echo $ngPublicIp
Nettoyer les ressources
Lorsque vous n’en avez plus besoin, vous pouvez utiliser la commande az group delete pour supprimer le groupe de ressources et toutes les ressources associées, comme suit. Le paramètre --no-wait
retourne le contrôle à l’invite de commandes sans attendre que l’opération se termine. Le paramètre --yes
confirme que vous souhaitez supprimer les ressources sans passer par une autre invite.
az group delete --name $resourceGroup --yes --no-wait
Étapes suivantes
Dans cet article, vous avez configuré des groupes de conteneurs dans un réseau virtuel situé derrière une passerelle Azure NAT. À l’aide de cette configuration, vous avez configuré une adresse IP statique unique pour la sortie des groupes de conteneurs Azure Container Instances.
Pour obtenir de l’aide pour la résolution des problèmes, consultez Résoudre les problèmes de connectivité du service NAT de réseau virtuel Azure.