Korzyści z używania sieci dwustackowej w usłudze Azure Kubernetes Service (AKS)

Klastry usługi AKS można wdrożyć w trybie podwójnego stosu w przypadku korzystania z sieci wirtualnej platformy Azure z podwójnym stosem. W tej konfiguracji węzły otrzymują zarówno adres IPv4, jak i IPv6 z podsieci sieci wirtualnej platformy Azure. Zasobniki otrzymują zarówno adres IPv4, jak i IPv6 z logicznie innej przestrzeni adresowej niż podsieć węzłów sieci wirtualnej platformy Azure. Translacja adresów sieciowych (NAT) jest następnie konfigurowana, aby pody mogły uzyskiwać dostęp do zasobów w sieci wirtualnej platformy Azure. Źródłowy adres IP ruchu jest poddawany translacji NAT do podstawowego adresu IP węzła w tej samej rodzinie (IPv4 do IPv4 i IPv6 do IPv6).

W tym artykule pokazano, jak używać sieci podwójnego stosu z klastrem usługi AKS. Aby uzyskać więcej informacji na temat opcji i zagadnień dotyczących sieci, zobacz Pojęcia dotyczące sieci dla platform Kubernetes i AKS.

Ważne

Począwszy od 30 listopada 2025 r., usługa Azure Kubernetes Service (AKS) nie obsługuje już ani nie zapewnia aktualizacji zabezpieczeń dla systemu Azure Linux 2.0. Obraz węzła systemu Azure Linux 2.0 jest zamrożony w wydaniu202512.06.0. Od 31 października 2026 r. obrazy węzłów zostaną usunięte i nie będzie można skalować pul węzłów. Przeprowadź migrację do obsługiwanej wersji systemu Linux platformy Azure, uaktualniając pule węzłów do obsługiwanej wersji rozwiązania Kubernetes lub migrując do systemu osSku AzureLinux3. Aby uzyskać więcej informacji, zobacz kwestię na GitHub dotyczącą wycofania i ogłoszenie o wycofaniu aktualizacji Azure. Aby być na bieżąco z ogłoszeniami i aktualizacjami, śledź informacje o wersji usługi AKS.

Ograniczenia

  • W pulach węzłów systemu Linux na platformie Azure usługi IPv6 wymagają externalTrafficPolicy: Local.
  • Sieć dwustosowa jest wymagana dla sieci wirtualnej platformy Azure i zasobnika CIDR.
    • Korzystanie z jednostkowego stosu wyłącznie IPv6 nie jest obsługiwane dla adresów IP węzłów ani pod. Usługi można aprowizować na adresach IPv4 lub IPv6.
  • Nakładka Azure CNI nie obsługuje zasad sieciowych Azure ani Calico w sieci dual-stack. Aby użyć zasad sieciowych, użyj Azure CNI obsługiwanej przez cilium.
  • Standardowa brama NAT obsługuje wyłącznie protokół IPv4. W przypadku ruchu wychodzącego w konfiguracji dual-stack użyj bramy NAT StandardV2. Typ ruchu wychodzącego zarządzany przez usługę AKS managedNATGatewayV2 jest w wersji zapoznawczej.
  • Dodatek węzłów wirtualnych nie jest obsługiwany w sieci dual-stack.

Wymagania wstępne

W tym artykule użyto funkcji Azure CNI Overlay. Klaster z podwójnym stosem można również wdrożyć za pomocą usługi Azure CNI obsługiwanej przez cilium w klastrach systemu Linux z uruchomioną platformą Kubernetes w wersji 1.29 lub nowszej.

Omówienie sieci z podwójnym stosem na platformie Kubernetes

Platforma Kubernetes w wersji 1.23 zapewnia stabilną obsługę klastrów z dualnym stosem IPv4/IPv6, w tym sieci zasobników i usług. Węzły i pody są zawsze przypisywane zarówno adresy IPv4, jak i IPv6, podczas gdy usługi mogą być dwustosowe lub jednostosowe w każdej rodzinie adresów.

Usługa AKS konfiguruje wymagane usługi pomocnicze dla sieci z dwoma stosami. Ta konfiguracja obejmuje:

  • Jeśli używasz zarządzanej sieci wirtualnej, to konfiguracja sieci wirtualnej z obsługą dwóch stosów.
  • Adresy węzłów i zasobników IPv4 i IPv6.
  • Reguły ruchu wychodzącego dla ruchu IPv4 i IPv6.
  • Konfiguracja modułu równoważenia obciążenia dla usług IPv4 i IPv6.

Uwaga

W przypadku korzystania z sieci dwustosowej z typem ruchu wychodzącego zdefiniowanego przez użytkownika możesz wybrać domyślną trasę dla protokołu IPv6 w zależności od tego, czy ruch IPv6 jest potrzebny do dotarcia do Internetu. Jeśli nie masz trasy domyślnej dla protokołu IPv6, podczas tworzenia klastra zostanie wyświetlone ostrzeżenie, ale nie uniemożliwia tworzenia klastra.

Parametry klastra z podwójnym stosem

Następujące parametry obsługują klastry z dwoma stosami:

Parametr Dopuszczalne wartości Wartość domyślna Ograniczenia
--ip-families ipv4 lub ipv4,ipv6 Nieokreślona Podaj rozdzielaną przecinkami listę rodzin adresów IP, które mają być włączone w klastrze.
--pod-cidrs Rozdzielone przecinkami zakresy CIDR 10.244.0.0/16,fd12:3456:789a::/64 Liczba i kolejność zakresów muszą być zgodne z --ip-families.
--service-cidrs Rozdzielone przecinkami zakresy CIDR 10.0.0.0/16,fd12:3456:789a:1::/108 Liczba i kolejność zakresów muszą być zgodne z --ip-families. Podsieć IPv6 nie może być większa niż /108.

Wdróż klaster AKS z podwójnym stosem

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

    az group create --location <region> --name <resourceGroupName>
    
  2. Utwórz klaster AKS z podwójnym stosem za pomocą polecenia az aks create, w którym parametr --ip-families jest ustawiony na ipv4,ipv6.

    az aks create \
        --location <region> \
        --resource-group <resourceGroupName> \
        --name <clusterName> \
        --network-plugin azure \
        --network-plugin-mode overlay \
        --ip-families ipv4,ipv6 \
        --generate-ssh-keys
    
  3. Po utworzeniu klastra pobierz poświadczenia klastra przy użyciu az aks get-credentials polecenia .

    az aks get-credentials --resource-group <resourceGroupName> --name <clusterName>
    

Sprawdź węzły, aby zobaczyć obie rodziny adresów IP

Po utworzeniu klastra potwierdź za pomocą polecenia kubectl get nodes, że węzły zostały skonfigurowane z obsługą podwójnego stosu sieciowego.

kubectl get nodes -o=custom-columns="NAME:.metadata.name,ADDRESSES:.status.addresses[?(@.type=='InternalIP')].address,PODCIDRS:.spec.podCIDRs[*]"

Wynik polecenia kubectl get nodes pokazuje, że węzły mają adresy i przestrzeń adresową IP zasobników zarówno z IPv4, jak i IPv6.

NAME                                ADDRESSES                           PODCIDRS
aks-nodepool1-14508455-vmss000000   10.240.0.4,2001:1234:5678:9abc::4   10.244.0.0/24,fd12:3456:789a::/80
aks-nodepool1-14508455-vmss000001   10.240.0.5,2001:1234:5678:9abc::5   10.244.1.0/24,fd12:3456:789a:0:1::/80
aks-nodepool1-14508455-vmss000002   10.240.0.6,2001:1234:5678:9abc::6   10.244.2.0/24,fd12:3456:789a:0:2::/80

Tworzenie przykładowego obciążenia

Wdróż serwer WWW NGINX z trzema replikami, aby zweryfikować przydzielanie adresów IP podom w konfiguracji dual-stack.

Wdrażanie serwera internetowego NGINX

  1. Utwórz serwer internetowy NGINX, uruchamiając kubectl create deployment nginx polecenie .

    kubectl create deployment nginx --image=nginx:latest --replicas=3
    
  2. Wyświetl zasoby zasobnika, uruchamiając polecenie kubectl get pods.

    kubectl get pods -o custom-columns="NAME:.metadata.name,IPs:.status.podIPs[*].ip,NODE:.spec.nodeName,READY:.status.conditions[?(@.type=='Ready')].status"
    

    Dane wyjściowe pokazują, że zasobniki mają adresy IPv4 i IPv6. Zasobniki nie wyświetlają adresów IP, dopóki nie będą gotowe.

    NAME                     IPs                                NODE                                READY
    nginx-55649fd747-9cr7h   10.244.2.2,fd12:3456:789a:0:2::2   aks-nodepool1-14508455-vmss000002   True
    nginx-55649fd747-p5lr9   10.244.0.7,fd12:3456:789a::7       aks-nodepool1-14508455-vmss000000   True
    nginx-55649fd747-r2rqh   10.244.1.2,fd12:3456:789a:0:1::2   aks-nodepool1-14508455-vmss000001   True
    

Udostępnij obciążenie za pomocą usługi typu LoadBalancer

Ważne

Usługa Azure Load Balancer wysyła sondy kondycji do miejsc docelowych IPv6 z adresu link-local. W pulach węzłów Azure Linux ruch do usług IPv6, które korzystają z externalTrafficPolicy: Cluster, kończy się niepowodzeniem. Poniższe przykłady ustawiają externalTrafficPolicy: Local dla usługi IPv6, tak aby kube-proxy odpowiadał na próbnik na węźle.

  1. Uwidaczniaj wdrożenie serwera NGINX przy użyciu oddzielnych usług IPv4 i IPv6 LoadBalancer za pomocą kubectl expose deployment nginx polecenia .

    kubectl expose deployment nginx --name=nginx-ipv4 --port=80 --type=LoadBalancer
    kubectl expose deployment nginx --name=nginx-ipv6 --port=80 --type=LoadBalancer --overrides='{"spec":{"externalTrafficPolicy":"Local","ipFamilies":["IPv6"]}}'
    

    Otrzymasz dane wyjściowe, które pokazują, że usługi są uwidocznione.

    service/nginx-ipv4 exposed
    service/nginx-ipv6 exposed
    
  2. Po udostępnieniu wdrożenia i pełnym aprowizowaniu usług LoadBalancer uzyskaj adresy IP usług za pomocą polecenia kubectl get services.

    kubectl get services
    
    NAME         TYPE           CLUSTER-IP               EXTERNAL-IP         PORT(S)        AGE
    nginx-ipv4   LoadBalancer   10.0.88.78               20.46.24.24         80:30652/TCP   97s
    nginx-ipv6   LoadBalancer   fd12:3456:789a:1::981a   2603:1030:8:5::2d   80:32002/TCP   63s
    
  3. Zweryfikuj działanie z poziomu maszyny wirtualnej z systemem Linux lub komputera lokalnego z przypisanym adresem IPv6 i skonfigurowanym routingiem IPv6. Azure Cloud Shell nie obsługuje protokołu IPv6.

    SERVICE_IP=$(kubectl get services nginx-ipv6 -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
    curl -s "http://[${SERVICE_IP}]" | head -n5
    
    <!DOCTYPE html>
    <html>
    <head>
    <title>Welcome to nginx!</title>
    <style>