Verwenden von Dual-Stack-Netzwerken in Azure Kubernetes Service (AKS)

Sie können Ihre AKS-Cluster in einem Dual-Stack-Modus bereitstellen, wenn Sie ein virtuelles Azure-Netzwerk mit dualem Stapel verwenden. In dieser Konfiguration erhalten Knoten sowohl eine IPv4- als auch eine IPv6-Adresse aus dem Subnetz des virtuellen Azure-Netzwerks. Pods erhalten sowohl eine IPv4- als auch eine IPv6-Adresse aus einem logisch unterschiedlichen Adressraum für das Subnetz des virtuellen Azure-Netzwerks der Knoten. Die Netzwerkadressübersetzung (NAT, Network Address Translation) wird dann so konfiguriert, dass die Pods Ressourcen im virtuellen Azure-Netzwerk erreichen können. Die Quell-IP-Adresse des Datenverkehrs wird mittels NAT in die primäre IP-Adresse des Knotens innerhalb der gleichen IP-Adressfamilie übersetzt (also IPv4 in IPv4 und IPv6 in IPv6).

In diesem Artikel erfahren Sie, wie Sie duale Stapelnetzwerke mit einem AKS-Cluster verwenden. Weitere Informationen zu Netzwerkoptionen und Überlegungen finden Sie unter Netzwerkkonzepte für Kubernetes und AKS.

Von Bedeutung

Ab dem 30. November 2025 unterstützt Azure Kubernetes Service (AKS) keine Sicherheitsupdates für Azure Linux 2.0 mehr oder stellt diese bereit. Das Azure Linux 2.0-Knoten-Image wurde mit der 202512.06.0-Veröffentlichung eingefroren. Ab dem 31. Oktober 2026 werden Knotenimages entfernt, und Sie können Ihre Knotenpools nicht skalieren. Migrieren Sie zu einer unterstützten Azure Linux-Version, indem Sie Ihre Knotenpools auf eine unterstützte Kubernetes-Version aktualisieren oder zu osSku AzureLinux3 migrieren. Weitere Informationen finden Sie im GitHub-Issue "Retirement" und in der Azure Updates Ankündigung der Einstellung. Um über Ankündigungen und Updates auf dem Laufenden zu bleiben, folgen Sie den AKS-Versionshinweisen.

Einschränkungen

  • In Azure Linux-Knotenpools erfordern IPv6-Dienste externalTrafficPolicy: Local.
  • Dual-Stack-Netzwerke sind für das virtuelle Azure-Netzwerk und den Pod CIDR erforderlich.
    • IPv6-Only-Single-Stack wird nicht für Knoten- oder Pod-IP-Adressen unterstützt. Dienste können auf IPv4 oder IPv6 bereitgestellt werden.
  • Azure CNI Overlay unterstützt keine Azure- oder Calico-Netzwerkrichtlinien mit dualen Stapelnetzwerken. Um Netzwerkrichtlinien zu verwenden, verwenden Sie Azure CNI Powered by Cilium.
  • Standardmäßiges NAT-Gateway unterstützt nur IPv4. Verwenden Sie für Dual-Stack-Egress das StandardV2 NAT-Gateway. Der von AKS verwaltete Typ für ausgehenden Datenverkehr managedNATGatewayV2 ist als Vorschau verfügbar.
  • Das Add-On für virtuelle Knoten wird mit dualen Stapelnetzwerken nicht unterstützt.

Voraussetzungen

In diesem Artikel wird Azure CNI Overlay verwendet. Sie können auch einen Dual-Stack-Cluster mit Azure CNI Powered by Cilium auf Linux-Clustern bereitstellen, auf denen Kubernetes Version 1.29 oder höher ausgeführt wird.

Übersicht über duale Stapelnetzwerke in Kubernetes

Kubernetes v1.23 bietet stabile Upstreamunterstützung für IPv4/IPv6 Dual-Stack-Cluster , einschließlich Pod- und Dienstnetzwerke. Knoten und Pods wird immer sowohl eine IPv4- als auch eine IPv6-Adresse zugewiesen. Dienste können dagegen entweder mit einem dualen oder einem einzelnen Stapel in einer der IP-Adressfamilien verwendet werden.

AKS konfiguriert die erforderlichen Unterstützenden Dienste für Dual-Stack-Netzwerke. Diese Konfiguration umfasst:

  • Wenn Sie ein verwaltetes virtuelles Netzwerk verwenden: eine Dual-Stack-Konfiguration für das virtuelle Netzwerk.
  • IPv4- und IPv6-Knoten- und Podadressen.
  • Ausgehende Regeln für IPv4- und IPv6-Datenverkehr.
  • Einrichtung des Lastverteilers für IPv4- und IPv6-Dienste.

Hinweis

Wenn Sie Dual-Stack-Netzwerke mit einem ausgehenden Typ von benutzerdefiniertem Routing verwenden, können Sie eine Standardroute für IPv6 verwenden, je nachdem, ob Sie Ihren IPv6-Datenverkehr benötigen, um das Internet zu erreichen. Wenn Sie keine Standardroute für IPv6 haben, wird beim Erstellen eines Clusters eine Warnung angezeigt, aber die Clustererstellung wird nicht verhindert.

Parameter für Dual-Stack-Cluster

Die folgenden Parameter unterstützen Dual-Stack-Cluster:

Parameter Zulässige Werte Standardwert Einschränkungen
--ip-families ipv4 oder ipv4,ipv6 Nicht angegeben Stellen Sie eine durch Trennzeichen getrennte Liste von IP-Familien bereit, die im Cluster aktiviert werden sollen.
--pod-cidrs Durch Trennzeichen getrennte CIDR-Bereiche 10.244.0.0/16,fd12:3456:789a::/64 Die Anzahl und Reihenfolge der Bereiche müssen mit --ip-families übereinstimmen.
--service-cidrs Durch Trennzeichen getrennte CIDR-Bereiche 10.0.0.0/16,fd12:3456:789a:1::/108 Die Anzahl und Reihenfolge der Bereiche müssen mit --ip-families übereinstimmen. Das IPv6-Subnetz darf nicht größer sein als /108.

Bereitstellen eines AKS-Clusters mit dualem Stapel

  1. Erstellen Sie mithilfe des az group create Befehls eine Azure-Ressourcengruppe für den Cluster.

    az group create --location <region> --name <resourceGroupName>
    
  2. Erstellen Sie einen AKS-Cluster mit dualem Stapel mit dem Befehl „az aks create“, wobei der --ip-families-Parameter auf „ipv4,ipv6“ festgelegt sein sollte.

    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. Nachdem Sie den Cluster erstellt haben, rufen Sie die Clusteranmeldeinformationen mithilfe des az aks get-credentials Befehls ab.

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

Überprüfen Sie die Knoten, um beide IP-Familien anzusehen.

Vergewissern Sie sich nach der Bereitstellung des Clusters mit dem Befehl kubectl get nodes, dass die Knoten mit einer Dual-Stack-Netzwerkkonfiguration bereitgestellt wurden.

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

Die Ausgabe aus dem kubectl get nodes Befehl zeigt, dass die Knoten Adressen und pod-IP-Zuordnungsraum sowohl von IPv4 als auch von IPv6 aufweisen.

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

Erstellen einer Beispielworkload

Stellen Sie einen NGINX-Webserver mit drei Replikaten bereit, um die Dual-Stack-IP-Zuweisung für Pods zu überprüfen.

Installieren eines NGINX-Webservers

  1. Erstellen Sie einen NGINX-Webserver, indem Sie den kubectl create deployment nginx Befehl ausführen.

    kubectl create deployment nginx --image=nginx:latest --replicas=3
    
  2. Zeigen Sie die Podressourcen an, indem Sie den kubectl get pods Befehl ausführen.

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

    Die Ausgabe zeigt, dass die Pods sowohl IPv4- als auch IPv6-Adressen enthalten. Die Pods zeigen IP-Adressen erst an, wenn sie bereit sind.

    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
    

Verfügbarmachen der Workload über einen Dienst vom Typ „LoadBalancer“

Von Bedeutung

Von Azure Load Balancer werden über eine verbindungslokale Adresse Integritätstests an IPv6-Ziele gesendet. In Azure Linux-Knotenpools schlägt der Datenverkehr zu IPv6-Diensten, die externalTrafficPolicy: Cluster verwenden, fehl. Die folgenden Beispiele setzen externalTrafficPolicy: Local für den IPv6-Dienst, sodass kube-proxy auf die Sonde am Knoten antwortet.

  1. Machen Sie die NGINX-Bereitstellung mit separaten IPv4- und IPv6-Diensten LoadBalancer mithilfe des kubectl expose deployment nginx Befehls verfügbar.

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

    Sie erhalten eine Ausgabe, die anzeigt, dass die Dienste verfügbar gemacht werden.

    service/nginx-ipv4 exposed
    service/nginx-ipv6 exposed
    
  2. Nachdem Sie die Bereitstellung verfügbar gemacht und die LoadBalancer Dienste vollständig bereitgestellt haben, rufen Sie die IP-Adressen der Dienste mithilfe des kubectl get services Befehls ab.

    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. Überprüfen Sie die Funktionalität von einem virtuellen Linux-Computer oder einem lokalen Computer mit einer konfigurierten IPv6-Adresse und konfiguriertem IPv6-Routing. Azure Cloud Shell unterstützt IPv6 nicht.

    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>