Konfigurowanie bramy translatora adresów sieciowych dla statycznego adresu IP dla ruchu wychodzącego z grupy kontenerów

Skonfigurowanie grupy kontenerów przy użyciu zewnętrznego adresu IP umożliwia klientom zewnętrznym używanie adresu IP do uzyskiwania dostępu do kontenera w grupie. Na przykład przeglądarka może uzyskać dostęp do aplikacji internetowej działającej w kontenerze. Jednak obecnie grupa kontenerów używa innego adresu IP dla ruchu wychodzącego. Ten adres IP ruchu wychodzącego nie jest uwidoczniony programowo, co sprawia, że monitorowanie i konfigurowanie reguł zapory klienta jest bardziej złożone.

Ten artykuł zawiera kroki konfigurowania grupy kontenerów w sieci wirtualnej zintegrowanej z bramą translatora adresów sieciowych (NAT). Konfigurując bramę translatora adresów sieciowych w usłudze SNAT dla zakresu adresów podsieci delegowanego do usługi Azure Container Instances (ACI), można zidentyfikować ruch wychodzący z grup kontenerów. Ruch wychodzący grupy kontenerów będzie używać publicznego adresu IP bramy translatora adresów sieciowych. Pojedyncza brama NAT może być używana przez wiele grup kontenerów wdrożonych w podsieci sieci wirtualnej delegowanej do usługi ACI.

W tym artykule użyjesz interfejsu wiersza polecenia platformy Azure do utworzenia zasobów dla tego scenariusza:

  • Grupy kontenerów wdrożone w delegowanej podsieci w sieci wirtualnej
  • Brama translatora adresów sieciowych wdrożona w sieci ze statycznym publicznym adresem IP

Następnie należy zweryfikować ruch wychodzący z przykładowych grup kontenerów za pośrednictwem bramy translatora adresów sieciowych.

Uwaga

Usługa ACI zaleca integrację z bramą translatora adresów sieciowych dla konteneryzowanych obciążeń, które mają statyczny ruch wychodzący, ale nie wymagania dotyczące statycznego ruchu przychodzącego. W przypadku architektury usługi ACI obsługującej zarówno statyczny ruch przychodzący, jak i wychodzący, zobacz następujący samouczek: Używanie usługi Azure Firewall dla ruchu przychodzącego i wychodzącego.

Jeśli nie masz subskrypcji platformy Azure, przed rozpoczęciem utwórz bezpłatne konto platformy Azure.

Wymagania wstępne

Uruchamianie usługi Azure Cloud Shell

Usługa Azure Cloud Shell to bezpłatna interaktywna powłoka, której możesz używać do wykonywania kroków opisanych w tym artykule. Udostępnia ona wstępnie zainstalowane i najczęściej używane narzędzia platformy Azure, które są skonfigurowane do użycia na koncie.

Aby otworzyć usługę Cloud Shell, wybierz pozycję Wypróbuj w prawym górnym rogu bloku kodu. Możesz również uruchomić usługę Cloud Shell w oddzielnej karcie przeglądarki, przechodząc do strony https://shell.azure.com.

Po otwarciu usługi Cloud Shell sprawdź, czy dla danego środowiska wybrano powłokę Bash . Kolejne sesje będą używać interfejsu wiersza polecenia platformy Azure w środowisku powłoki Bash, wybierz pozycję Kopiuj , aby skopiować bloki kodu, wkleić go do usługi Cloud Shell i nacisnąć klawisz Enter , aby go uruchomić.

Logowanie się do platformy Azure

Usługa Cloud Shell jest automatycznie uwierzytelniana na początkowym koncie zalogowanym. Użyj następującego skryptu, aby zalogować się przy użyciu innej subskrypcji, zastępując <Subscription ID> element identyfikatorem subskrypcji platformy Azure. Jeśli nie masz subskrypcji platformy Azure, przed rozpoczęciem utwórz bezpłatne konto platformy Azure.

subscription="<subscriptionId>" # add subscription here

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

Aby uzyskać więcej informacji, zobacz set active subscription or log in interactively (Ustawianie aktywnej subskrypcji lub logowanie się interaktywnie)

Uwaga

Aby pobrać pełny skrypt, przejdź do pełnego skryptu.

Rozpocznij

W tym samouczku jest używana zmienna losowa. Jeśli używasz istniejącej grupy zasobów, odpowiednio zmodyfikuj wartość tej zmiennej.

resourceGroup=resourceGroup$RANDOM

Grupa zasobów platformy Azure: jeśli nie masz jeszcze grupy zasobów platformy Azure, utwórz grupę zasobów za pomocą polecenia az group create . Zmodyfikuj odpowiednio wartość lokalizacji.

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

Wdrażanie usługi ACI w sieci wirtualnej

W typowym przypadku może już istnieć sieć wirtualna platformy Azure, w której ma zostać wdrożona grupa kontenerów. W celach demonstracyjnych następujące polecenia tworzą sieć wirtualną i podsieć po utworzeniu grupy kontenerów. Podsieć jest delegowana do usługi Azure Container Instances.

Grupa kontenerów uruchamia małą aplikację internetową z aci-helloworld obrazu. Jak pokazano w innych artykułach w dokumentacji, ten obraz pakuje małą aplikację internetową napisaną w pliku Node.js, która obsługuje statyczną stronę HTML.

Utwórz grupę kontenerów za pomocą polecenia 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

Uwaga

Dostosuj wartość --subnet address-prefix przestrzeni adresowej IP, której potrzebujesz w podsieci. Najmniejsza obsługiwana podsieć to /29, która udostępnia osiem adresów IP. Niektóre >adresy IP są zarezerwowane do użytku przez platformę Azure, co można znaleźć tutaj.

Tworzenie publicznego adresu IP

W poniższych sekcjach użyj interfejsu wiersza polecenia platformy Azure, aby wdrożyć bramę translatora adresów sieciowych platformy Azure w sieci wirtualnej. Aby uzyskać podstawowe informacje, zobacz Szybki start: tworzenie bramy translatora adresów sieciowych przy użyciu interfejsu wiersza polecenia platformy Azure.

Najpierw użyj polecenia az network vnet public-ip create , aby utworzyć publiczny adres IP bramy translatora adresów sieciowych. Będzie to używane do uzyskiwania dostępu do Internetu. Zostanie wyświetlone ostrzeżenie o nadchodzącej zmianie powodującej niezgodność, w której adresy IP jednostki SKU w warstwie Standardowa będą domyślnie uwzględniane w strefie dostępności. Więcej informacji na temat korzystania ze stref dostępności i publicznych adresów IP można znaleźć tutaj.

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

Zapisz publiczny adres IP w zmiennej do użycia podczas kroku weryfikacji w dalszej części tego skryptu.

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

Wdrażanie bramy translatora adresów sieciowych w sieci wirtualnej

Użyj następującego polecenia az network nat gateway create , aby utworzyć bramę translatora adresów sieciowych, która używa publicznego adresu IP utworzonego w poprzednim kroku.

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

Konfigurowanie usługi TRANSLATOR adresów sieciowych dla podsieci źródłowej

Skonfigurujemy podsieć źródłową aci-subnet tak, aby korzystała z określonego zasobu bramy translatora adresów sieciowych myNATgateway za pomocą polecenia az network vnet subnet update. To polecenie aktywuje usługę NAT w określonej podsieci.

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

Testowanie ruchu wychodzącego z grupy kontenerów

Przetestuj dostęp przychodzący do uruchomionego appcontainer w sieci wirtualnej, przechodząc do publicznego adresu IP zapory. Wcześniej publiczny adres IP był przechowywany w zmiennej $NG_PUBLIC_IP

Wdróż następujący przykładowy kontener w sieci wirtualnej. Po uruchomieniu wysyła pojedyncze żądanie HTTP do http://checkip.dyndns.org, które wyświetla adres IP nadawcy (adres IP ruchu wychodzącego). Jeśli reguła aplikacji w zaporze jest prawidłowo skonfigurowana, zwracany jest publiczny adres IP zapory.

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

Wyświetl dzienniki kontenera, aby potwierdzić, że adres IP jest taki sam jak publiczny adres IP utworzony w pierwszym kroku samouczka.

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

Dane wyjściowe są podobne do następujących:

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

Ten adres IP powinien być zgodny z publicznym adresem IP utworzonym w pierwszym kroku samouczka.

echo $ngPublicIp

Czyszczenie zasobów

Gdy grupa zasobów i wszystkie powiązane zasoby nie będą już potrzebne, możesz użyć polecenia az group delete w następujący sposób. Parametr --no-wait zwraca kontrolę do wiersza polecenia bez oczekiwania na zakończenie operacji. Parametr --yes potwierdza, że chcesz usunąć zasoby bez wyświetlania dodatkowego monitu.

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

Następne kroki

W tym artykule skonfigurujesz grupy kontenerów w sieci wirtualnej za bramą translatora adresów sieciowych platformy Azure. Korzystając z tej konfiguracji, należy skonfigurować pojedynczy, statyczny ruch wychodzący adresu IP z grup kontenerów usługi Azure Container Instances.

Aby uzyskać pomoc dotyczącą rozwiązywania problemów, zobacz Rozwiązywanie problemów z łącznością translatora adresów sieciowych platformy Azure.