Konfigurieren einer NAT Gateway-Instanz für statische IP-Adressen für aus einer Containergruppe ausgehenden Datenverkehr

Durch Einrichten einer Containergruppe mit einer extern zugänglichen IP-Adresse können externe Clients die IP-Adresse für den Zugriff auf einen Container in der Gruppe nutzen. So kann beispielsweise ein Browser auf eine Web-App zugreifen, die in einem Container ausgeführt wird. Derzeit verwendet eine Containergruppe allerdings eine andere IP-Adresse für den ausgehenden Datenverkehr. Diese ausgehende IP-Adresse wird nicht programmgesteuert verfügbar gemacht, sodass die Überwachung und Konfiguration von Clientfirewallregeln für Containergruppen etwas komplexer ist.

In diesem Artikel werden die Schritte zum Konfigurieren einer Containergruppe in einem virtuellen Netzwerk erläutert, das mit einer NAT Gateway-Instanz integriert ist. Durch das Konfigurieren einer NAT Gateway-Instanz für die SNAT mit einem zu Azure Container Instances (ACI) delegierten Subnetzadressbereich können Sie aus Ihren Containergruppen ausgehenden Datenverkehr identifizieren. Der ausgehende Datenverkehr der Containergruppe verwendet die öffentliche IP-Adresse der NAT Gateway-Instanz. Eine einzelne NAT Gateway-Instanz kann von mehreren Containergruppen verwendet werden, die im Subnetz des virtuellen Netzwerks bereitgestellt werden, das zu ACI delegiert ist.

In diesem Artikel verwenden Sie die Azure-Befehlszeilenschnittstelle (Azure CLI), um die Ressourcen für das Szenario zu erstellen:

  • Containergruppen, die in einem delegierten Subnetz im virtuellen Netzwerk bereitgestellt sind
  • NAT Gateway-Instanz, die im Netzwerk mit einer statischen öffentlichen IP-Adresse bereitgestellt ist

Anschließend überprüfen Sie den ausgehenden Datenverkehr aus Beispielcontainergruppen durch die NAT Gateway-Instanz.

Hinweis

Der ACI-Dienst empfiehlt die Integration mit einer NAT Gateway-Instanz für containerisierte Workloads, die Anforderungen für statischen ausgehenden Datenverkehr, aber nicht für statischen eingehenden Datenverkehr aufweisen. Informationen zur ACI-Architektur, die sowohl statischen eingehenden als auch ausgehenden Datenverkehr unterstützt, finden Sie im Tutorial Verwenden von Azure Firewall für eingehenden und ausgehenden Datenverkehr.

Wenn Sie kein Azure-Abonnement haben, erstellen Sie ein kostenloses Azure-Konto, bevor Sie beginnen.

Voraussetzungen

  • Verwenden Sie die Bash-Umgebung in Azure Cloud Shell. Weitere Informationen finden Sie unter Schnellstart für Bash in Azure Cloud Shell.

  • Wenn Sie CLI-Referenzbefehle lieber lokal ausführen, installieren Sie die Azure CLI. Wenn Sie Windows oder macOS ausführen, sollten Sie die Azure CLI in einem Docker-Container ausführen. Weitere Informationen finden Sie unter Ausführen der Azure CLI in einem Docker-Container.

    • Wenn Sie eine lokale Installation verwenden, melden Sie sich mithilfe des Befehls az login bei der Azure CLI an. Führen Sie die in Ihrem Terminal angezeigten Schritte aus, um den Authentifizierungsprozess abzuschließen. Informationen zu anderen Anmeldeoptionen finden Sie unter Anmelden mit der Azure CLI.

    • Installieren Sie die Azure CLI-Erweiterung beim ersten Einsatz, wenn Sie dazu aufgefordert werden. Weitere Informationen zu Erweiterungen finden Sie unter Verwenden von Erweiterungen mit der Azure CLI.

    • Führen Sie az version aus, um die installierte Version und die abhängigen Bibliotheken zu ermitteln. Führen Sie az upgrade aus, um das Upgrade auf die aktuelle Version durchzuführen.

Starten von Azure Cloud Shell

Azure Cloud Shell ist eine kostenlose interaktive Shell, mit der Sie die Schritte in diesem Artikel durchführen können. Sie verfügt über allgemeine vorinstallierte Tools und ist für die Verwendung mit Ihrem Konto konfiguriert.

Wählen Sie zum Öffnen von Cloud Shell oben rechts in einem Codeblock einfach die Option Ausprobieren. Sie können Cloud Shell auch auf einem separaten Browsertab starten, indem Sie zu https://shell.azure.com navigieren.

Überprüfen Sie nach dem Öffnen von Cloud Shell, ob Bash für Ihre Umgebung ausgewählt ist. In den folgenden Sitzungen wird die Azure CLI in einer Bash-Umgebung verwendet. Wählen Sie Kopieren aus, um die Codeblöcke zu kopieren. Fügen Sie sie in Cloud Shell ein, und drücken Sie die EINGABETASTE, um sie auszuführen.

Anmelden bei Azure

Cloud Shell wird automatisch unter dem Konto authentifiziert, mit dem die Anmeldung anfänglich erfolgt ist. Verwenden Sie das folgende Skript, um sich mit einem anderen Abonnement anzumelden, und ersetzen Sie <Subscription ID> durch Ihre Azure-Abonnement-ID. Wenn Sie kein Azure-Abonnement haben, erstellen Sie ein kostenloses Azure-Konto, bevor Sie beginnen.

subscription="<subscriptionId>" # add subscription here

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

Weitere Informationen finden Sie unter Festlegen des aktiven Abonnements oder unter Interaktives Anmelden.

Hinweis

Um das vollständige Skript herunterzuladen, gehen Sie zum vollständigen Skript.

Erste Schritte

Dieses Tutorial verwendet eine Zufallsvariable. Wenn Sie eine vorhandene Ressourcengruppe verwenden, ändern Sie den Wert dieser Variablen entsprechend.

resourceGroup=resourceGroup$RANDOM

Azure-Ressourcengruppe: Wenn Sie noch nicht über eine Azure-Ressourcengruppe verfügen, erstellen Sie eine mithilfe des Befehls az group create. Ändern Sie den Wert des Ortes entsprechend.

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

Bereitstellen von Azure Container Instances (ACI) in einem virtuellen Netzwerk

In der Regel verfügen Sie bereits über ein virtuelles Azure-Netzwerk, in der Sie eine Containergruppe bereitstellen können. Zum Zweck der Veranschaulichung: Die folgenden Befehle erstellen während der Erstellung der Containergruppe ein virtuelles Netzwerk und ein Subnetz. Das Subnetz wird an Azure Container Instances delegiert.

Die Containergruppe führt eine kleine Web-App aus dem Image aci-helloworld aus. Wie in anderen Artikeln der Dokumentation beschrieben, verpackt dieses Image eine kleine in Node.js geschriebene Web-App für eine statische HTML-Seite.

Erstellen Sie die Containergruppe mit dem Befehl 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

Hinweis

Passen Sie den Wert von --subnet address-prefix an den IP-Adressraum an, den Sie in Ihrem Subnetz benötigen. Das kleinste unterstützte Subnetz ist /29 und stellt acht IP-Adressen bereit. Einige IP-Adressen sind für die Verwendung durch Azure reserviert. Weitere Informationen finden Sie hier.

Erstellen einer öffentlichen IP-Adresse

Verwenden Sie in den folgenden Abschnitten die Azure CLI, um eine Azure NAT Gateway-Instanz im virtuellen Netzwerk bereitzustellen. Hintergrundinformationen finden Sie unter Schnellstart: Erstellen einer NAT Gateway-Instanz mithilfe der Azure CLI.

Verwenden Sie zunächst az network vnet public-ip create, um eine öffentliche IP-Adresse für die NAT Gateway-Instanz zu erstellen. Dies wird für den Zugriff auf das Internet verwendet. Sie erhalten eine Warnung zu einem bevorstehenden Breaking Change, bei dem IP-Adressen der Standard-SKU standardmäßig verfügbarkeitszonenfähig sind. Weitere Informationen zur Verwendung von Verfügbarkeitszonen und öffentlichen IP-Adressen finden Sie hier.

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

Speichern Sie die öffentliche IP-Adresse in einer Variablen zur späteren Verwendung während des Validierungsschritts in diesem Skript.

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

Bereitstellen einer NAT Gateway-Instanz in einem virtuellen Netzwerk

Verwenden Sie den Befehl az network nat gateway create, um eine NAT Gateway-Instanz zu erstellen, die die im vorherigen Schritt erstellte öffentliche IP-Adresse nutzt.

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

Konfigurieren des NAT-Diensts für das Quellsubnetz

Sie konfigurieren das Quellsubnetz aci-subnet für die Verwendung der spezifischen NAT Gateway-Ressource myNATgateway mithilfe von az network vnet subnet update. Mit diesem Befehl wird der NAT-Dienst im angegebenen Subnetz aktiviert.

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

Testen des ausgehenden Datenverkehrs aus einer Containergruppe

Testen Sie den eingehenden Datenverkehr an den appcontainer, der im virtuellen Netzwerk ausgeführt wird, indem Sie zur öffentlichen IP-Adresse der Firewall wechseln. Zuvor haben Sie die öffentliche IP-Adresse in der Variablen „$NG_PUBLIC_IP“ gespeichert.

Stellen Sie den folgenden Beispielcontainer im virtuellen Netzwerk bereit. Bei Ausführung des Containers sendet er eine einzelne HTTP-Anforderung an http://checkip.dyndns.org, wodurch die IP-Adresse des Absenders (ausgehende IP-Adresse) angezeigt wird. Wenn die Anwendungsregel in der Firewall ordnungsgemäß konfiguriert ist, wird die öffentliche IP-Adresse der Firewall zurückgegeben.

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

Zeigen Sie die Containerprotokolle an, um zu überprüfen, ob die IP-Adresse der im ersten Schritt des Tutorials erstellten öffentlichen IP-Adresse entspricht.

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

Die Ausgabe Die Ausgabe lautet in etwa wie folgt:

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

Diese IP-Adresse sollte mit der öffentlichen IP-Adresse übereinstimmen, die im ersten Schritt des Tutorials erstellt wurde.

echo $ngPublicIp

Bereinigen von Ressourcen

Wenn Sie die Ressourcengruppe und die dazugehörigen Ressourcen nicht mehr benötigen, können Sie sie wie folgt mit dem Befehl az group delete entfernen. Der Parameter --no-wait gibt die Steuerung an die Eingabeaufforderung zurück, ohne zu warten, bis der Vorgang abgeschlossen ist. Der Parameter --yes bestätigt ohne eine zusätzliche Aufforderung, dass Sie die Ressourcen löschen möchten.

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

Nächste Schritte

In diesem Artikel haben Sie Containergruppen in einem virtuellen Netzwerk hinter einer Azure NAT Gateway-Instanz eingerichtet. Mithilfe dieser Konfiguration haben Sie eine einzelne, statische IP-Adresse für den aus Azure Container Instances-Containergruppen ausgehenden Datenverkehr eingerichtet.

Unterstützung zur Problembehandlung finden Sie unter Behandeln von Problemen mit der Azure Virtual Network NAT-Konnektivität.