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. Une seule passerelle NAT peut être utilisée par plusieurs groupes de conteneurs déployés dans le sous-réseau du réseau virtuel délégué à ACI.

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

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 utilisez 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. Elle sera utilisée pour accéder à Internet. Vous recevrez un avertissement concernant un prochain gros changement où les adresses IP des références SKU standard seront 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 allons configurer 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 invite supplémentaire à cette fin.

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.