Configurare un gateway NAT per l'indirizzo IP statico per il traffico in uscita da un gruppo di contenitori
La configurazione di un gruppo di contenitori con un indirizzo IP esterno consente ai client esterni di usare l'indirizzo IP per accedere a un contenitore nel gruppo. Ad esempio, un browser può accedere a un'app Web in esecuzione in un contenitore. Tuttavia, attualmente un gruppo di contenitori usa un indirizzo IP diverso per il traffico in uscita. Questo indirizzo IP per il traffico in uscita non è esposto a livello di codice, che rende più complesso il monitoraggio e la configurazione dei gruppi di contenitori e delle regole del firewall client.
Questo articolo illustra la procedura per configurare un gruppo di contenitori in una rete virtuale integrata con il gateway NAT (Network Address Translation). La configurazione di un gateway NAT per SNAT su un intervallo di indirizzi della subnet delegato a Istanze di Azure Container (ACI), è possibile identificare il traffico in uscita dai gruppi di contenitori. Il traffico in uscita dal gruppo di contenitori usa l'indirizzo IP pubblico del gateway NAT. Più gruppi di contenitori distribuiti nella subnet della rete virtuale possono usare un singolo gateway NAT.
In questo articolo viene usata l'interfaccia della riga di comando di Azure per creare le risorse per lo scenario:
- Gruppi di contenitori distribuiti in una subnet delegata nella rete virtuale
- Un firewall NAT distribuito nella rete con un indirizzo IP pubblico statico
Si convalida quindi il traffico in uscita dai gruppi di contenitori di esempio attraverso il firewall NAT.
Nota
Il servizio Istanze di Azure Container consiglia l'integrazione con un gateway NAT per carichi di lavoro in contenitori con requisiti in uscita statici ma non in ingresso statici. Per l'architettura di Istanze di Azure Container che supporta il traffico statico sia in ingresso e in uscita, vedere l'esercitazione seguente: Usare Firewall di Azure per il traffico in ingresso e uscita.
Se non si ha una sottoscrizione di Azure, creare un account Azure gratuito prima di iniziare.
Prerequisiti
Usare l'ambiente Bash in Azure Cloud Shell. Per altre informazioni, vedere Avvio rapido su Bash in Azure Cloud Shell.
Se si preferisce eseguire i comandi di riferimento dell'interfaccia della riga di comando in locale, installare l'interfaccia della riga di comando di Azure. Per l'esecuzione in Windows o macOS, è consigliabile eseguire l'interfaccia della riga di comando di Azure in un contenitore Docker. Per altre informazioni, vedere Come eseguire l'interfaccia della riga di comando di Azure in un contenitore Docker.
Se si usa un'installazione locale, accedere all'interfaccia della riga di comando di Azure con il comando az login. Per completare il processo di autenticazione, seguire la procedura visualizzata nel terminale. Per altre opzioni di accesso, vedere Accedere tramite l'interfaccia della riga di comando di Azure.
Quando richiesto, al primo utilizzo installare l'estensione dell'interfaccia della riga di comando di Azure. Per altre informazioni sulle estensioni, vedere Usare le estensioni con l'interfaccia della riga di comando di Azure.
Eseguire az version per trovare la versione e le librerie dipendenti installate. Per eseguire l'aggiornamento alla versione più recente, eseguire az upgrade.
Avviare Azure Cloud Shell
Azure Cloud Shell è una shell interattiva gratuita che può essere usata per eseguire la procedura di questo articolo. Include strumenti comuni di Azure preinstallati e configurati per l'uso con l'account.
Per aprire Cloud Shell, basta selezionare Prova nell'angolo superiore destro di un blocco di codice. È anche possibile avviare Cloud Shell in una scheda separata del browser visitando https://shell.azure.com.
Quando si apre Cloud Shell, verificare che sia selezionato Bash per l'ambiente. Le sessioni successive useranno l'interfaccia della riga di comando di Azure in un ambiente Bash. Selezionare Copia per copiare i blocchi di codice, incollarli in Cloud Shell e premere INVIO per eseguirli.
Accedere ad Azure
Cloud Shell viene autenticato automaticamente con l'account iniziale con cui è stato eseguito l'accesso. Usare lo script seguente per accedere usando una sottoscrizione diversa, sostituendo subscriptionId con l'ID sottoscrizione di Azure.
Se non si ha una sottoscrizione di Azure, creare un account Azure gratuito prima di iniziare.
subscription="subscriptionId" # Set Azure subscription ID here
az account set -s $subscription # ...or use 'az login'
Per altre informazioni, vedere Impostare una sottoscrizione attiva o accedere in modo interattivo.
Nota
Per scaricare lo script completo, passare a Script completo.
Operazioni preliminari
Questa esercitazione usa una variabile casuale. Se è stato usato un gruppo di risorse esistente, modificare il valore di questa variabile in modo appropriato.
resourceGroup=resourceGroup$RANDOM
Gruppo di risorse di Azure: se non si dispone già un gruppo di risorse di Azure, creare un gruppo di risorse con il comando az group create. Modificare il valore della posizione in base alle esigenze.
az group create --name $resourceGroup --location eastus
Distribuire Istanze di Azure Container in una rete virtuale
In un caso tipico, potrebbe essere già disponibile una rete virtuale di Azure in cui distribuire un gruppo di contenitori. A scopo dimostrativo, i comandi seguenti creano una rete virtuale e una subnet quando viene creato il gruppo di contenitori. La subnet viene delegata a Istanze di Azure Container.
Il gruppo di contenitori esegue una piccola app Web dall'immagine aci-helloworld
. Come illustrato in altri articoli della documentazione, in questa immagine è inclusa una piccola app Web scritta in Node.js che distribuisce una pagina HTML statica.
Creare il gruppo di contenitori con il comando 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
Nota
Modificare il valore di --subnet address-prefix
per lo spazio di indirizzi IP necessario nella subnet. La subnet più piccola supportata è /29, che fornisce otto indirizzi IP. Alcuni indirizzi IP >sono riservati per l'uso da parte di Azure, su cui è possibile leggere altre informazioni qui.
Creare un indirizzo IP pubblico
Nelle sezioni seguenti usare l'interfaccia della riga di comando di Azure per distribuire un firewall NAT di Azure nella rete virtuale. Per informazioni generali, vedere Guida introduttiva: Creare un gateway NAT usando l'interfaccia della riga di comando di Azure.
In primo luogo, usare az network vnet public-ip create per creare un indirizzo IP pubblico per il gateway NAT. Il gateway usa questo indirizzo IP pubblico per accedere a Internet. Viene visualizzato un avviso relativo a una modifica che causa un'interruzione imminente nei casi in cui gli indirizzi IP dello SKU Standard riconoscono la zona di disponibilità per impostazione predefinita. Per altre informazioni sull'uso delle zone di disponibilità e degli indirizzi IP pubblici, vedere qui.
az network public-ip create \
--name myPublicIP \
--resource-group $resourceGroup \
--sku standard \
--zone 1 \
--allocation static
Archiviare l'indirizzo IP pubblico in una variabile da usare durante il passaggio di convalida descritto più avanti in questo script.
ngPublicIp="$(az network public-ip show \
--name myPublicIP \
--resource-group $resourceGroup \
--query ipAddress --output tsv)"
Distribuire un gateway NAT in una rete virtuale
Usare il comando az network nat gateway create seguente per creare una gateway NAT che usi l’indirizzo IP creato nel passaggio precedente.
az network nat gateway create \
--resource-group $resourceGroup \
--name myNATgateway \
--public-ip-addresses myPublicIP \
--idle-timeout 10
Configurare il servizio NAT per la subnet di origine
Verrà configurata la subnet di origine, aci-subnet, per usare un una risorsa gateway NAT specifica, myNATgateway, con az network vnet subnet update. Questo comando attiva il servizio NAT nella subnet specificata.
az network vnet subnet update \
--resource-group $resourceGroup \
--vnet-name aci-vnet \
--name aci-subnet \
--nat-gateway myNATgateway
Testare il traffico in uscita da un gruppo di contenitori
Testare l'accesso in ingresso a appcontainer
in esecuzione nella rete virtuale passando all'indirizzo IP pubblico del firewall. In precedenza, l'indirizzo IP pubblico è stato archiviato nella variabile $NG_PUBLIC_IP
Distribuire il contenitore di esempio seguente nella rete virtuale. Al momento dell’esecuzione, invia una singola richiesta HTTP a http://checkip.dyndns.org
, che visualizza l'indirizzo IP del mittente (indirizzo IP in uscita). Se la regola dell'applicazione nel firewall è configurata correttamente, viene restituito l'indirizzo IP pubblico del firewall.
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
Visualizzare i log del contenitore per verificare che l'indirizzo IP corrisponda all'indirizzo IP pubblico creato durante il passaggio dell’esercitazione.
az container logs \
--resource-group $resourceGroup \
--name testegress
L'output è simile a:
<html><head><title>Current IP Check</title></head><body>Current IP Address: 52.142.18.133</body></html>
Questo indirizzo IP deve corrispondere all'indirizzo IP pubblico creato nel primo passaggio dell'esercitazione.
echo $ngPublicIp
Pulire le risorse
Quando il gruppo di risorse e tutte le risorse correlate non sono più necessari, è possibile usare il comando az group delete per rimuoverli come segue. Il parametro --no-wait
restituisce il controllo al prompt senza attendere il completamento dell'operazione. Il parametro --yes
conferma che si vogliono eliminare le risorse senza una richiesta aggiuntiva a tale scopo.
az group delete --name $resourceGroup --yes --no-wait
Passaggi successivi
Questo articolo mostra come configurare i gruppi di contenitori in una rete virtuale dietro un gateway NAT di Azure. Questa configurazione permette di configurare un singolo indirizzo IP statico per l'uscita dai gruppi di contenitori di Istanze di Azure Container.
Per assistenza per la risoluzione dei problemi, vedere la Risolvere i problemi di connettività NAT di rete virtuale di Azure.