Použití sítě se dvěma zásobníky ve službě Azure Kubernetes Service (AKS)

Clustery AKS můžete nasadit v režimu duálního zásobníku při použití virtuální sítě Azure se dvěma zásobníky. V této konfiguraci uzly z podsítě virtuální sítě Azure obdrží adresu IPv4 i IPv6. Pody obdrží adresu IPv4 i IPv6 z logicky jiného adresního prostoru do podsítě virtuální sítě Azure uzlů. Překlad adres (NAT) se pak nakonfiguruje tak, aby pody mohly získat přístup k prostředkům ve virtuální síti Azure. Zdrojová IP adresa datového provozu je překládána NAT na primární IP adresu uzlu stejné rodiny (IPv4 na IPv4 a IPv6 na IPv6).

V tomto článku se dozvíte, jak používat duální zásobníkovou síť s clusterem AKS. Další informace o možnostech a aspektech sítě najdete v tématu Koncepty sítě pro Kubernetes a AKS.

Důležité

Od 30. listopadu 2025 už Azure Kubernetes Service (AKS) nepodporuje ani neposkytuje aktualizace zabezpečení pro Azure Linux 2.0. Bitová kopie uzlu Azure Linux 2.0 je zmrazená na vydání 202512.06.0. Od 31. října 2026 se image uzlů odeberou a nebudete moct škálovat fondy uzlů. Přejděte na podporovanou verzi Azure Linuxu aktualizací poolů uzlů na podporovanou verzi Kubernetes nebo migrací na osSku AzureLinux3. Další informace najdete v tématu Problém s vyřazením z GitHubu a oznámení o vyřazení aktualizací Azure. Pokud chcete mít přehled o oznámeních a aktualizacích, postupujte podle poznámek k verzi AKS.

Omezení

  • V poolech uzlů Azure Linux vyžadují služby IPv6 externalTrafficPolicy: Local.
  • Pro duální síťování se vyžaduje virtuální síť Azure a CIDR podsítě.
    • Jednorázová konfigurace pouze s IPv6 není podporována pro IP adresy uzlů nebo podů. Služby je možné zřídit v IPv4 nebo IPv6.
  • Azure CNI Overlay nepodporuje síťové zásady Azure ani Calico v dual-stack sítích. Pokud chcete používat zásady sítě, použijte Azure CNI Powered by Cilium.
  • Standard NAT Gateway podporuje jenom protokol IPv4. Pro odchozí provoz v režimu dual-stack použijte StandardV2 NAT Gateway. Odchozí typ managedNATGatewayV2, spravovaný AKS, je ve verzi Preview.
  • Doplněk virtuálních uzlů není podporován při použití sítě s duálním zásobníkem.

Požadavky

V tomto článku se používá Azure CNI Overlay. Můžete také nasadit cluster se dvěma zásobníky s Azure CNI powered by Cilium na clusterech s Linuxem, na kterých běží Kubernetes verze 1.29 nebo novější.

Přehled dual-stack sítí v Kubernetes

Kubernetes v1.23 přináší stabilní upstream podporu pro clustery s duálním IPv4/IPv6 zásobníkem, včetně sítí podů a služeb. Uzly a pody jsou vždy přiřazeny jak IPv4, tak IPv6 adresou, zatímco služby mohou být duální nebo jednoúčelové na obou typech adres.

AKS nastavuje požadované podpůrné služby pro duální zásobníkovou síť. Tato konfigurace zahrnuje:

  • Pokud používáte spravovanou virtuální síť, konfigurace virtuální sítě se dvěma zásobníky.
  • Adresy uzlů IPv4 a IPv6 a podů
  • Odchozí pravidla pro provoz IPv4 i IPv6
  • Nastavení nástroje pro vyrovnávání zatížení pro služby IPv4 a IPv6

Poznámka:

Pokud používáte dvouzásobníkové sítě s typem odchozí komunikace nastaveným na směrování definované uživatelem, můžete zvolit výchozí trasu pro IPv6 v závislosti na tom, zda potřebujete, aby váš provoz IPv6 měl přístup na internet. Pokud nemáte výchozí trasu pro protokol IPv6, zobrazí se při vytváření clusteru upozornění, ale nezabrání vytvoření clusteru.

Parametry clusteru s duálním stackem

Následující parametry podporují clustery se dvěma zásobníky:

Parameter Přípustné hodnoty Výchozí hodnota Omezení
--ip-families ipv4 nebo ipv4,ipv6 Neurčeno Zadejte čárkami oddělený seznam rodin IP adres, které se mají povolit v clusteru.
--pod-cidrs Rozsahy CIDR oddělené čárkami 10.244.0.0/16,fd12:3456:789a::/64 Počet a pořadí rozsahů se musí shodovat --ip-families.
--service-cidrs Rozsahy CIDR oddělené čárkami 10.0.0.0/16,fd12:3456:789a:1::/108 Počet a pořadí rozsahů se musí shodovat --ip-families. Podsíť IPv6 nesmí být větší než /108.

Nasazení duálního stackového clusteru AKS

  1. Pomocí příkazu vytvořte skupinu prostředků Azure pro cluster az group create .

    az group create --location <region> --name <resourceGroupName>
    
  2. Vytvořte cluster AKS s podporou dvou protokolů pomocí příkazu az aks create s parametrem --ip-families nastaveným 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 vytvoření clusteru pomocí příkazu získejte přihlašovací údaje clusteru az aks get-credentials .

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

Kontrola uzlů a zobrazení obou rodin IP adres

Po zřízení clusteru pomocí příkazu ověřte, že uzly jsou zřízené pomocí sítě kubectl get nodes se dvěma zásobníky.

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

Výstup z kubectl get nodes příkazu ukazuje, že uzly mají adresy a prostor pro přiřazení IP adres podů z IPv4 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

Vytvoření ukázkové úlohy

Nasaďte webový server NGINX se třemi replikami, abyste ověřili přiřazení IP adres podů v režimu duálního zásobníku.

Nasazení webového serveru NGINX

  1. Spuštěním kubectl create deployment nginx příkazu vytvořte webový server NGINX.

    kubectl create deployment nginx --image=nginx:latest --replicas=3
    
  2. Spuštěním příkazu zobrazte prostředky podu 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"
    

    Výstup ukazuje, že pody mají adresy IPv4 i IPv6. Pody nezobrazují IP adresy, dokud nebudou připravené.

    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
    

Zveřejněte pracovní zátěž pomocí služby typu LoadBalancer.

Důležité

Azure Load Balancer odesílá sondy stavu na IPv6 adresy z link-local adresy. Na fondech uzlů Azure Linux selhává provoz směrovaný na služby IPv6, které používají externalTrafficPolicy: Cluster. Následující příklady nastavují externalTrafficPolicy: Local u služby IPv6 tak, aby kube-proxy reagovalo na testovací požadavek na uzlu.

  1. Pomocí příkazu zpřístupníte nasazení NGINX s samostatnými službami kubectl expose deployment nginx IPv4 a IPv6LoadBalancer.

    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"]}}'
    

    Zobrazí se výstup, který ukazuje, že jsou služby vystavené.

    service/nginx-ipv4 exposed
    service/nginx-ipv6 exposed
    
  2. Jakmile zpřístupníte nasazení a plně zprovozníte služby LoadBalancer, získejte IP adresy služeb pomocí příkazu 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. Ověřte funkčnost z virtuálního počítače s Linuxem nebo místním počítačem s nakonfigurovanou adresou IPv6 a nakonfigurovaným směrováním IPv6. Azure Cloud Shell nepodporuje protokol 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>