Condividi tramite


Distribuire le istanze di contenitore in una rete virtuale di Azure

In Rete virtuale di Azure sono disponibili funzionalità per implementare una rete sicura e privata per le risorse locali e di Azure. Grazie alla distribuzione di gruppi di contenitori in una rete virtuale di Azure, i contenitori possono comunicare in modo sicuro con altre risorse nella rete virtuale.

Questo articolo illustra come usare il comando az container create nell'interfaccia della riga di comando di Azure per distribuire gruppi di contenitori in una nuova rete virtuale o in una rete virtuale esistente.

Importante

  • Le subnet devono essere delegate prima di usare una rete virtuale
  • Prima di distribuire gruppi di contenitori nelle reti virtuali, è consigliabile controllare prima le limitazioni. Per gli scenari di rete e le limitazioni, vedere Scenari e risorse per Istanze di Azure Container.
  • La distribuzione di gruppi di contenitori in una rete virtuale è disponibile a livello generale per i contenitori Linux e Windows, nella maggior parte delle aree in cui è disponibile Istanze di Azure Container. Per informazioni dettagliate, vedere aree disponibili.

Importante

I profili di rete sono stati ritirati a partire dalla versione dell'API 2021-07-01. Se si usa questa o una versione più recente, ignorare i passaggi e le azioni correlati ai profili di rete.

Gli esempi di questo articolo sono formattati per la shell Bash. Se si preferisce un'altra shell, ad esempio PowerShell o il prompt dei comandi, modificare di conseguenza i caratteri di continuazione di riga.

Prerequisiti

È necessario un gruppo di risorse per gestire tutte le risorse usate negli esempi seguenti. Per creare un gruppo di risorse usare az group create:

az group create --name myResourceGroup --location eastus

Eseguire una distribuzione in una nuova rete virtuale

Nota

Se si usa l'intervallo IP della subnet /29 per avere solo 3 indirizzi IP, si consiglia sempre di andare un intervallo sopra (mai sotto). Ad esempio, usare l'intervallo IP della subnet /28 per avere almeno 1 o più buffer IP per ogni gruppo di contenitori. In questo modo, è possibile evitare contenitori bloccati, non in grado di avviarsi, riavviarsi o persino di arrestare gli stati.

Per eseguire la distribuzione in una nuova rete virtuale e creare automaticamente le risorse di rete per l'utente, specificare quanto segue quando si esegue il comando az container create:

  • Nome della rete virtuale
  • Prefisso dell'indirizzo di rete virtuale in formato CIDR
  • Nome subnet
  • Prefisso dell'indirizzo della subnet in formato CIDR

I prefissi degli indirizzi della rete virtuale e della subnet specificare gli spazi degli indirizzi per la rete virtuale e per la subnet, rispettivamente. Tal valori sono rappresentati nella notazione CIDR (Classless Inter-Domain Routing), ad esempio 10.0.0.0/16. Per altre informazioni sull'uso delle subnet, vedere Aggiungere, modificare o eliminare le subnet di rete virtuale.

Dopo aver distribuito il primo gruppo di contenitori con questo metodo, è possibile eseguire la distribuzione nella stessa subnet, specificando i nomi della rete virtuale e delle subnet o il profilo di rete che Azure crea automaticamente per l'utente. Poiché Azure delega la subnet a Istanze di Azure Container, nella subnet è possibile distribuire solo gruppi di contenitori.

Esempio

Il comando az container create seguente specifica le impostazioni per una nuova rete virtuale e una nuova subnet. Specificare il nome di un gruppo di risorse creato in un'area in cui le distribuzioni di gruppi di contenitori in una rete virtuale sono disponibili. Questo comando distribuisce il contenitore aci-helloworld pubblico di Microsoft, che esegue un server Web Node.js di piccole dimensioni che gestisce una pagina Web statica. Nella sezione successiva viene distribuito un secondo gruppo di contenitori nella stessa subnet e viene testata la comunicazione tra le due istanze di contenitore.

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

Quando si esegue la distribuzione in una nuova rete virtuale usando questo metodo, la distribuzione può richiedere alcuni minuti per la creazione delle risorse di rete. Dopo la distribuzione iniziale, le distribuzioni di altri gruppi di contenitori nella stessa subnet vengono completate più rapidamente.

Eseguire una distribuzione in una rete virtuale esistente

Per distribuire un gruppo di contenitori in una rete virtuale esistente:

  1. Creare una subnet all'interno della rete virtuale esistente, usare una subnet esistente in cui sia già distribuito un gruppo di contenitori oppure usare una subnet esistente svuotata di tutte le altre risorse e configurazioni. La subnet usata per i gruppi di contenitori può includere solo gruppi di contenitori. Prima di distribuire un gruppo di contenitori in una subnet, è necessario delegare in modo esplicito la subnet prima di effettuare il provisioning. Dopo che è stata delegata, la subnet può essere usata solo per i gruppi di contenitori. Se si prova a distribuire risorse diverse da gruppi di contenitori in una subnet delegata, l'operazione ha esito negativo.
  2. Distribuire un gruppo di contenitori con il comando az container create e specificare uno degli elementi seguenti:
    • Nome della rete virtuale e della subnet
    • ID risorsa di rete virtuale e ID risorsa della subnet, che permette di usare una rete virtuale di un gruppo di risorse diverso

Esempio

L'esempio successivo distribuisce un secondo gruppo di contenitori nella stessa subnet creata in precedenza e verifica la comunicazione tra le due istanze di contenitore.

Ottenere per prima cosa l'indirizzo IP del primo gruppo di contenitori distribuito, ovvero appcontainer:

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

L'output visualizza l'indirizzo IP del gruppo di contenitori nella subnet privata. Ad esempio:

10.0.0.4

A questo punto impostare CONTAINER_GROUP_IP sull'indirizzo IP recuperato con il comando az container show ed eseguire il comando az container create seguente. Questo secondo contenitore, commchecker, esegue un'immagine basata su Alpine Linux ed esegue wget sull'indirizzo IP della subnet privata del primo gruppo di contenitori.

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

Dopo aver completato la distribuzione del secondo contenitore, eseguire il pull dei log relativi in modo che sia possibile visualizzare l'output del comando wget:

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

Se il secondo contenitore ha comunicato correttamente con il primo, l'output è simile al seguente:

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

L'output del registro illustra che wget è stato in grado di connettersi e scaricare il file di indice dal primo contenitore tramite il relativo indirizzo IP privato nella subnet locale. Il traffico di rete tra i due gruppi di contenitori è rimasto nella rete virtuale.

Esempio YAML

È anche possibile distribuire un gruppo di contenitori in una rete virtuale esistente usando un file YAML, un modello di Resource Manager o un altro metodo programmatico, ad esempio con Python SDK.

Ad esempio, quando si usa un file YAML, è possibile eseguire la distribuzione in una rete virtuale con una subnet delegata a Istanze di Azure Container. Specificare le proprietà seguenti:

  • ipAddress: impostazioni dell'indirizzo IP privato per il gruppo di contenitori.
    • ports: porte da aprire, se presenti.
    • protocol: protocollo (TCP o UDP) per la porta aperta.
  • subnetIds: ID risorsa delle subnet in cui eseguire la distribuzione
    • id: ID risorsa della subnet
    • name: nome della subnet

Il codice YAML seguente crea un gruppo di contenitori denominato appcontaineryaml nella rete virtuale.

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

Distribuire il gruppo di contenitori con il comando az container create, specificando il nome di file YAML per il parametro --file:

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

Dopo il completamento della distribuzione, eseguire il comando az container show per visualizzarne lo stato. Output di esempio:

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

Pulire le risorse

Eliminare le istanze di contenitore

Dopo aver usato le istanze di contenitore create, eliminarle con i comandi seguenti:

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

Eliminare le risorse di rete

Attualmente questa funzionalità richiede vari altri comandi per eliminare le risorse di rete create in precedenza. Se sono stati usati i comandi di esempio nelle sezioni precedenti di questo articolo per creare la rete virtuale e la subnet, è possibile usare lo script seguente per eliminare le risorse di rete. Lo script presuppone che il gruppo di risorse contenga una singola rete virtuale con un singolo profilo di rete.

Prima di eseguire lo script, impostare la variabile RES_GROUP sul nome del gruppo di risorse contenente la rete virtuale e la subnet da eliminare. Aggiornare il nome della rete virtuale se non è stato usato il nome aci-vnet suggerito in precedenza. Lo script viene formattato per la shell Bash. Se si preferisce un'altra shell, ad esempio PowerShell o il prompt dei comandi, è necessario modificare di conseguenza l'assegnazione di variabili e le funzioni di accesso.

Avviso

Questo script elimina le risorse. Elimina la rete virtuale e tutte le subnet contenute. Verificare che non sia più necessaria alcuna risorsa nella rete virtuale, ad esempio le subnet che contiene, prima di eseguire lo script. Dopo l'eliminazione, tali risorse non sono recuperabili.

# 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

Passaggi successivi