Udostępnij za pośrednictwem


Konfigurowanie pojedynczego publicznego adresu IP dla ruchu wychodzącego i przychodzącego do 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 usługą Azure Firewall. Konfigurując trasę zdefiniowaną przez użytkownika do grupy kontenerów i reguł zapory, można kierować i identyfikować ruch do i z grupy kontenerów. Ruch przychodzący i wychodzący grupy kontenerów używają publicznego adresu IP zapory. Pojedynczy adres IP ruchu wychodzącego może być używany przez wiele grup kontenerów wdrożonych w podsieci sieci wirtualnej delegowanej do usługi Azure Container Instances.

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
  • Zapora platformy Azure wdrożona w sieci ze statycznym publicznym adresem IP
  • Trasa zdefiniowana przez użytkownika w podsieci grup kontenerów
  • Reguła translatora adresów sieciowych dla ruchu przychodzącego zapory i reguła aplikacji dla ruchu wychodzącego

Następnie należy zweryfikować ruch przychodzący i wychodzący z przykładowych grup kontenerów za pośrednictwem zapory.

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

Napiwek

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.

Aby użyć w późniejszym kroku, pobierz prywatny adres IP grupy kontenerów, uruchamiając polecenie [az container show][az-container-show]:

aciPrivateIp="$(az container show --name appcontainer \
  --resource-group $resourceGroup \
  --query ipAddress.ip --output tsv)"

Wdrażanie usługi Azure Firewall w sieci

W poniższych sekcjach użyj interfejsu wiersza polecenia platformy Azure, aby wdrożyć zaporę platformy Azure w sieci wirtualnej. Aby uzyskać podstawowe informacje, zobacz Samouczek: wdrażanie i konfigurowanie usługi Azure Firewall przy użyciu witryny Azure Portal.

Najpierw użyj polecenia az network vnet subnet create , aby dodać podsieć o nazwie AzureFirewallSubnet dla zapory. AzureFirewallSubnet jest wymaganą nazwą tej podsieci.

az network vnet subnet create \
  --name AzureFirewallSubnet \
  --resource-group $resourceGroup \
  --vnet-name aci-vnet   \
  --address-prefix 10.0.1.0/26

Użyj następujących poleceń interfejsu wiersza polecenia platformy Azure, aby utworzyć zaporę w podsieci .

Jeśli jeszcze nie zainstalowano, dodaj rozszerzenie zapory do interfejsu wiersza polecenia platformy Azure przy użyciu polecenia az extension add :

az extension add --name azure-firewall

Utwórz zasoby zapory przy użyciu polecenia az network firewall create :

az network firewall create \
  --name myFirewall \
  --resource-group $resourceGroup \
  --location eastus

az network public-ip create \
  --name fw-pip \
  --resource-group $resourceGroup \
  --location eastus \
  --allocation-method static \
  --sku standard
    
az network firewall ip-config create \
  --firewall-name myFirewall \
  --name FW-config \
  --public-ip-address fw-pip \
  --resource-group $resourceGroup \
  --vnet-name aci-vnet

Zaktualizuj konfigurację zapory za pomocą polecenia az network firewall update :

az network firewall update \
  --name myFirewall \
  --resource-group $resourceGroup

Pobierz prywatny adres IP zapory przy użyciu polecenia az network firewall ip-config list . Ten prywatny adres IP jest używany w późniejszym poleceniu.

fwPrivateIp="$(az network firewall ip-config list \
  --resource-group $resourceGroup \
  --firewall-name myFirewall \
  --query "[].privateIpAddress" --output tsv)"

Pobierz publiczny adres IP zapory przy użyciu polecenia az network public-ip show . Ten publiczny adres IP jest używany w późniejszym poleceniu.

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

Definiowanie trasy zdefiniowanej przez użytkownika w podsieci ACI

Zdefiniuj trasę zdefiniowaną przy użyciu w podsieci ACI, aby przekierować ruch do zapory platformy Azure. Aby uzyskać więcej informacji, zobacz Route network traffic (Kierowanie ruchu sieciowego).

Tworzenie tabeli tras

Najpierw uruchom następujące polecenie az network route-table create , aby utworzyć tabelę tras. Utwórz tabelę tras w tym samym regionie co sieć wirtualna.

az network route-table create \
  --name Firewall-rt-table \
  --resource-group $resourceGroup \
  --location eastus \
  --disable-bgp-route-propagation true

Tworzenie trasy

Uruchom polecenie az network-route-table route create , aby utworzyć trasę w tabeli tras. Aby skierować ruch do zapory, ustaw typ następnego przeskoku na VirtualAppliance, a następnie przekaż prywatny adres IP zapory jako adres następnego przeskoku.

az network route-table route create \
  --resource-group $resourceGroup \
  --name DG-Route \
  --route-table-name Firewall-rt-table \
  --address-prefix 0.0.0.0/0 \
  --next-hop-type VirtualAppliance \
  --next-hop-ip-address $fwPrivateIp

Kojarzenie tabeli tras z podsiecią ACI

Uruchom polecenie az network vnet subnet update, aby skojarzyć tabelę tras z podsiecią delegowana do usługi Azure Container Instances.

az network vnet subnet update \
  --name aci-subnet \
  --resource-group $resourceGroup \
  --vnet-name aci-vnet \
  --address-prefixes 10.0.0.0/24 \
  --route-table Firewall-rt-table

Konfigurowanie reguł w zaporze

Domyślnie usługa Azure Firewall blokuje (blokuje) ruch przychodzący i wychodzący.

Konfigurowanie reguły translatora adresów sieciowych w zaporze w podsieci ACI

Utwórz regułę translatora adresów sieciowych w zaporze w celu tłumaczenia i filtrowania przychodzącego ruchu internetowego do kontenera aplikacji uruchomionego wcześniej w sieci. Aby uzyskać szczegółowe informacje, zobacz Filtrowanie przychodzącego ruchu internetowego za pomocą dnaT usługi Azure Firewall

Utwórz regułę translatora adresów sieciowych i kolekcję przy użyciu polecenia az network firewall nat-rule create :

az network firewall nat-rule create \
  --firewall-name myFirewall \
  --collection-name myNATCollection \
  --action dnat \
  --name myRule \
  --protocols TCP \
  --source-addresses '*' \
  --destination-addresses $fwPublicIp \
  --destination-ports 80 \
  --resource-group $resourceGroup \
  --translated-address $aciPrivateIp \
  --translated-port 80 \
  --priority 200

Dodaj reguły NAT zgodnie z potrzebami, aby filtrować ruch do innych adresów IP w podsieci. Na przykład inne grupy kontenerów w podsieci mogą uwidaczniać adresy IP dla ruchu przychodzącego lub inne wewnętrzne adresy IP można przypisać do grupy kontenerów po ponownym uruchomieniu.

Tworzenie reguły aplikacji dla ruchu wychodzącego w zaporze

Uruchom następujące polecenie az network firewall application-rule create , aby utworzyć regułę ruchu wychodzącego w zaporze. Ta przykładowa reguła zezwala na dostęp z podsieci delegowanej do usługi Azure Container Instances do nazwy FQDN checkip.dyndns.org. Dostęp HTTP do witryny jest używany w późniejszym kroku w celu potwierdzenia adresu IP ruchu wychodzącego z usługi Azure Container Instances.

az network firewall application-rule create \
  --collection-name myAppCollection \
  --firewall-name myFirewall \
  --name Allow-CheckIP \
  --protocols Http=80 Https=443 \
  --resource-group $resourceGroup \
  --target-fqdns checkip.dyndns.org \
  --source-addresses 10.0.0.0/24 \
  --priority 200 \
  --action Allow

Testowanie dostępu do grupy kontenerów za pośrednictwem zapory

Poniższe sekcje sprawdzają, czy podsieć delegowana do usługi Azure Container Instances jest prawidłowo skonfigurowana za zaporą platformy Azure. Poprzednie kroki kierowały zarówno ruch przychodzący do podsieci, jak i ruchu wychodzącego z podsieci przez zaporę.

Testowanie ruchu przychodzącego do grupy kontenerów

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

echo $fwPublicIp

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

52.142.18.133

Jeśli reguła TRANSLATOR adresów sieciowych w zaporze jest prawidłowo skonfigurowana, podczas wprowadzania publicznego adresu IP zapory w przeglądarce zobaczysz następujące informacje:

Browse to firewall's public IP address

Testowanie ruchu wychodzącego z grupy kontenerów

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 zapory.

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>

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 zaporą platformy Azure. Skonfigurowano trasę zdefiniowaną przez użytkownika oraz reguły translatora adresów sieciowych i aplikacji w zaporze. Korzystając z tej konfiguracji, należy skonfigurować pojedynczy statyczny adres IP dla ruchu przychodzącego i wychodzącego z usługi Azure Container Instances.

Aby uzyskać więcej informacji na temat zarządzania ruchem i ochrony zasobów platformy Azure, zobacz dokumentację usługi Azure Firewall .