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-Knotenimage ist eingefroren bei der Version 202512.06.0. Ab dem 31. März 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 den Azure Linux-Knotenpools werden Dienstobjekte nur mit externalTrafficPolicy: Local unterstützt.
  • 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-Überlagerung ist erforderlich

Voraussetzungen

  • AKS Dual-Stack-Cluster erfordern Kubernetes Version v1.21.2 oder höher. v1.22.2 oder höher wird empfohlen.
  • Wenn Sie Azure Resource Manager-Vorlagen verwenden, ist die Schemaversion 2021-10-01 erforderlich.

Ü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, ist eine Dual-Stack-Virtualnetzwerk-Konfiguration erforderlich.
  • 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 Dualstack mit einem ausgehenden Routingtyp verwenden, können Sie eine Standardroute für IPv6 verwenden, je nachdem, ob Sie Ihren IPv6-Datenverkehr benötigen, um das Internet zu erreichen oder nicht. Wenn Sie keine Standardroute für IPv6 haben, wird beim Erstellen eines Clusters eine Warnung angezeigt, aber die Clustererstellung wird nicht verhindert.

Bereitstellen eines Dual-Stack-Clusters

Zur Unterstützung von Clustern mit dualem Stapel werden die folgenden Attribute bereitgestellt:

  • --ip-families: Akzeptiert eine durch Kommas getrennte Liste mit IP-Adressfamilien, die im Cluster aktiviert werden sollen.
    • Nur ipv4 oder ipv4,ipv6 werden unterstützt.
  • --pod-cidrs: Akzeptiert eine durch Kommas getrennte Liste mit IP-Bereichen (in CIDR-Notation), aus denen Pod-IP-Adressen zugewiesen werden sollen.
    • Anzahl und Reihenfolge der Bereiche in dieser Liste müssen dem für --ip-families angegebenen Wert entsprechen.
    • Wenn keine Werte angegeben sind, wird der Standardwert „10.244.0.0/16,fd12:3456:789a::/64“ verwendet.
  • --service-cidrs: Akzeptiert eine durch Kommas getrennte Liste mit IP-Bereichen (in CIDR-Notation), aus denen Dienst-IP-Adressen zugewiesen werden sollen.
    • Anzahl und Reihenfolge der Bereiche in dieser Liste müssen dem für --ip-families angegebenen Wert entsprechen.
    • Wenn keine Werte angegeben sind, wird der Standardwert „10.0.0.0/16,fd12:3456:789a:1::/108“ verwendet.
    • Das IPv6-Subnetz, das --service-cidrs zugewiesen ist, darf nicht größer als /108 sein.

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> \
        --ip-families ipv4,ipv6 \
        --generate-ssh-keys
    
  3. Nachdem der Cluster erstellt wurde, rufen Sie die Anmeldeinformationen des Clusteradministrators 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.

  • Nachdem der Cluster bereitgestellt wurde, stellen Sie mithilfe des kubectl get nodes Befehls sicher, dass die Knoten mit Dual-Stack-Netzwerken bereitgestellt werden.

    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

Nachdem der Cluster erstellt wurde, können Sie Ihre Workloads bereitstellen. Dieser Artikel führt Sie durch eine beispielhafte Workloadbereitstellung eines NGINX-Webservers.

Installieren eines NGINX-Webservers

  1. Erstellen Sie einen NGINX-Webserver mit dem kubectl create deployment nginx Befehl.

    kubectl create deployment nginx --image=nginx:latest --replicas=3
    
  2. Zeigen Sie die Pod-Ressourcen mithilfe des kubectl get pods Befehls an.

    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

Ab AKS v1.27 können Sie einen Dual-Stack LoadBalancer-Dienst erstellen, der mit einer öffentlichen IPv4-IP und einer öffentlichen IPv6-IP bereitgestellt wird. In älteren Versionen wird jedoch nur die erste IP-Adresse für einen Dienst für den Lastenausgleich bereitgestellt, sodass ein Dual-Stack-Dienst nur eine öffentliche IP für die erste aufgeführte IP-Familie empfängt. Wenn Sie für eine einzelne Bereitstellung einen Dienst mit dualem Stapel bereitstellen möchten, müssen zwei auf den gleichen Selektor ausgerichtete Dienste erstellt werden: einer für IPv4 und einer für IPv6.

AKS ab v1.27

  1. Machen Sie die NGINX-Bereitstellung mit dem Befehl „kubectl expose deployment nginx“ verfügbar.

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

    Ihnen wir eine Ausgabe angezeigt, die besagt, dass die Dienste verfügbar gemacht wurden.

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

    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. Überprüfen Sie die Funktionalität über eine Befehlszeilenwebanforderung von einem IPv6-fähigen Host. Azure Cloud Shell ist nicht IPv6-fähig.

    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 älter als v1.27

  1. Machen Sie die NGINX-Bereitstellung mit dem Befehl „kubectl expose deployment nginx“ 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":{"ipFamilies": ["IPv6"]}}'
    

    Ihnen wir eine Ausgabe angezeigt, die besagt, dass die Dienste verfügbar gemacht wurden.

    service/nginx-ipv4 exposed
    service/nginx-ipv6 exposed
    
  2. Nachdem die Bereitstellung verfügbar gemacht wurde und die LoadBalancer-Dienste vollständig bereitgestellt wurden, rufen Sie die IP-Adressen der Dienste mithilfe des Befehls „kubectl get services“ 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 über eine Befehlszeilenwebanforderung von einem IPv6-fähigen Host. Azure Cloud Shell ist nicht IPv6-fähig.

    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>