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
- Les sous-réseaux doivent être délégués avant d’utiliser un réseau virtuel
- 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.
- 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.
Prérequis
Définissez des variables d’environnement
Le parcours de déploiement automatisé utilise les variables d’environnement et les noms de ressources suivants dans ce guide. Les utilisateurs qui utilisent le guide manuellement peuvent utiliser, au choix, leurs propres variables et noms.
export RANDOM_ID="$(openssl rand -hex 3)"
export MY_RESOURCE_GROUP_NAME="myACIResourceGroup$RANDOM_ID"
export MY_VNET_NAME="aci-vnet"
export MY_SUBNET_NAME="aci-subnet"
export MY_SUBNET_ID="/subscriptions/$(az account show --query id --output tsv)/resourceGroups/$MY_RESOURCE_GROUP_NAME/providers/Microsoft.Network/virtualNetworks/$MY_VNET_NAME/subnets/$MY_SUBNET_NAME"
export MY_APP_CONTAINER_NAME="appcontainer"
export MY_COMM_CHECKER_NAME="commchecker"
export MY_YAML_APP_CONTAINER_NAME="appcontaineryaml"
Créer un groupe de ressources
Vous avez besoin d’un groupe de ressources pour gérer toutes les ressources utilisées dans les exemples suivants. Pour créer un groupe de ressources, utilisez az group create :
az group create --name $MY_RESOURCE_GROUP_NAME --location eastus
Une opération réussie doit produire une sortie similaire au code JSON suivant :
Résultats :
{
"id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx/resourceGroups/myACIResourceGroup123abc",
"location": "abcdef",
"managedBy": null,
"name": "myACIResourceGroup123",
"properties": {
"provisioningState": "Succeeded"
},
"tags": null,
"type": "Microsoft.Resources/resourceGroups"
}
Déployer dans un nouveau réseau virtuel
Remarque
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 effectuer le déploiement sur le même sous-réseau en spécifiant les noms de réseau virtuel et de sous-réseau, ou le profil réseau qu’Azure crée automatiquement 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 $MY_APP_CONTAINER_NAME \
--resource-group $MY_RESOURCE_GROUP_NAME \
--image mcr.microsoft.com/azuredocs/aci-helloworld \
--vnet $MY_VNET_NAME \
--vnet-address-prefix 10.0.0.0/16 \
--subnet $MY_SUBNET_NAME \
--subnet-address-prefix 10.0.0.0/24
Une opération réussie doit produire une sortie similaire au code JSON suivant :
Résultats :
{
"confidentialComputeProperties": null,
"containers": [
{
"command": null,
"environmentVariables": [],
"image": "mcr.microsoft.com/azuredocs/aci-helloworld",
"instanceView": {
"currentState": {
"detailStatus": "",
"exitCode": null,
"finishTime": null,
"startTime": "0000-00-00T00:00:00.000000+00:00",
"state": "Running"
},
"events": [
{
"count": 1,
"firstTimestamp": "0000-00-00T00:00:00+00:00",
"lastTimestamp": "0000-00-00T00:00:00+00:00",
"message": "Successfully pulled image \"mcr.microsoft.com/azuredocs/aci-helloworld@sha256:0000000000000000000000000000000000000000000000000000000000000000\"",
"name": "Pulled",
"type": "Normal"
},
{
"count": 1,
"firstTimestamp": "0000-00-00T00:00:00+00:00",
"lastTimestamp": "0000-00-00T00:00:00+00:00",
"message": "pulling image \"mcr.microsoft.com/azuredocs/aci-helloworld@sha256:0000000000000000000000000000000000000000000000000000000000000000\"",
"name": "Pulling",
"type": "Normal"
},
{
"count": 1,
"firstTimestamp": "0000-00-00T00:00:00+00:00",
"lastTimestamp": "0000-00-00T00:00:00+00:00",
"message": "Started container",
"name": "Started",
"type": "Normal"
}
],
"previousState": null,
"restartCount": 0
},
"livenessProbe": null,
"name": "appcontainer",
"ports": [
{
"port": 80,
"protocol": "TCP"
}
],
"readinessProbe": null,
"resources": {
"limits": null,
"requests": {
"cpu": 1.0,
"gpu": null,
"memoryInGb": 1.5
}
},
"securityContext": null,
"volumeMounts": null
}
],
"diagnostics": null,
"dnsConfig": null,
"encryptionProperties": null,
"extensions": null,
"id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx/resourceGroups/myACIResourceGroup123/providers/Microsoft.ContainerInstance/containerGroups/appcontainer",
"identity": null,
"imageRegistryCredentials": null,
"initContainers": [],
"instanceView": {
"events": [],
"state": "Running"
},
"ipAddress": {
"autoGeneratedDomainNameLabelScope": null,
"dnsNameLabel": null,
"fqdn": null,
"ip": "10.0.0.4",
"ports": [
{
"port": 80,
"protocol": "TCP"
}
],
"type": "Private"
},
"location": "eastus",
"name": "appcontainer",
"osType": "Linux",
"priority": null,
"provisioningState": "Succeeded",
"resourceGroup": "myACIResourceGroup123abc",
"restartPolicy": "Always",
"sku": "Standard",
"subnetIds": [
{
"id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx/resourceGroups/myACIResourceGroup123/providers/Microsoft.Network/virtualNetworks/aci-vnet/subnets/aci-subnet",
"name": null,
"resourceGroup": "myACIResourceGroup123abc"
}
],
"tags": {},
"type": "Microsoft.ContainerInstance/containerGroups",
"volumes": null,
"zones": null
}
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 suivants de groupes de conteneurs sur le même sous-réseau s’effectuent plus rapidement.
Déployer dans un réseau virtuel existant
Pour déployer un groupe de conteneurs dans un réseau virtuel existant :
- 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. Le sous-réseau que vous utilisez pour les groupes de conteneurs peut contenir des groupes de conteneurs uniquement. Avant de déployer un groupe de conteneurs sur un sous-réseau, vous devez déléguer explicitement le sous-réseau avant l’approvisionnement. Une fois délégué, le sous-réseau ne peut être utilisé que pour les groupes de conteneur. Si vous tentez de déployer des ressources autres que des groupes de conteneurs dans un sous-réseau délégué, l’opération échoue.
- 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
Déployer à l’aide d’un fichier 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éploiementid
: ID de ressource du sous-réseau.name
: nom du sous-réseau.
Ce YAML crée un groupe de conteneurs dans votre réseau virtuel. Entrez le nom de votre groupe de conteneurs dans les champs de nom et votre ID de sous-réseau dans le champ ID de sous-réseau. Nous utilisons appcontaineryaml comme nom. Si vous avez besoin de trouver votre ID de sous-réseau et que vous n’avez plus accès aux sorties précédentes, vous pouvez utiliser la commande az container show pour l’afficher. Recherchez le champ id
sous subnetIds
.
apiVersion: '2021-07-01'
location: eastus
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
La commande Bash suivante concerne le parcours de déploiement automatisé.
echo -e "apiVersion: '2021-07-01'\nlocation: eastus\nname: $MY_YAML_APP_CONTAINER_NAME\nproperties:\n containers:\n - name: $MY_YAML_APP_CONTAINER_NAME\n properties:\n image: mcr.microsoft.com/azuredocs/aci-helloworld\n ports:\n - port: 80\n protocol: TCP\n resources:\n requests:\n cpu: 1.0\n memoryInGB: 1.5\n ipAddress:\n type: Private\n ports:\n - protocol: tcp\n port: '80'\n osType: Linux\n restartPolicy: Always\n subnetIds:\n - id: $MY_SUBNET_ID\n name: default\ntags: null\ntype: Microsoft.ContainerInstance/containerGroups" > container-instances-vnet.yaml
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 $MY_RESOURCE_GROUP_NAME \
--file container-instances-vnet.yaml
La commande Bash suivante concerne le parcours de déploiement automatisé.
rm container-instances-vnet.yaml
Une fois le déploiement effectué, exécutez la commande az container show pour afficher son état :
az container list --resource-group $MY_RESOURCE_GROUP_NAME --output table
La sortie doit ressembler à l’exemple ci-dessous :
Résultats :
Name ResourceGroup Status Image IP:ports Network CPU/Memory OsType Location
---------------- ------------------------ --------- ------------------------------------------ -------------- --------- --------------- -------- ----------
appcontainer myACIResourceGroup123abc Succeeded mcr.microsoft.com/azuredocs/aci-helloworld 10.0.0.4:80,80 Private 1.0 core/1.5 gb Linux abcdef
appcontaineryaml myACIResourceGroup123abc Succeeded mcr.microsoft.com/azuredocs/aci-helloworld 10.0.0.5:80,80 Private 1.0 core/1.5 gb Linux abcdef
Illustrer la communication entre les instances de conteneur
L’exemple suivant déploie un troisième groupe de conteneurs sur le même sous-réseau créé précédemment. En utilisant une image Alpine Linux, il vérifie la communication entre lui-même et la première instance de conteneur.
Remarque
En raison de la limitation de débit en vigueur pour l’extraction d’images Docker publiques comme l’Alpine Linux utilisée ici, vous pouvez recevoir une erreur dans le formulaire :
(RegistryErrorResponse) Une réponse d’erreur est reçue du registre Docker « index.docker.io ». Veuillez réessayer ultérieurement. Code : Message RegistryErrorResponse : une réponse d’erreur est reçue du registre Docker « index.docker.io ». Veuillez réessayer ultérieurement.
La commande Bash suivante concerne le parcours de déploiement automatisé.
echo -e "Due to rate limiting in effect for pulling public Docker images like the Alpine Linux one used here, you may receive an error in the form:\n\n(RegistryErrorResponse) An error response is received from the docker registry 'index.docker.io'. Please retry later.\nCode: RegistryErrorResponse\nMessage: An error response is received from the docker registry 'index.docker.io'. Please retry later.\n\nIf this occurs, the automated deployment will exit. You can try again or go to the end of the guide to see instructions for cleaning up your resources."
Tout d’abord, obtenez l’adresse IP du premier groupe de conteneurs déployé, appcontainer :
az container show --resource-group $MY_RESOURCE_GROUP_NAME \
--name $MY_APP_CONTAINER_NAME \
--query ipAddress.ip --output tsv
La sortie affiche l’adresse IP du groupe de conteneurs dans le sous-réseau privé. Par exemple :
Résultats :
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.
az container create \
--resource-group $MY_RESOURCE_GROUP_NAME \
--name $MY_COMM_CHECKER_NAME \
--image alpine:3.4 \
--command-line "wget 10.0.0.4" \
--restart-policy never \
--vnet $MY_VNET_NAME \
--subnet $MY_SUBNET_NAME
Après ce deuxième déploiement de conteneur, effectuez une extraction des journaux correspondants pour voir la sortie de la commande wget
qu’il a exécutée :
az container logs --resource-group $MY_RESOURCE_GROUP_NAME --name $MY_COMM_CHECKER_NAME
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.
Nettoyer les ressources
Si vous n’envisagez pas de continuer à utiliser ces ressources, vous pouvez les supprimer pour éviter des frais Azure. Vous pouvez nettoyer toutes les ressources que vous avez utilisées dans ce guide en supprimant le groupe de ressources avec la commande az group delete. Une fois supprimées, ces ressources sont irrécupérables.
Étapes suivantes
Pour déployer un nouveau réseau virtuel, sous-réseau, profil réseau et groupe de conteneurs à l’aide d’un modèle Resource Manager, consultez Créer un groupe de conteneurs Azure avec un réseau virtuel.
Pour déployer des Azure Container Instances qui peuvent extraire des images d’un Azure Container Registry via un point de terminaison privé, consultez Déployer sur les instances de conteneur Azure à partir de Azure Container Registry à l’aide d’un point de terminaison managé identité.