Déployer des instance de conteneur dans un réseau virtuel Azure

Un réseau virtuel Azure fournit un accès réseau privé et sécurisé à vos ressources Azure et locales. En déployant des groupes de conteneurs dans un réseau virtuel Azure, vos conteneurs peuvent communiquer en toute sécurité avec d’autres ressources dans le réseau virtuel.

Cet article explique comment utiliser la commande az container create dans Azure CLI pour déployer des groupes de conteneurs sur un réseau virtuel nouveau ou existant.

Important

Avant de déployer des groupes de conteneurs dans des réseaux virtuels, nous vous suggérons de vérifier au préalable la limitation. Pour les scénarios et les limitations de mise en réseau, consultez Ressources et scénarios relatifs aux réseaux virtuels pour Azure Container Instances.

Important

Le déploiement d’un groupe de conteneurs sur un réseau virtuel est généralement disponible pour les conteneurs Linux et Windows, dans la plupart des régions où Azure Container Instances est disponible. Pour plus d’informations, consultez Régions disponibles.

Important

Les profils réseau ont été retirés depuis la version 2021-07-01 de l’API. Si vous utilisez cette version ou une version plus récente, ignorez les étapes et actions relatives aux profils réseau.

Les exemples présentés dans cet article sont mis en forme pour l’interpréteur de commandes Bash. Si vous préférez un autre interpréteur de commandes comme PowerShell ou l’invite de commande, modifiez les caractères de continuation de ligne en conséquence.

Déployer dans un nouveau réseau virtuel

Notes

Si vous utilisez la plage d’adresses IP de sous-réseau /29 pour avoir seulement 3 adresses IP, nous vous recommandons de toujours aller une plage au-dessus (jamais en dessous). Par exemple, utilisez la plage d’adresses IP de sous-réseau /28 pour disposer d’au moins un tampon IP ou plus par groupe de conteneurs. En procédant ainsi, vous pouvez éviter que les conteneurs soient bloqués, ne puissent pas démarrer, redémarrer ou s’arrêter.

Pour déployer dans un nouveau réseau virtuel et laisser Azure créer automatiquement les ressources réseau, spécifiez les éléments suivants lorsque vous exécutez as container create :

  • Nom du réseau virtuel
  • Préfixe d’adresse de réseau virtuel au format CIDR
  • Nom du sous-réseau
  • Préfixe d’adresse de sous-réseau au format CIDR

Le réseau virtuel et les préfixes d’adresse de sous-réseau spécifient les espaces d’adressage du réseau virtuel et du sous-réseau, respectivement. Ces valeurs sont représentées en notation CIDR (Classless Inter-domain Routing), par exemple 10.0.0.0/16. Pour plus d’informations sur l’utilisation des sous-réseaux, consultez Ajouter, modifier ou supprimer un sous-réseau de réseau virtuel.

Une fois que vous avez déployé votre premier groupe de conteneurs avec cette méthode, vous pouvez déployer dans le même sous-réseau en spécifiant les noms du réseau virtuel et du sous-réseau, ou le profil réseau créé automatiquement par Azure pour vous. Comme Azure délègue le sous-réseau à Azure Container Instances, vous ne pouvez déployer que des groupes de conteneurs dans le sous-réseau.

Exemple

La commande az container create suivante spécifie les paramètres pour un nouveau réseau virtuel et un nouveau sous-réseau. Fournissez le nom d’un groupe de ressources créé dans une région où des déploiements de groupe de conteneurs dans un réseau virtuel sont disponibles. Cette commande déploie le conteneur Microsoft aci-helloworld public qui exécute un petit serveur web Node.js qui gère une page web statique. Dans la section suivante, vous allez déployer un deuxième groupe de conteneurs dans le même sous-réseau et tester la communication entre les deux instances de conteneur.

az container create \
  --name appcontainer \
  --resource-group myResourceGroup \
  --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

Lorsque vous déployez dans un nouveau réseau virtuel avec cette méthode, l’opération peut prendre quelques minutes, le temps de créer les ressources réseau. Après le déploiement initial, les déploiements de groupe de conteneurs sur le même sous-réseau sont accomplis plus rapidement.

Déployer dans un réseau virtuel existant

Pour déployer un groupe de conteneurs dans un réseau virtuel existant :

  1. Créez un sous-réseau au sein de votre réseau virtuel existant, utilisez un sous-réseau existant dans lequel un groupe de conteneurs est déjà déployé, ou utilisez un sous-réseau existant vide de toute autre ressource et configuration.
  2. Déployez un groupe de conteneurs avec az container create et spécifiez un des éléments suivants :
    • Nom du réseau virtuel et nom du sous-réseau
    • ID de ressource de réseau virtuel et ID de ressource de sous-réseau, ce qui permet d’utiliser un réseau virtuel d’un groupe de ressources différent
    • Nom ou ID du profil réseau que vous pouvez obtenir en utilisant az network profile list

Exemple

L’exemple suivant déploie un deuxième groupe de conteneurs sur le sous-réseau créé précédemment et vérifie la communication entre les deux instances de conteneur.

Tout d’abord, obtenez l’adresse IP du premier groupe de conteneurs déployé, appcontainer :

az container show --resource-group myResourceGroup \
  --name appcontainer \
  --query ipAddress.ip --output tsv

La sortie affiche l’adresse IP du groupe de conteneurs dans le sous-réseau privé. Par exemple :

10.0.0.4

Maintenant, attribuez à CONTAINER_GROUP_IP l’adresse IP que vous avez récupérée avec la commande az container show et exécutez la commande suivante az container create. Ce deuxième conteneur, commchecker, utilise une image Linux Alpine et exécute wget sur l’adresse IP du sous-réseau privé du premier groupe de conteneurs.

CONTAINER_GROUP_IP=<container-group-IP-address>

az container create \
  --resource-group myResourceGroup \
  --name commchecker \
  --image alpine:3.5 \
  --command-line "wget $CONTAINER_GROUP_IP" \
  --restart-policy never \
  --vnet aci-vnet \
  --subnet aci-subnet

Après le déploiement de ce deuxième conteneur, consultez dans ses journaux d’activité la sortie de la commande wget qu’il a exécutée :

az container logs --resource-group myResourceGroup --name commchecker

Si le deuxième conteneur a correctement communiqué avec le premier, la sortie doit être similaire à ceci :

Connecting to 10.0.0.4 (10.0.0.4:80)
index.html           100% |*******************************|  1663   0:00:00 ETA

La sortie du journal doit montrer que wget a réussie à se connecter le fichier d’index et à le télécharger à partir du premier conteneur à l’aide de son adresse IP privée dans le sous-réseau local. Le trafic réseau entre les deux groupes de conteneurs est resté dans le réseau virtuel.

Exemple – YAML

Vous pouvez également déployer un groupe de conteneurs sur un réseau virtuel existant en utilisant un fichier YAML, un modèle Resource Manager ou une autre méthode de programmation, telle que le Kit de développement logiciel (SDK) Python.

Par exemple, lors de l’utilisation d’un fichier YAML, vous pouvez effectuer un déploiement sur un réseau virtuel avec un sous-réseau délégué à Azure Container Instances. Spécifiez les propriétés suivantes :

  • ipAddress : paramètres d’adresse IP privée pour le groupe de conteneurs.
    • ports: ports à ouvrir, le cas échéant.
    • protocol: protocole (TCP ou UDP) du port ouvert.
  • subnetIds : ID de ressource des sous-réseaux sur lesquels effectuer le déploiement
    • id : ID de ressource du sous-réseau.
    • name : nom du sous-réseau.

Ce fichier YAML crée un groupe de conteneurs nommé appcontaineryaml dans votre réseau virtuel.

apiVersion: '2021-07-01'
location: westus
name: appcontaineryaml
properties:
  containers:
  - name: appcontaineryaml
    properties:
      image: mcr.microsoft.com/azuredocs/aci-helloworld
      ports:
      - port: 80
        protocol: TCP
      resources:
        requests:
          cpu: 1.0
          memoryInGB: 1.5
  ipAddress:
    type: Private
    ports:
    - protocol: tcp
      port: '80'
  osType: Linux
  restartPolicy: Always
  subnetIds:
    - id: <subnet-id>
      name: default
tags: null
type: Microsoft.ContainerInstance/containerGroups

Déployez le groupe de conteneurs avec la commande az container create, en spécifiant le nom du fichier YAML dans le paramètre --file :

az container create --resource-group myResourceGroup \
  --file vnet-deploy-aci.yaml

Une fois le déploiement effectué, exécutez la commande az container show pour afficher son état. Exemple de sortie :

Name              ResourceGroup    Status    Image                                       IP:ports     Network    CPU/Memory       OsType    Location
----------------  ---------------  --------  ------------------------------------------  -----------  ---------  ---------------  --------  ----------
appcontaineryaml  myResourceGroup  Running   mcr.microsoft.com/azuredocs/aci-helloworld  10.0.0.5:80  Private    1.0 core/1.5 gb  Linux     westus

Nettoyer les ressources

Supprimer des instances de conteneur

Lorsque vous avez fini d’utiliser les instances de conteneur que vous avez créées, supprimez-les avec les commandes suivantes :

az container delete --resource-group myResourceGroup --name appcontainer -y
az container delete --resource-group myResourceGroup --name commchecker -y
az container delete --resource-group myResourceGroup --name appcontaineryaml -y

Supprimer des ressources réseau

Cette fonctionnalité nécessite pour le moment plusieurs commandes supplémentaires pour supprimer les ressources réseau que vous avez créées précédemment. Si vous avez utilisé les exemples de commande dans les sections précédentes de cet article pour créer votre réseau virtuel et votre sous-réseau, vous pouvez utiliser le script suivant pour supprimer ces ressources réseau. Le script suppose que votre groupe de ressources contient un seul réseau virtuel avec un seul profil réseau.

Avant d’exécuter le script, attribuez à la variable RES_GROUP le nom du groupe de ressources contenant le réseau virtuel et le sous-réseau à supprimer. Mettez à jour le nom du réseau virtuel si vous n’avez pas utilisé le nom aci-vnet suggéré précédemment. Le script est mis en forme pour l’interpréteur de commandes Bash. Si vous préférez un autre interpréteur de commandes, PowerShell ou l’invite de commande, vous devrez ajuster les variables et les accesseurs en conséquence.

Avertissement

Ce script supprime les ressources ! Le réseau virtuel et tous les sous-réseaux qu’il contient sont supprimés. Assurez-vous de n’avoir plus besoin des ressources du réseau virtuel, y compris des sous-réseaux qu’il contient, avant d’exécuter ce script. Une fois supprimées, ces ressources sont irrécupérables.

# Replace <my-resource-group> with the name of your resource group
# Assumes one virtual network in resource group
RES_GROUP=<my-resource-group>

# Get network profile ID
# Assumes one profile in virtual network
NETWORK_PROFILE_ID=$(az network profile list --resource-group $RES_GROUP --query [0].id --output tsv)

# Delete the network profile
az network profile delete --id $NETWORK_PROFILE_ID -y

# Delete virtual network
az network vnet delete --resource-group $RES_GROUP --name aci-vnet

Étapes suivantes