Dual-stack-netwerken gebruiken in Azure Kubernetes Service (AKS)

U kunt uw AKS-clusters implementeren in een dual-stackmodus wanneer u een virtueel Azure-netwerk met twee stacks gebruikt. In deze configuratie ontvangen knooppunten zowel een IPv4- als IPv6-adres van het subnet van het virtuele Azure-netwerk. Pods ontvangen zowel een IPv4- als IPv6-adres van een logisch andere adresruimte naar het subnet van het virtuele Azure-netwerk van de knooppunten. Nat (Network Address Translation) wordt vervolgens geconfigureerd, zodat de pods resources in het virtuele Azure-netwerk kunnen bereiken. Het bron-IP-adres van het verkeer wordt genat naar het primaire IP-adres van het knooppunt uit dezelfde IP-familie (IPv4 naar IPv4 en IPv6 naar IPv6).

In dit artikel leest u hoe u dual-stack-netwerken gebruikt met een AKS-cluster. Zie Netwerkconcepten voor Kubernetes en AKS voor meer informatie over netwerkopties en overwegingen.

Belangrijk

Vanaf 30 november 2025 ondersteunt Azure Kubernetes Service (AKS) geen beveiligingsupdates meer voor Azure Linux 2.0. De installatiekopieën van het Azure Linux 2.0-knooppunt zijn bevroren bij de release 202512.06.0. Vanaf 31 maart 2026 worden knooppuntafbeeldingen verwijderd en kunt u uw knooppoolen niet schalen. Migreer naar een ondersteunde Versie van Azure Linux door uw knooppuntgroepen te upgraden naar een ondersteunde Kubernetes-versie of door te migreren naar osSku AzureLinux3. Zie het Probleem met buitengebruikstelling van GitHub en de aankondiging van de buitengebruikstelling van Azure Updates voor meer informatie. Als u op de hoogte wilt blijven van aankondigingen en updates, volg de AKS-release-opmerkingen.

Beperkingen

  • In Azure Linux-knooppuntgroepen zijn IPv6-services vereistexternalTrafficPolicy: Local.
  • Dual-stack-netwerken zijn vereist voor het virtuele Azure-netwerk en de POD CIDR.
    • IPv6-only met een enkele stack wordt niet ondersteund voor IP-adressen van knooppunten of pods. Services kunnen worden aangeboden op IPv4 of IPv6.
  • Azure CNI-overlay biedt geen ondersteuning voor Azure- of Calico-netwerkbeleid met dubbele stack-netwerken. Als u netwerkbeleid wilt gebruiken, gebruikt u Azure CNI Powered by Cilium.
  • Standard NAT Gateway ondersteunt alleen IPv4. Gebruik de StandardV2 NAT-gateway voor dual-stack-uitgaand verkeer. Het door AKS beheerde uitgaande type managedNATGatewayV2 is beschikbaar als preview.
  • De invoegtoepassing voor virtuele knooppunten wordt niet ondersteund met dual-stack-netwerken.

Vereiste voorwaarden

In dit artikel wordt Azure CNI-overlay gebruikt. U kunt ook een cluster met twee stacks implementeren met Azure CNI Powered by Cilium op Linux-clusters met Kubernetes versie 1.29 of hoger.

Overzicht van dual-stack-netwerken in Kubernetes

Kubernetes v1.23 biedt stabiele upstream-ondersteuning voor IPv4-/IPv6-clusters met dubbele stack , waaronder pod- en servicenetwerken. Knooppunten en pods krijgen altijd zowel een IPv4- als een IPv6-adres toegewezen, terwijl services dual-stack of single-stack kunnen zijn op een van beide adresfamilies.

AKS configureert de vereiste ondersteunende services voor dual-stack-netwerken. Deze configuratie omvat:

  • Als u een beheerd virtueel netwerk gebruikt, is er een configuratie van een virtueel netwerk met dubbele stack.
  • IPv4- en IPv6-knooppunt- en podadressen.
  • Uitgaande regels voor zowel IPv4- als IPv6-verkeer.
  • Load balancer instellen voor IPv4- en IPv6-services.

Opmerking

Wanneer u dual-stack-netwerken gebruikt met een uitgaand type door de gebruiker gedefinieerde routering, kunt u ervoor kiezen om een standaardroute voor IPv6 te hebben, afhankelijk van of u uw IPv6-verkeer nodig hebt om internet te bereiken. Als u geen standaardroute voor IPv6 hebt, wordt er een waarschuwing weergegeven wanneer u een cluster maakt, maar het maken van clusters niet verhindert.

Parameters voor dual-stack-clusters

De volgende parameters ondersteunen clusters met twee stacks:

Parameter Geaccepteerde waarden Standaardwaarde Constraints
--ip-families ipv4 of ipv4,ipv6 Niet opgegeven Geef een door komma's gescheiden lijst met IP-families op om het cluster in te schakelen.
--pod-cidrs Door komma’s gescheiden CIDR-bereiken 10.244.0.0/16,fd12:3456:789a::/64 Het aantal intervallen en de volgorde ervan moeten overeenkomen met --ip-families.
--service-cidrs Door komma's gescheiden CIDR-bereiken 10.0.0.0/16,fd12:3456:789a:1::/108 Het aantal en de volgorde van intervallen moeten overeenkomen met --ip-families. Het IPv6-subnet mag niet groter zijn dan /108.

Een AKS-cluster met twee stacks implementeren

  1. Maak een Azure-resourcegroep voor het cluster met behulp van de az group create opdracht.

    az group create --location <region> --name <resourceGroupName>
    
  2. Maak een dual-stack AKS-cluster met de az aks create opdracht waarbij de --ip-families parameter is ingesteld op 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. Nadat u het cluster hebt gemaakt, haalt u de clusterreferenties op met behulp van de az aks get-credentials opdracht.

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

Controleer de knooppunten om beide IP-families te zien

Nadat het cluster is ingericht, controleert u of de knooppunten zijn ingericht met dual-stack-netwerken met behulp van de kubectl get nodes opdracht.

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

In de uitvoer van de kubectl get nodes opdracht ziet u dat de knooppunten adressen en ip-toewijzingsruimte voor pods hebben van zowel IPv4 als 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

Een voorbeeldworkload maken

Implementeer een NGINX-webserver met drie replica's om ip-toewijzing van pods met twee stacks te verifiëren.

Een NGINX-webserver implementeren

  1. Maak een NGINX-webserver door de opdracht uit te kubectl create deployment nginx voeren.

    kubectl create deployment nginx --image=nginx:latest --replicas=3
    
  2. Bekijk de pod-resources door de opdracht uit te kubectl get pods voeren.

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

    In de uitvoer ziet u dat de pods zowel IPv4- als IPv6-adressen hebben. De pods tonen geen IP-adressen totdat ze klaar zijn.

    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
    

Maak de workload beschikbaar via een LoadBalancer type-service.

Belangrijk

Azure Load Balancer verzendt statustests naar IPv6-bestemmingen vanaf een koppelingsadres. Op Azure Linux-knooppuntgroepen werkt verkeer naar IPv6-services die gebruikmaken van externalTrafficPolicy: Cluster niet. De volgende voorbeelden stellen externalTrafficPolicy: Local in op de IPv6-service, zodat kube-proxy reageert op de probe op het knooppunt.

  1. Stel de NGINX-implementatie beschikbaar met afzonderlijke IPv4- en IPv6-services LoadBalancer met behulp van de kubectl expose deployment nginx opdracht.

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

    U ontvangt uitvoer waarin wordt weergegeven dat de services beschikbaar zijn.

    service/nginx-ipv4 exposed
    service/nginx-ipv6 exposed
    
  2. Nadat u de implementatie beschikbaar hebt gemaakt en de LoadBalancer services volledig hebt ingericht, haalt u de IP-adressen van de services op met behulp van de kubectl get services opdracht.

    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. Controleer de functionaliteit van een Linux-VM of on-premises machine met een toegewezen IPv6-adres en IPv6-routering geconfigureerd. Azure Cloud Shell biedt geen ondersteuning voor 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>