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 worden serviceobjecten alleen ondersteund met externalTrafficPolicy: 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 is vereist

Vereiste voorwaarden

  • Voor AKS-clusters met dubbele stack is Kubernetes versie v1.21.2 of hoger vereist. v1.22.2 of hoger wordt aanbevolen.
  • Als u Azure Resource Manager-sjablonen gebruikt, is schemaversie 2021-10-01 vereist.

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, wordt een dubbele stackconfiguratie gebruikt.
  • 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 Dualstack 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 of niet. Als u geen standaardroute voor IPv6 hebt, wordt er een waarschuwing weergegeven bij het maken van een cluster, maar wordt het maken van een cluster niet voorkomen.

Een cluster met dubbele stack implementeren

De volgende kenmerken zijn beschikbaar ter ondersteuning van clusters met dubbele stack:

  • --ip-families: maakt gebruik van een door komma's gescheiden lijst met IP-families om het cluster in te schakelen.
    • Alleen ipv4 of ipv4,ipv6 worden ondersteund.
  • --pod-cidrs: Maakt gebruik van een door komma's gescheiden lijst met IP-adresbereiken voor CIDR-notatie om POD-IP-adressen toe te wijzen.
    • Het aantal en de volgorde van reeksen in deze lijst moeten overeenkomen met de waarde die aan --ip-families is opgegeven.
    • Als er geen waarden worden opgegeven, wordt de standaardwaarde 10.244.0.0/16,fd12:3456:789a::/64 gebruikt.
  • --service-cidrs: Maakt gebruik van een door komma's gescheiden lijst met IP-adresbereiken voor CIDR-notatie om service-IP-adressen toe te wijzen.
    • Het aantal en de volgorde van reeksen in deze lijst moeten overeenkomen met de waarde die aan --ip-families is opgegeven.
    • Als er geen waarden worden opgegeven, wordt de standaardwaarde 10.0.0.0/16,fd12:3456:789a:1::/108 gebruikt.
    • Het toegewezen IPv6-subnet --service-cidrs mag niet groter zijn dan een /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> \
        --ip-families ipv4,ipv6 \
        --generate-ssh-keys
    
  3. Zodra het cluster is gemaakt, haalt u de referenties van de clusterbeheerder 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

  • Zodra het cluster is ingericht, controleert u of de knooppunten zijn ingericht met dubbele 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

Zodra het cluster is gemaakt, kunt u uw workloads implementeren. In dit artikel wordt een voorbeeld van een workloadimplementatie van een NGINX-webserver beschreven.

Een NGINX-webserver implementeren

  1. Maak een NGINX-webserver met behulp van de kubectl create deployment nginx opdracht.

    kubectl create deployment nginx --image=nginx:latest --replicas=3
    
  2. Bekijk de pod-resources met behulp van de kubectl get pods opdracht.

    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

Vanaf AKS v1.27 kunt u een dual-stack LoadBalancer-service maken die wordt ingericht met 1 openbaar IPv4-IP-adres en 1 IPv6 openbaar IP-adres. In oudere versies wordt echter alleen het eerste IP-adres voor een service ingericht voor de load balancer, dus een service met dubbele stack ontvangt alleen een openbaar IP-adres voor de eerst vermelde IP-familie. Als u een service met twee stacks voor één implementatie wilt bieden, maakt u twee services die gericht zijn op dezelfde selector, één voor IPv4 en één voor IPv6.

AKS vanaf v1.27

  1. Stel de NGINX-implementatie beschikbaar met behulp van de kubectl expose deployment nginx opdracht.

    kubectl expose deployment nginx --name=nginx --port=80 --type=LoadBalancer --overrides='{"spec":{"ipFamilyPolicy": "PreferDualStack", "ipFamilies": ["IPv4", "IPv6"]}}'
    

    U ontvangt een uitvoer waaruit blijkt dat de services zijn blootgesteld.

    service/nginx exposed
    
  2. Zodra de implementatie beschikbaar is en de LoadBalancer services volledig zijn 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        LoadBalancer   10.0.223.73   2603:1030:20c:9::22d,4.156.88.133   80:30664/TCP   2m11s
    
    kubectl get services nginx -ojsonpath='{.spec.clusterIPs}'
    
    ["10.0.223.73","fd17:d93e:db1f:f771::54e"]
    
  3. Controleer de functionaliteit via een opdrachtregelwebaanvraag van een host die geschikt is voor IPv6. Azure Cloud Shell is niet geschikt voor IPv6.

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

AKS ouder dan v1.27

  1. Stel de NGINX-implementatie beschikbaar 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":{"ipFamilies": ["IPv6"]}}'
    

    U ontvangt een uitvoer waaruit blijkt dat de services zijn blootgesteld.

    service/nginx-ipv4 exposed
    service/nginx-ipv6 exposed
    
  2. Zodra de implementatie beschikbaar is en de LoadBalancer services volledig zijn 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 via een opdrachtregelwebaanvraag van een host die geschikt is voor IPv6. Azure Cloud Shell is niet geschikt 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>