Utwórz zarządzaną lub przypisaną przez użytkownika bramę NAT dla swojego klastra Azure Kubernetes Service (AKS)

Chociaż można kierować ruch wychodzący przez Azure Load Balancer, istnieją ograniczenia dotyczące liczby przepływów wychodzących ruchu, które można mieć. Azure NAT Gateway umożliwia maksymalnie 64 512 przepływów ruchu wychodzącego UDP i TCP na adres IP z maksymalnie 16 adresami IP. Istnieją trzy typy ruchu wychodzącego, które obsługują bramę translatora adresów sieciowych — managedNATGatewayV2 (wersja zapoznawcza), managedNATGateway i userAssignedNATGateway.

W modelu zarządzanej bramy NAT, AKS zarządza bramą NAT, aby zapewnić połączenie wychodzące dla węzłów klastra. Usługa AKS obsługuje dwie opcje zarządzanej bramy NAT: nowsza managedNATGatewayV2 i oryginalna managedNATGateway. managedNATgatewayV2 używa bramy NAT w warstwie StandardowaV2, która jest domyślnie nadmiarowa w strefach, zapewniając ciągłą łączność wychodzącą, nawet jeśli jedna z dostępnych stref ulegnie awarii. W przeciwieństwie do standardowej bramy NAT nie trzeba określać strefy; strefowa nadmiarowość jest wbudowana automatycznie. Brama NAT StandardV2 obsługuje również IPv6, wyższą przepustowość i dzienniki przepływu. Aby uzyskać więcej informacji, zobacz SKU bramy NAT StandardV2.

Ważne

Typ managedNATGatewayV2 ruchu wychodzącego jest obecnie w wersji PRÓBNEJ. Zapoznaj się z Dodatkowymi warunkami użytkowania dla wersji zapoznawczych Microsoft Azure, aby uzyskać informację o postanowieniach prawnych dotyczących funkcji Azure, które są w fazie beta, wersji zapoznawczej lub w inny sposób są jeszcze niedostępne ogólnie.

userAssignedNATGateway to zasób bramy NAT zarządzany przez klienta, który konfiguruje się niezależnie od usługi AKS i jest potrzebny w przypadku korzystania z własnej sieci wirtualnej.

W tym artykule pokazano, jak utworzyć klaster Azure Kubernetes Service (AKS) z zarządzaną bramą NAT oraz bramą NAT przypisaną przez użytkownika do obsługi ruchu wychodzącego. Pokazano również, jak wyłączyć funkcję OutboundNAT w Windows.

Zanim rozpoczniesz

  • Upewnij się, że używasz najnowszej wersji Azure CLI.
  • Upewnij się, że używasz platformy Kubernetes w wersji 1.20.x lub nowszej.
  • Zarządzana brama NAT jest niekompatybilna z niestandardowymi sieciami wirtualnymi.

Ważne

W klastrach innych niż prywatne, ruch do serwera API jest kierowany i przetwarzany przez typ wychodzący klastra. Aby zapobiec przetwarzaniu ruchu serwera interfejsu API jako ruchu publicznego, rozważ użycie klastra prywatnego lub zapoznaj się z funkcją integracji z siecią wirtualną serwera interfejsu API.

Utwórz klaster usługi AKS za pomocą elementu managedNATgatewayV2

  • Utwórz klaster usługi AKS z zarządzaną bramą NAT w warstwie Standard V2 przy użyciu polecenia az aks create z parametrami --outbound-type managedNATGateway, --nat-gateway-outbound-ips, --nat-gateway-outbound-ip-prefixes, --nat-gateway-managed-outbound-ip-count, --nat-gateway-managed-outbound-ipv6-count i --nat-gateway-idle-timeout.
  • Podczas konfigurowania wychodzących adresów IP dla managedNATgatewayV2 należy użyć one z następujących metod — nie można użyć zarówno adresów IP ruchu wychodzącego Azure, jak i zdefiniowanych przez klienta:
    • Azure-zarządzane adresy IP — użyj --nat-gateway-managed-ip-outbound-count i/lub --nat-gateway-managed-outbound-ipv6-count do tego, aby Azure automatycznie przydzielał i zarządzał publicznymi adresami IP w Twoim imieniu.
    • Adresy IP zdefiniowane przez klienta — używaj --nat-gateway-outbound-ips i/lub --nat-gateway-outbound-ip-prefixes do korzystania z własnych wstępnie aprowizowanych publicznych adresów IP lub prefiksów, co daje pełną kontrolę nad specyficznymi adresami używanymi do ruchu wychodzącego. Brama NAT StandardV2 wymaga użycia nowych publicznych adresów IP StandardV2. Istniejące publiczne adresy IP jednostki SKU w warstwie Standardowa nie działają z bramą translatora adresów sieciowych w warstwie Standardowa 2.

W poniższej tabeli opisano każdy parametr wychodzącego adresu IP i kiedy należy go użyć:

Parameter Dane wejściowe Wersja protokołu IP Kto zarządza publicznymi adresami IP
--nat-gateway-managed-outbound-ip-count Wartość w zakresie [1, 16]. Żądana liczba wychodzących adresów IPv4 dla połączenia wychodzącego bramy NAT. IPv4 Azure
--nat-gateway-managed-outbound-ipv6-count Wartość w zakresie [1, 16]. Pożądana liczba adresów IPv6 wychodzących dla połączenia wychodzącego z bramy NAT. IPv6 Azure
--nat-gateway-outbound-ips Identyfikatory zasobów publicznych adresów IP, rozdzielone przecinkami, dla połączenia wychodzącego przez bramę NAT. Protokół IPv4 lub IPv6 Klient
--nat-gateway-outbound-ip-prefixes Identyfikatory zasobów prefiksów publicznych IP rozdzielone przecinkami dla połączenia wychodzącego bramy NAT. Protokół IPv4 lub IPv6 Klient

managedNATGatewayV2 typ ruchu wychodzącego jest obecnie w wersji zapoznawczej, aby użyć tego typu ruchu wychodzącego, należy zainstalować rozszerzenie aks-preview Azure CLI i zarejestrować flagę funkcji ManagedNATGatewayV2Preview.

Ważne

Funkcje usługi AKS w wersji zapoznawczej są dostępne na zasadzie samoobsługi i wymagają zapisania się. Wersje zapoznawcze są udostępniane w wersji "as is" i "jako dostępne" i są wykluczone z umów dotyczących poziomu usług i ograniczonej gwarancji. Wersje zapoznawcze usługi AKS są częściowo objęte pomocą techniczną dla klientów, świadczoną w miarę możliwości. W związku z tym te funkcje nie są przeznaczone do użytku produkcyjnego. Aby uzyskać więcej informacji, zobacz następujące artykuły pomocy technicznej:

  1. Zainstaluj lub zaktualizuj rozszerzenie Azure CLI w wersji zapoznawczej przy użyciu polecenia az extension add lub az extension update.

    Minimalna wersja rozszerzenia aks-preview Azure CLI to 20.0.0b1.

    # Install the aks-preview extension
    az extension add --name aks-preview
    # Update the extension to make sure you have the latest version installed
    az extension update --name aks-preview
    
  2. Zarejestruj flagę funkcji ManagedNATGatewayV2Preview

    Zarejestruj flagę funkcji ManagedNATGatewayV2Preview za pomocą polecenia az feature register.

    az feature register --namespace "Microsoft.ContainerService" --name "ManagedNATGatewayV2Preview"
    

    Przy użyciu polecenia az feature show sprawdź, czy rejestracja przebiegła pomyślnie. Ukończenie rejestracji trwa kilka minut.

    az feature show --namespace "Microsoft.ContainerService" --name "ManagedNATGatewayV2Preview"
    

    Gdy funkcja wyświetli Registered, odśwież rejestrację Microsoft.ContainerService dostawcy zasobów przy użyciu polecenia az provider register.

    Następujące polecenia tworzą wymaganą grupę zasobów, publiczny adres IP i zasoby prefiksu publicznego IP do podłączenia do bramy NAT oraz klaster AKS z zarządzaną bramą NAT w wersji StandardV2.

  3. Utwórz grupę zasobów przy użyciu az group create polecenia .

    export RANDOM_SUFFIX=$(openssl rand -hex 3)
    export MY_RG="myResourceGroup$RANDOM_SUFFIX"
    export MY_AKS="myNatV2Cluster$RANDOM_SUFFIX"
    export MY_IP="myNatOutboundIP$RANDOM_SUFFIX"
    export MY_IP_PREFIX="myNatOutboundIPPrefix$RANDOM_SUFFIX"
    az group create --name $MY_RG --location "eastus2"
    
  4. Utwórz strefowo nadmiarowy adres IP w wersji IPv4 oraz prefiks dla publicznego adresu IP, korzystając z polecenia az network public-ip create. Przechowaj $MY_IP i $MY_IP_PREFIX i użyj jako wyjściowych adresów IP dla zarządzanego bramy NAT StandardV2.

    export MY_IP_ID=$(az network public-ip create \
        --resource-group $MY_RG \
        --name $MY_IP \
        --location eastus2 \
        --sku StandardV2 \
        --allocation-method Static \
        --version IPv4 \
        --zone 1 2 3 \
        --query id \
        --output tsv)
    
    export MY_IP_PREFIX_ID=$(az network public-ip prefix create \
        --resource-group $MY_RG \
        --name $MY_IP_PREFIX \
        --location eastus2 \
        --length 31 \
        --sku StandardV2 \
        --version IPv4 \
        --zone 1 2 3 \
        --query id \
        --output tsv)
    
  5. Utwórz klaster usługi AKS i odwołaj się do publicznego adresu IP ($MY_IP_ID) i prefiksu publicznego adresu IP ($MY_IP_PREFIX_ID).

    az aks create \
        --resource-group $MY_RG \
        --name $MY_AKS \
        --node-count 3 \
        --outbound-type managedNATGatewayV2 \
        --nat-gateway-outbound-ips $MY_IP_ID \
        --nat-gateway-outbound-ip-prefixes $MY_IP_PREFIX_ID \
        --nat-gateway-idle-timeout 4 \
        --generate-ssh-keys
    

Zaktualizuj wychodzące adresy IP, prefiksy wychodzących adresów IP, liczbę zarządzanych wychodzących adresów IP lub limit czasu bezczynności przy użyciu az aks update polecenia z parametrem --nat-gateway-outbound-ips, --nat-gateway-outbound-ip-prefixes, --nat-gateway-managed-outbound-count, --nat-gateway-managed-outbound-ipv6-countlub --nat-gateway-idle-timeout . managedNATGatewayV2 Nie można zmienić konfiguracji, aby umożliwić przełączanie się między zdefiniowanymi przez klienta a zarządzanymi wychodzącymi adresami IP po ich utworzeniu. Konfiguracja wychodzącego adresu IP jest określana, gdy brama NAT StandardV2 jest początkowo tworzona i pozostaje niezmienna.

Utwórz klaster usługi AKS za pomocą elementu managedNATgateway

  • Utwórz klaster usługi AKS z zarządzaną bramą NAT w standardowej warstwie, używając polecenia az aks create--outbound-type managedNATGateway. --nat-gateway-managed-outbound-ip-count, i --nat-gateway-idle-timeout parametry. Jeśli chcesz, aby brama NAT działała w określonej strefie dostępności, określ strefę przy użyciu --zones.

  • Zarządzana brama NAT nie może być używana w wielu strefach dostępności. W przypadku strefowej, nadmiarowej łączności wychodzącej rozważ użycie managedNATgatewayV2.

  • Jeśli podczas tworzenia zarządzanej bramy translatora adresów sieciowych nie określono żadnej strefy, brama translatora adresów sieciowych jest wdrażana domyślnie w "bez strefy". Po umieszczeniu bramy NAT w brak strefy, Azure automatycznie umieszcza zasób w strefie. Aby uzyskać więcej informacji na temat bezstrefowego modelu wdrażania, zobacz brama NAT.

Utwórz klaster usługi AKS za pomocą elementu userAssignedNatGateway

Ta konfiguracja wymaga użycia własnej sieci (za pośrednictwem Azure CNI) oraz wstępnej konfiguracji bramy NAT w podsieci. W tym outbound-type obsługiwane są zarówno bramy NAT Standard, jak i StandardV2. Następujące polecenia umożliwiają utworzenie wymaganych zasobów do wdrożenia zasobu bramy NAT StandardowaV2 dla klastra AKS.

  1. Utwórz grupę zasobów przy użyciu az group create polecenia .

    export RANDOM_SUFFIX=$(openssl rand -hex 3)
    export MY_RG="myResourceGroup$RANDOM_SUFFIX"
    az group create --name $MY_RG --location southcentralus
    
  2. Utwórz tożsamość zarządzaną dla uprawnień sieci i zapisz identyfikator do $IDENTITY_ID późniejszego użycia.

    export IDENTITY_NAME="myNatClusterId$RANDOM_SUFFIX"
    export IDENTITY_ID=$(az identity create \
        --resource-group $MY_RG \
        --name $IDENTITY_NAME \
        --location southcentralus \
        --query id \
        --output tsv)
    

    Wyniki:

    /xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/myResourceGroupxxx/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myNatClusterIdxxx
    
  3. Utwórz publiczny adres IP typu StandardV2 dla bramy NAT przy użyciu polecenia az network public-ip create. Brama NAT StandardV2 wymaga publicznego adresu IP StandardV2.

    export PIP_NAME="myNatGatewayPip$RANDOM_SUFFIX"
    az network public-ip create \
        --resource-group $MY_RG \
        --name $PIP_NAME \
        --location southcentralus \
        --allocation-method Static \
        --version IPv4 \
        --zone 1 2 3 \
        --sku standard-v2
    
  4. Utwórz bramę NAT StandardV2 przy użyciu polecenia az network nat gateway create.

    export NATGATEWAY_NAME="myNatGateway$RANDOM_SUFFIX"
    az network nat gateway create \
        --resource-group $MY_RG \
        --name $NATGATEWAY_NAME \
        --location southcentralus \
        --public-ip-addresses $PIP_NAME \
        --sku StandardV2
        --idle-timeout 4
    

    Ważne

    Aby zapewnić nadmiarowość strefy, zaleca się wdrożenie zasobu bramy NAT w warstwie StandardV2, który obejmuje wiele stref dostępności w regionie. Zapewnia to ciągłą łączność wychodzącą, nawet jeśli jedna strefa ulegnie awarii. Aby uzyskać więcej informacji na temat bramy translatora adresów sieciowych w warstwie StandardowaV2 i jej zalet, zobacz Brama translatora adresów sieciowych w warstwie StandardowaV2. Dla porównania, zasób bramy NAT standardowa zapewnia odporność tylko w strefie dostępności, w której została wdrożona.

  5. Utwórz sieć wirtualną przy użyciu az network vnet create polecenia .

    export VNET_NAME="myVnet$RANDOM_SUFFIX"
    az network vnet create \
        --resource-group $MY_RG \
        --name $VNET_NAME \
        --location southcentralus \
        --address-prefixes 172.16.0.0/20 
    
  6. Utwórz podsieć w sieci wirtualnej przy użyciu bramy translatora adresów sieciowych i zapisz identyfikator do $SUBNET_ID późniejszego użycia.

    export SUBNET_NAME="myNatCluster$RANDOM_SUFFIX"
    export SUBNET_ID=$(az network vnet subnet create \
        --resource-group $MY_RG \
        --vnet-name $VNET_NAME \
        --name $SUBNET_NAME \
        --address-prefixes 172.16.0.0/22 \
        --nat-gateway $NATGATEWAY_NAME \
        --query id \
        --output tsv)
    
  7. Utwórz klaster usługi AKS przy użyciu podsieci z bramą NAT i tożsamością zarządzaną przy użyciu polecenia az aks create.

    export AKS_NAME="myNatCluster$RANDOM_SUFFIX"
    az aks create \
        --resource-group $MY_RG \
        --name $AKS_NAME \
        --location southcentralus \
        --network-plugin azure \
        --vnet-subnet-id $SUBNET_ID \
        --outbound-type userAssignedNATGateway \
        --assign-identity $IDENTITY_ID \
        --generate-ssh-keys
    

Wyłączanie NAT ruchu wychodzącego dla Windows

Windows OutboundNAT może powodować pewne problemy z połączeniem i komunikacją z podami w usłudze AKS. Przykładem problemu jest ponowne użycie portu węzła. W tym przykładzie Windows OutboundNAT używa portów do tłumaczenia adresu IP zasobnika na adres IP hosta węzła Windows, co może spowodować niestabilne połączenie z usługą zewnętrzną z powodu problemu z wyczerpaniem portów.

Windows domyślnie włącza funkcję OutboundNAT. Teraz można ręcznie wyłączyć funkcję OutboundNAT podczas tworzenia nowych pul agentów Windows.

Wymagania wstępne

  • Istniejący klaster usługi AKS z systemem w wersji 1.26 lub nowszej. Jeśli używasz platformy Kubernetes w wersji 1.25 lub starszej, musisz zaktualizować konfigurację wdrożenia.

Ograniczenia

  • Nie można ustawić typu wychodzącego klastra na LoadBalancer. Można ustawić dla brama NAT lub trasy zdefiniowanej przez użytkownika:
    • NAT Gateway: Brama NAT może automatycznie obsługiwać połączenia NAT i jest bardziej wydajna niż Standardowy Load Balancer. W przypadku tej opcji mogą zostać naliczone dodatkowe opłaty.
    • Trasa zdefiniowana przez użytkownika (UserDefinedRouting): podczas konfigurowania reguł routingu należy pamiętać o ograniczeniach portów.
    • Jeśli musisz przełączyć się z równoważnika obciążenia na bramę NAT, możesz dodać bramę NAT do sieci wirtualnej lub uruchomić az aks upgrade, aby zaktualizować typ ruchu wychodzącego.

Uwaga

UserDefinedRouting ma następujące ograniczenia:

  • SNAT przez Load Balancer (musi używać domyślnej wartości OutboundNAT) ma "64 porty na adresie IP hosta".
  • SNAT by Azure Firewall (disable OutboundNAT) ma 2496 portów na publiczny adres IP.
  • SNAT by NAT Gateway (disable OutboundNAT) ma 64512 portów na publiczny adres IP.
  • Jeśli zakres portów Azure Firewall jest niewystarczający dla Twojej aplikacji, musisz użyć NAT Gateway.
  • Azure Firewall nie stosuje SNAT z zasadami sieciowymi, gdy docelowy adres IP znajduje się w prywatnym zakresie adresów IP wg IANA RFC 1918 lub we współużytkowanej przestrzeni adresowej zgodnie z IANA RFC 6598.

Ręczne wyłączanie OutboundNAT dla Windows

  • Ręcznie wyłącz funkcję OutboundNAT dla Windows podczas tworzenia nowych pul agentów Windows przy użyciu polecenia az aks nodepool add z flagą --disable-windows-outbound-nat.

    Uwaga

    Możesz użyć istniejącego klastra AKS, ale być może trzeba będzie zaktualizować typ wyjściowy i dodać pulę węzłów, aby włączyć --disable-windows-outbound-nat.

    Następujące polecenie dodaje pulę węzłów Windows do istniejącego klastra usługi AKS, wyłączając funkcję OutboundNAT.

      export WIN_NODEPOOL_NAME="win$(head -c 1 /dev/urandom | xxd -p)"
      az aks nodepool add \
        --resource-group $MY_RG \
        --cluster-name $MY_AKS \
        --name $WIN_NODEPOOL_NAME \
        --node-count 3 \
        --os-type Windows \
        --disable-windows-outbound-nat
    

    Wyniki:

    {
      "id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/myResourceGroupxxx/providers/Microsoft.ContainerService/managedClusters/myNatClusterxxx/agentPools/mynpxxx",
      "name": "mynpxxx",
      "osType": "Windows",
      "provisioningState": "Succeeded",
      "resourceGroup": "myResourceGroupxxx",
      "type": "Microsoft.ContainerService/managedClusters/agentPools"
    }
    

Następne kroki

Aby uzyskać więcej informacji na temat Azure NAT Gateway, zobacz Azure NAT Gateway.