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
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 subscriptionId 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" # Set Azure subscription ID here
az account set -s $subscription # ...or use 'az login'
Pour en savoir plus, reportez-vous à Définir l'abonnement actif ou Se connecter de manière interactive.
Remarque
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 :
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.