Een NAT-gateway configureren voor statisch IP-adres voor uitgaand verkeer van een containergroep

Door een containergroep met een extern IP-adres in te stellen, kunnen externe clients het IP-adres gebruiken voor toegang tot een container in de groep. Een browser heeft bijvoorbeeld toegang tot een web-app die wordt uitgevoerd in een container. Momenteel gebruikt een containergroep echter een ander IP-adres voor uitgaand verkeer. Dit uitgaande IP-adres wordt niet programmatisch weergegeven, waardoor het bewaken en configureren van clientfirewallregels voor containergroepen complexer wordt.

Dit artikel bevat stappen voor het configureren van een containergroep in een virtueel netwerk dat is geïntegreerd met een NAT-gateway (Network Address Translation). Door een NAT-gateway te configureren voor SNAT een subnetadresbereik dat is gedelegeerd aan Azure Container Instances (ACI), kunt u uitgaand verkeer van uw containergroepen identificeren. Het uitgaande verkeer van de containergroep gebruikt het openbare IP-adres van de NAT-gateway. Eén NAT-gateway kan worden gebruikt door meerdere containergroepen die zijn geïmplementeerd in het subnet van het virtuele netwerk dat is gedelegeerd aan ACI.

In dit artikel gebruikt u de Azure CLI om de resources voor dit scenario te maken:

  • Containergroepen die zijn geïmplementeerd op een gedelegeerd subnet in het virtuele netwerk
  • Een NAT-gateway die in het netwerk is geïmplementeerd met een statisch openbaar IP-adres

Vervolgens valideert u uitgaand verkeer van voorbeeldcontainergroepen via de NAT-gateway.

Notitie

De ACI-service raadt aan om te integreren met een NAT-gateway voor in containers geplaatste workloads met statische uitgaande gegevens, maar niet met statische toegangsbeheervereisten. Zie de volgende zelfstudie voor ACI-architectuur die zowel statisch inkomend als uitgaand verkeer ondersteunt: Azure Firewall gebruiken voor inkomend en uitgaand verkeer.

Als u geen Azure-abonnement hebt, kunt u een gratis Azure-account maken voordat u begint.

Vereisten

Azure Cloud Shell starten

Azure Cloud Shell is een gratis interactieve shell waarmee u de stappen in dit artikel kunt uitvoeren. In deze shell zijn algemene Azure-hulpprogramma's vooraf geïnstalleerd en geconfigureerd voor gebruik met uw account.

Als u Cloud Shell wilt openen, selecteert u Proberen in de rechterbovenhoek van een codeblok. U kunt Cloud Shell ook openen in een afzonderlijk browsertabblad door naar https://shell.azure.com te gaan.

Wanneer Cloud Shell wordt geopend, controleert u of Bash is geselecteerd voor uw omgeving. Volgende sessies gebruiken Azure CLI in een Bash-omgeving, selecteer Kopiëren om de codeblokken te kopiëren, plak deze in Cloud Shell en druk op Enter om deze uit te voeren.

Aanmelden bij Azure

Cloud Shell wordt automatisch geverifieerd onder het eerste account waarmee is aangemeld. Gebruik het volgende script om u aan te melden met een ander abonnement, waarbij u <Subscription ID> uw Azure-abonnements-id vervangt. Als u geen Azure-abonnement hebt, kunt u een gratis Azure-account maken voordat u begint.

subscription="<subscriptionId>" # add subscription here

az account set -s $subscription # ...or use 'az login'

Zie Voor meer informatie het instellen van een actief abonnement of het interactief aanmelden

Notitie

Als u het volledige script wilt downloaden, gaat u naar het volledige script.

Aan de slag

In deze zelfstudie wordt gebruikgemaakt van een gerandomiseerde variabele. Als u een bestaande resourcegroep gebruikt, wijzigt u de waarde van deze variabele op de juiste manier.

resourceGroup=resourceGroup$RANDOM

Azure-resourcegroep: Als u nog geen Azure-resourcegroep hebt, maakt u een resourcegroep met de opdracht az group create . Wijzig de locatiewaarde naar wens.

az group create --name $resourceGroup --location eastus

ACI implementeren in een virtueel netwerk

In een typisch geval hebt u mogelijk al een virtueel Azure-netwerk waarin een containergroep moet worden geïmplementeerd. Voor demonstratiedoeleinden maken de volgende opdrachten een virtueel netwerk en subnet wanneer de containergroep wordt gemaakt. Het subnet wordt gedelegeerd aan Azure Container Instances.

De containergroep voert een kleine web-app uit vanuit de aci-helloworld installatiekopieën. Zoals wordt weergegeven in andere artikelen in de documentatie, verpakt deze afbeelding een kleine web-app die is geschreven in Node.js die een statische HTML-pagina gebruikt.

Maak de containergroep met de opdracht 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

Notitie

Pas de waarde aan van --subnet address-prefix de IP-adresruimte die u nodig hebt in uw subnet. Het kleinste ondersteunde subnet is /29, dat acht IP-adressen biedt. Sommige >IP-adressen zijn gereserveerd voor gebruik door Azure. Hier vindt u meer informatie.

Een openbaar IP-adres maken

In de volgende secties gebruikt u de Azure CLI om een Azure NAT-gateway in het virtuele netwerk te implementeren. Zie quickstart voor achtergrond: Een NAT-gateway maken met behulp van Azure CLI.

Gebruik eerst az network vnet public-ip create om een openbaar IP-adres voor de NAT-gateway te maken. Dit wordt gebruikt voor toegang tot internet. U ontvangt een waarschuwing over een aanstaande wijziging die fouten veroorzaakt, waarbij STANDAARD SKU-IP-adressen standaard op de hoogte zijn van de beschikbaarheidszone. Hier vindt u meer informatie over het gebruik van beschikbaarheidszones en openbare IP-adressen.

az network public-ip create \
  --name myPublicIP \
  --resource-group $resourceGroup \
  --sku standard \
  --zone 1 \
  --allocation static

Sla het openbare IP-adres op in een variabele voor gebruik tijdens de validatiestap verderop in dit script.

ngPublicIp="$(az network public-ip show \
  --name myPublicIP \
  --resource-group $resourceGroup \
  --query ipAddress --output tsv)"

Een NAT-gateway implementeren in een virtueel netwerk

Gebruik de volgende az network nat gateway create om een NAT-gateway te maken die gebruikmaakt van het openbare IP-adres dat u in de vorige stap hebt gemaakt.

az network nat gateway create \
  --resource-group $resourceGroup \
  --name myNATgateway \
  --public-ip-addresses myPublicIP \
  --idle-timeout 10

NAT-service voor bronsubnet configureren

We configureren het bronsubnet aci-subnet voor het gebruik van een specifieke NAT-gatewayresource myNATgateway met az network vnet subnet update. Met deze opdracht wordt de NAT-service op het opgegeven subnet geactiveerd.

az network vnet subnet update \
    --resource-group $resourceGroup  \
    --vnet-name aci-vnet \
    --name aci-subnet \
    --nat-gateway myNATgateway

Uitgaand verkeer van een containergroep testen

Test binnenkomende toegang tot het appcontainer actieve netwerk in het virtuele netwerk door naar het openbare IP-adres van de firewall te bladeren. Eerder hebt u het openbare IP-adres opgeslagen in variabele $NG_PUBLIC_IP

Implementeer de volgende voorbeeldcontainer in het virtuele netwerk. Wanneer deze wordt uitgevoerd, wordt één HTTP-aanvraag verzonden naar http://checkip.dyndns.org, waarin het IP-adres van de afzender (het uitgaande IP-adres) wordt weergegeven. Als de toepassingsregel op de firewall juist is geconfigureerd, wordt het openbare IP-adres van de firewall geretourneerd.

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

Bekijk de containerlogboeken om te bevestigen dat het IP-adres hetzelfde is als het openbare IP-adres dat we in de eerste stap van de zelfstudie hebben gemaakt.

az container logs \
  --resource-group $resourceGroup \
  --name testegress

De uitvoer ziet er ongeveer zo uit:

<html><head><title>Current IP Check</title></head><body>Current IP Address: 52.142.18.133</body></html>

Dit IP-adres moet overeenkomen met het openbare IP-adres dat in de eerste stap van de zelfstudie is gemaakt.

echo $ngPublicIp

Resources opschonen

Wanneer u deze niet meer nodig hebt, kunt u az group delete gebruiken om de resourcegroep en alle gerelateerde resources als volgt te verwijderen. De parameter --no-wait retourneert het besturingselement naar de prompt zonder te wachten totdat de bewerking is voltooid. De parameter --yes bevestigt dat u de resources wilt verwijderen, zonder een extra prompt om dit te doen.

az group delete --name $resourceGroup --yes --no-wait

Volgende stappen

In dit artikel stelt u containergroepen in een virtueel netwerk in achter een Azure NAT-gateway. Met behulp van deze configuratie stelt u één statisch IP-adres in vanuit Container Instances-containergroepen van Azure Container Instances.

Zie de verbinding met Azure Virtual Network NAT oplossen voor hulp bij het oplossen van problemen.