Partager via


Configurer une IP publique unique pour le trafic sortant et entrant 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é à Pare-feu Azure. En configurant un itinéraire défini par l’utilisateur vers le groupe de conteneurs et les règles de pare-feu, vous pouvez acheminer et identifier le trafic vers et depuis le groupe de conteneurs. L’entrée et la sortie des groupes de conteneurs utilisent l’IP publique du pare-feu. Plusieurs groupes de conteneurs déployés dans le sous-réseau du réseau virtuel peuvent utiliser une seule adresse IP de sortie.

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
  • Un pare-feu Azure déployé sur le réseau avec une IP publique statique
  • Un itinéraire défini par l’utilisateur sur le sous-réseau des groupes de conteneurs
  • Une règle NAT pour l’entrée de pare-feu et une règle d’application pour la sortie

Vous validez ensuite l’entrée et la sortie à partir d’exemples de groupes de conteneurs via le pare-feu.

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 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

Conseil

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 à Azure.

Pour une utilisation ultérieure, vous devez obtenir l’adresse IP privée du groupe de conteneurs en exécutant la commande [az container show][az-container-show] :

aciPrivateIp="$(az container show --name appcontainer \
  --resource-group $resourceGroup \
  --query ipAddress.ip --output tsv)"

Déployer Pare-feu Azure dans le réseau

Dans les sections suivantes, utilisez Azure CLI pour déployer un pare-feu Azure dans le réseau virtuel. Pour plus d’informations, consultez Didacticiel : Déployer et configurer un pare-feu Azure à l’aide du portail Azure

Tout d’abord, utilisez la commande az network vnet subnet create pour ajouter un sous-réseau nommé AzureFirewallSubnet pour le pare-feu. AzureFirewallSubnet est le nom obligatoire de ce sous-réseau.

az network vnet subnet create \
  --name AzureFirewallSubnet \
  --resource-group $resourceGroup \
  --vnet-name aci-vnet   \
  --address-prefix 10.0.1.0/26

Utilisez les commandes Azure CLI suivantes pour créer un pare-feu dans le sous-réseau.

Si ce n’est déjà fait, ajoutez l’extension de pare-feu à Azure CLI à l’aide de la commande az extension add :

az extension add --name azure-firewall

Créez les ressources de pare-feu à l’aide de la commande az network firewall create :

az network firewall create \
  --name myFirewall \
  --resource-group $resourceGroup \
  --location eastus

az network public-ip create \
  --name fw-pip \
  --resource-group $resourceGroup \
  --location eastus \
  --allocation-method static \
  --sku standard
    
az network firewall ip-config create \
  --firewall-name myFirewall \
  --name FW-config \
  --public-ip-address fw-pip \
  --resource-group $resourceGroup \
  --vnet-name aci-vnet

Mettez à jour la configuration du pare-feu à l’aide de la commande az network firewall update :

az network firewall update \
  --name myFirewall \
  --resource-group $resourceGroup

Récupérez l’adresse IP privée du pare-feu à l’aide de la commande az network firewall ip-config list. Cette adresse IP privée est utilisée dans une commande ultérieure.

fwPrivateIp="$(az network firewall ip-config list \
  --resource-group $resourceGroup \
  --firewall-name myFirewall \
  --query "[].privateIpAddress" --output tsv)"

Récupérez l’IP publique du pare-feu à l’aide de la commande az network public-ip show. Cette IP publique est utilisée dans une commande ultérieure.

fwPublicIp="$(az network public-ip show \
  --name fw-pip \
  --resource-group $resourceGroup \
  --query ipAddress --output tsv)"

Définir un itinéraire défini par l’utilisateur sur le sous-réseau ACI

Pour détourner le trafic vers le pare-feu Azure, définissez une route définie par l’utilisateur(-trice) sur le sous-réseau ACI. Pour plus d’informations, consultez Acheminer le trafic.

Créer une table de routage

Tout d’abord, exécutez la commande az network route-table create suivante pour créer la table de routage. Créez la table de routage dans la même région que le réseau virtuel.

az network route-table create \
  --name Firewall-rt-table \
  --resource-group $resourceGroup \
  --location eastus \
  --disable-bgp-route-propagation true

Créer un itinéraire

Exécutez az network-route-table route create pour créer un itinéraire dans la table de routage. Pour acheminer le trafic vers le pare-feu, définissez le type de tronçon suivant sur VirtualAppliance puis transmettez l’adresse IP privée du pare-feu comme adresse de tronçon suivant.

az network route-table route create \
  --resource-group $resourceGroup \
  --name DG-Route \
  --route-table-name Firewall-rt-table \
  --address-prefix 0.0.0.0/0 \
  --next-hop-type VirtualAppliance \
  --next-hop-ip-address $fwPrivateIp

Associer la table de routage au sous-réseau ACI

Exécutez la commande az network vnet subnet update pour associer la table de routage au sous-réseau délégué à Azure Container Instances.

az network vnet subnet update \
  --name aci-subnet \
  --resource-group $resourceGroup \
  --vnet-name aci-vnet \
  --address-prefixes 10.0.0.0/24 \
  --route-table Firewall-rt-table

Configurer des règles sur le pare-feu

Par défaut, Pare-feu Azure refuse (bloque) le trafic entrant et sortant.

Configurer une règle NAT sur le pare-feu vers le sous-réseau ACI

Créez une règle NAT sur le pare-feu pour traduire et filtrer le trafic Internet entrant vers le conteneur d’applications que vous avez démarré précédemment dans le réseau. Pour plus d’informations, consultez Filtrer le trafic Internet entrant à l’aide de la DNAT Pare-feu Azure.

Créez une règle et collection NAT à l’aide de la commande az network firewall nat-rule create :

az network firewall nat-rule create \
  --firewall-name myFirewall \
  --collection-name myNATCollection \
  --action dnat \
  --name myRule \
  --protocols TCP \
  --source-addresses '*' \
  --destination-addresses $fwPublicIp \
  --destination-ports 80 \
  --resource-group $resourceGroup \
  --translated-address $aciPrivateIp \
  --translated-port 80 \
  --priority 200

Ajoutez des règles NAT si nécessaire pour filtrer le trafic vers d’autres adresses IP dans le sous-réseau. Par exemple, d’autres groupes de conteneurs du sous-réseau peuvent exposer des adresses IP pour le trafic entrant, ou d’autres adresses IP internes peuvent être attribuées au groupe de conteneurs après un redémarrage.

Créer une règle d’application de trafic sortant sur le pare-feu

Exécutez la commande az network firewall application-rule create suivante pour créer une règle de trafic sortant sur le pare-feu. Cet exemple de règle accorde au nom de domaine complet checkip.dyndns.org l’accès à Azure Container Instances à partir du sous-réseau délégué. L’accès HTTP au site est utilisé dans une étape ultérieure pour confirmer l’adresse IP de sortie d’Azure Container Instances.

az network firewall application-rule create \
  --collection-name myAppCollection \
  --firewall-name myFirewall \
  --name Allow-CheckIP \
  --protocols Http=80 Https=443 \
  --resource-group $resourceGroup \
  --target-fqdns checkip.dyndns.org \
  --source-addresses 10.0.0.0/24 \
  --priority 200 \
  --action Allow

Tester l’accès au groupe de conteneurs via le pare-feu

Les sections suivantes vérifient que le sous-réseau délégué à Azure Container Instances est correctement configuré derrière le pare-feu Azure. Les étapes précédentes ont permis d’acheminer le trafic entrant vers le sous-réseau et le trafic sortant du sous-réseau via le pare-feu.

Tester l’entrée dans 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 $FW_PUBLIC_IP :

echo $fwPublicIp

Le résultat se présente ainsi :

52.142.18.133

Si la règle NAT sur le pare-feu est configurée correctement, les éléments suivants s’affichent lorsque vous entrez l’IP publique du pare-feu dans votre navigateur :

Accéder à l’IP publique du pare-feu

Tester la sortie d’un groupe de conteneurs

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 du pare-feu.

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>

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 un pare-feu Azure. Vous avez configuré un itinéraire défini par l’utilisateur et des règles d’application et NAT sur le pare-feu. À l’aide de cette configuration, vous avez configuré une adresse IP statique unique pour l’entrée et la sortie d’Azure Container Instances.

Pour plus d’informations sur la gestion du trafic et la protection des ressources Azure, consultez la documentation relative à Pare-feu Azure.