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

Dotyczy: ✔️ AKS Automatic AKS Standard ✔️

W przypadku większości obciążeń produkcyjnych AKS Automatic to zalecany, gotowy do użycia produkcyjnego domyślny wybór dla usługi AKS. Klastry automatyczne AKS obejmują wstępnie skonfigurowaną zarządzaną bramę NAT.

W usłudze AKS Standard można utworzyć lub skonfigurować zarządzaną bramę NAT, jeśli chcesz korzystać w klastrze z łączności wychodzącej zarządzanej przez usługę AKS. W scenariuszach sieciowych typu bring-your-own (BYO) użyj bramy NAT przypisanej przez użytkownika.

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ć. Usługa Azure NAT Gateway obsługuje do 64 512 przepływów ruchu wychodzącego UDP i TCP na każdy adres IP, przy maksymalnie 16 adresach IP. Trzy typy ruchu wychodzącego obsługują bramę NAT: managedNATGatewayV2 (wersja zapoznawcza), managedNATGateway i userAssignedNATGateway.

W tym artykule pokazano, jak utworzyć klaster AKS z zarządzaną bramą NAT i bramą NAT przypisaną przez użytkownika dla ruchu wychodzącego. Pokazano również, jak wyłączyć funkcję OutboundNAT dla Windows.

Ważne

Typ ruchu wychodzącego managedNATGatewayV2 jest obecnie w wersji zapoznawczej. 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.

Wymagania wstępne

Klastry automatyczne AKS zawierają wstępnie skonfigurowaną zarządzaną bramę NAT. Kroki opisane w tym artykule dotyczą głównie scenariuszy usługi AKS Standard oraz niestandardowej konfiguracji sieci.

  • 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 nie jest zgodna z niestandardowymi sieciami wirtualnymi.

Ważne

W klastrach nieprywatnych ruch do serwera API klastra jest kierowany i przetwarzany za pośrednictwem typu ruchu wychodzącego 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.

Zarządzana brama NAT w AKS

AKS Automatic używa zarządzanej bramy NAT jako elementu swojej wstępnie skonfigurowanej, domyślnej konfiguracji gotowej do użycia produkcyjnego. Użyj tej sekcji, jeśli pracujesz z AKS Standard lub jeśli chcesz zrozumieć, jak działa zarządzana brama NAT w klastrze AKS.

Zarządzana brama NAT to opcja ruchu wychodzącego zarządzana przez AKS. AKS tworzy bramę NAT i zarządza nią, aby zapewnić łączność wychodzącą dla węzłów klastra.

Użyj zarządzanej bramy NAT, gdy chcesz:

  • Łączność wychodząca zarządzana przez AKS przy mniejszym narzucie operacyjnym.
  • Przyjazna dla środowiska produkcyjnego domyślna ścieżka ruchu wychodzącego.
  • Prostsze zarządzanie ruchem wychodzącym niż w przypadku wdrożenia bramy NAT zarządzanej przez klienta.
  • Standardowy model sieci AKS bez użycia własnego zasobu bramy NAT.

Tworzenie klastra AKS z zarządzaną bramą NAT

Parametry wychodzącego adresu IP

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

Utwórz klaster AKS przy użyciu zarządzanej bramy NAT w wersji StandardV2 (managedNATGatewayV2)

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:

  • 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 elementu managedNATgatewayV2należy użyć jednej z następujących metod. Nie można używać jednocześnie adresów IP ruchu wychodzącego zarządzanych przez platformę Azure i zdefiniowanych przez klienta.
    • Adresy IP zarządzane przez platformę Azure: Użyj --nat-gateway-managed-ip-outbound-count i --nat-gateway-managed-outbound-ipv6-count, aby platforma Azure automatycznie przydzielała publiczne adresy IP dla ruchu wychodzącego i zarządzała nimi w Twoim imieniu.
    • Adresy IP zdefiniowane przez klienta: użyj polecenia --nat-gateway-outbound-ips i --nat-gateway-outbound-ip-prefixes , aby przyłączyć własne wstępnie aprowidowane publiczne adresy IP lub prefiksy, zapewniając pełną kontrolę nad określonymi adresami używanymi do ruchu wychodzącego. Brama NAT StandardV2 wymaga użycia nowych publicznych adresów IP StandardV2. Istniejące publiczne adresy IP w jednostce SKU Standard nie działają z bramą NAT StandardV2.

Zainstaluj rozszerzenie Azure CLI aks-preview

Typ managedNATGatewayV2 wychodzący jest obecnie dostępny w wersji zapoznawczej. Aby użyć tego typu ruchu wychodzącego, zainstaluj aks-preview rozszerzenie Azure CLI i zarejestruj flagę funkcji ManagedNATGatewayV2Preview.

Zainstaluj lub zaktualizuj rozszerzenie Azure CLI w wersji zapoznawczej przy użyciu polecenia az extension add lub az extension update. Minimalna wersja rozszerzenia interfejsu wiersza polecenia platformy aks-preview Azure 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

Zarejestruj flagę funkcji ManagedNATGatewayV2Preview

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

    az feature register --namespace "Microsoft.ContainerService" --name "ManagedNATGatewayV2Preview"
    
  2. 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.

Utwórz klaster AKS z zarządzaną bramą NAT StandardV2

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.

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

    # Set environment variables for resource group, AKS cluster, public IP, and public IP prefix names
    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"
    
    # Create the resource group
    az group create --name $MY_RG --location "eastus2"
    
  2. 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.

    # Create a zone redundant IPv4 public IP address and store the ID to $MY_IP_ID for later use
    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 publicIp.id \
        --output tsv)
    
    # Create a zone redundant IPv4 public IP prefix and store the ID to $MY_IP_PREFIX_ID for later use
    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)
    
  3. Utwórz klaster AKS i odwołaj się do publicznego adresu IP ($MY_IP_ID) oraz prefiksu publicznego adresu IP ($MY_IP_PREFIX_ID) za pomocą polecenia az aks create z parametrami --outbound-type managedNATGatewayV2, --nat-gateway-outbound-ips i --nat-gateway-outbound-ip-prefixes.

    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 ustalana w momencie utworzenia bramy NAT StandardV2 i pozostaje niezmienna.

Utwórz klaster AKS przy użyciu zarządzanej bramy NAT w warstwie Standard (managedNATGateway)

  • Utwórz klaster usługi AKS z zarządzaną bramą NAT w warstwie Standard za pomocą polecenia az aks create z parametrami --outbound-type managedNATGateway, --nat-gateway-managed-outbound-ip-count i --nat-gateway-idle-timeout. Jeśli chcesz, aby brama NAT działała w określonej strefie dostępności, określ strefę przy użyciu --zones.
  • Nie można używać zasobu zarządzanej bramy NAT 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 NAT nie określisz strefy, brama NAT zostanie domyślnie wdrożona do bez strefy. Gdy brama NAT nie jest przypisana do żadnej strefy, platforma Azure przypisuje zasób do strefy. Aby uzyskać więcej informacji o niestrefowym modelu wdrażania, zobacz niestrefową bramę 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 .

    # Set environment variables for resource group, AKS cluster, public IP, and public IP prefix names
    export RANDOM_SUFFIX=$(openssl rand -hex 3)
    export MY_RG="myResourceGroup$RANDOM_SUFFIX"
    
    # Create the resource group
    az group create --name $MY_RG --location southcentralus
    
  2. Utwórz tożsamość zarządzaną na potrzeby uprawnień sieciowych i zapisz identyfikator w $IDENTITY_ID, aby użyć go później.

    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)
    

    Przykładowy wynik:

    /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ść między strefami, wdroż zasób bramy NAT StandardV2, który obejmuje wiele stref dostępności w regionie. Ta konfiguracja zapewnia 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 w warstwie Standard zapewnia odporność tylko w strefie dostępności, w której został wdrożony.

  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
    

Zagadnienia dotyczące środowiska produkcyjnego

Jeśli używasz zarządzanej bramy NAT w środowisku produkcyjnym, zaplanuj sposób obsługi ruchu wychodzącego, dostęp do serwera API oraz odporność obciążeń.

  • Użyj rozwiązania AKS Automatic, jeśli potrzebujesz zalecanych, gotowych do użycia w środowisku produkcyjnym ustawień domyślnych dla większości obciążeń AKS.
  • Użyj zarządzanej bramy NAT w usłudze AKS w warstwie Standard, gdy chcesz korzystać z łączności wychodzącej zarządzanej przez usługę AKS bez konieczności wdrażania własnej bramy NAT.
  • Użyj klastra prywatnego lub integracji serwera API z siecią wirtualną, jeśli chcesz ograniczyć ekspozycję ruchu do serwera API.
  • Przed rozpoczęciem pracy na żywo zapoznaj się z wymaganiami dotyczącymi wychodzących adresów IP.
  • Jeśli obciążenia zależą od stałych adresów wychodzących, przed wdrożeniem sprawdź, czy zarządzana brama translatora adresów sieciowych spełnia te wymagania.
  • Jeśli musisz zarządzać NAT niezależnie od AKS, użyj bramy NAT przypisanej przez użytkownika.

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 i ograniczenia

  • Potrzebny jest istniejący klaster AKS w wersji v1.26 lub nowszej. Jeśli używasz platformy Kubernetes w wersji 1.25 lub starszej, zaktualizuj konfigurację wdrożenia.
  • Nie można ustawić typu ruchu wychodzącego dla klastra na LoadBalancer. Można ustawić dla brama NAT lub trasy zdefiniowanej przez użytkownika:
    • NAT Gateway: automatycznie obsługuje połączenia NAT i zapewnia większe możliwości niż usługa Load Balancer w warstwie Standardowa. W przypadku korzystania z 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.
    • Aby przełączyć się z usługi Load Balancer na bramę NAT, możesz dodać bramę NAT do sieci wirtualnej (VNet) lub uruchomić polecenie az aks upgrade, aby zaktualizować typ ruchu wychodzącego.

Uwaga

UserDefinedRouting ma następujące ograniczenia:

  • SNAT realizowany przez usługę Load Balancer (musi używać domyślnego ustawienia OutboundNAT) udostępnia 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 64 512 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.

    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
    

    Przykładowy wynik:

    {
      "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"
    }
    

Aby uzyskać więcej informacji na temat Azure NAT Gateway i usługi AKS Automatic, zobacz następujące artykuły: