Använda nätverk med dubbla staplar i Azure Kubernetes Service (AKS)

Du kan distribuera dina AKS-kluster i ett läge med dubbla staplar när du använder ett virtuellt Azure-nätverk med dubbla staplar. I den här konfigurationen får noderna både en IPv4- och IPv6-adress från det virtuella Azure-nätverkets undernät. Poddar får både en IPv4- och IPv6-adress från ett logiskt annat adressutrymme än det virtuella Azure-nätverksundernätet för noderna. NAT (Network Address Translation) konfigureras sedan så att poddarna kan komma åt resurser i Azure Virtual Network. Källa IP-adressen för trafiken översätts med NAT till nodens primära IP-adress inom samma IP-familj (IPv4 till IPv4 och IPv6 till IPv6).

Den här artikeln visar hur du använder nätverk med dubbla staplar med ett AKS-kluster. Mer information om nätverksalternativ och överväganden finns i Nätverksbegrepp för Kubernetes och AKS.

Viktigt!

Från och med den 30 november 2025 har Azure Kubernetes Service (AKS) inte längre stöd för eller tillhandahåller säkerhetsuppdateringar för Azure Linux 2.0. Azure Linux 2.0-nodbilden är låst i 202512.06.0-versionen. Från och med den 31 mars 2026 tas nodbilder bort och du kan inte skala dina nodpooler. Migrera till en Azure Linux-version som stöds genom att uppgradera dina nodpooler till en Kubernetes-version som stöds eller migrera till osSku AzureLinux3. Mer information finns i GitHub-ärende om avveckling och Azure Updates avvecklingsmeddelande. För att hålla dig informerad om meddelanden och uppdateringar, följ AKS versionsinformation.

Begränsningar

  • I Azure Linux-nodpooler stöds endast tjänstobjekt med externalTrafficPolicy: Local.
  • Nätverk med dubbla staplar krävs för det virtuella Azure-nätverket och podd-CIDR.
    • IPv6 i endast enstaka stack stöds inte för nod- eller podd-IP-adresser. Tjänster kan etableras på IPv4 eller IPv6.
  • Azure CNI-överlägg krävs

Förutsättningar

  • AKS-kluster med dubbla staplar kräver Kubernetes version v1.21.2 eller senare. v1.22.2 eller senare rekommenderas.
  • Om du använder Azure Resource Manager-mallar krävs schemaversion 2021-10-01.

Översikt över nätverk med dubbla staplar i Kubernetes

Kubernetes v1.23 ger stabilt överordnat stöd för IPv4/IPv6-kluster med dubbla staplar , inklusive podd- och tjänstnätverk. Noder och poddar tilldelas alltid både en IPv4- och en IPv6-adress, medan tjänster kan vara antingen dual-stack eller single-stack beroende på adressfamilj.

AKS konfigurerar nödvändiga stödtjänster för nätverk med dubbla staplar. Den här konfigurationen omfattar:

  • Om du använder ett hanterat virtuellt nätverk, en dubbelstack-konfiguration för virtuella nätverk.
  • IPv4- och IPv6-nod- och poddadresser.
  • Regler för utgående trafik för både IPv4- och IPv6-trafik.
  • Konfiguration av lastbalanserare för IPv4- och IPv6-tjänster.

Anmärkning

När du använder Dualstack med en utgående typ av användardefinierad routning kan du välja att ha en standardväg för IPv6 beroende på om du behöver din IPv6-trafik för att nå Internet eller inte. Om du inte har någon standardväg för IPv6 visas en varning när du skapar ett kluster, men förhindrar inte att klustret skapas.

Distribuera ett kluster med dubbla staplar

Följande attribut tillhandahålls för att stödja kluster med dubbla staplar:

  • --ip-families: Tar en kommaavgränsad lista över IP-familjer som ska aktiveras i klustret.
    • Endast ipv4 eller ipv4,ipv6 stöds.
  • --pod-cidrs: Tar en kommaavgränsad lista över IP-intervall i CIDR-notation att tilldela pod-IP-adresser från.
    • Antalet och ordningen på intervallen i den här listan måste matcha värdet som anges till --ip-families.
    • Om inga värden anges används standardvärdet 10.244.0.0/16,fd12:3456:789a::/64 .
  • --service-cidrs: Tar en kommaavgränsad lista över IP-intervall i CIDR-notation från vilken tjänst-IP-adresser tilldelas.
    • Antalet och ordningen på intervallen i den här listan måste matcha värdet som anges till --ip-families.
    • Om inga värden anges används standardvärdet 10.0.0.0/16,fd12:3456:789a:1::/108 .
    • Det IPv6-undernät som tilldelats får --service-cidrs inte vara större än /108.

Distribuera ett AKS-kluster med dubbla staplar

  1. Skapa en Azure-resursgrupp för klustret med hjälp av az group create kommandot .

    az group create --location <region> --name <resourceGroupName>
    
  2. Skapa ett AKS-kluster med dubbla staplar med az aks create kommandot med parametern inställd på --ip-familiesipv4,ipv6.

    az aks create \
        --location <region> \
        --resource-group <resourceGroupName> \
        --name <clusterName> \
        --ip-families ipv4,ipv6 \
        --generate-ssh-keys
    
  3. När klustret har skapats hämtar du autentiseringsuppgifterna för klusteradministratören az aks get-credentials med kommandot .

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

Granska noderna för att se båda IP-familjerna

  • När klustret har etablerats bekräftar du att noderna har etablerats med nätverk med dubbla staplar med hjälp av kubectl get nodes kommandot .

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

    Utdata från kubectl get nodes kommandot visar att noderna har adresser och podd-IP-tilldelningsutrymme från både IPv4 och 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
    

Skapa en exempelarbetsbelastning

När klustret har skapats kan du distribuera dina arbetsbelastningar. Den här artikeln beskriver ett exempel på en arbetsbelastningsdistribution av en NGINX-webbserver.

Distribuera en NGINX-webbserver

  1. Skapa en NGINX-webbserver med kommandot kubectl create deployment nginx .

    kubectl create deployment nginx --image=nginx:latest --replicas=3
    
  2. Visa pod-resurserna med kommandot 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"
    

    Utdata visar att poddarna har både IPv4- och IPv6-adresser. Poddarna visar inte IP-adresser förrän de är klara.

    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
    

Exponera belastningen via en LoadBalancer-tjänst

Viktigt!

Från och med AKS v1.27 kan du skapa en dubbelstack LoadBalancer-tjänst som tillhandahålls med en offentlig IPv4-adress och en offentlig IPv6-adress. I äldre versioner etableras dock endast den första IP-adressen för en tjänst av lastbalanseraren, så en tjänst med dubbelstack får bara en offentlig IP-adress för sin första IP-familj. Om du vill tillhandahålla en tjänst med dubbla staplar för en enda distribution skapar du två tjänster som riktar sig till samma väljare, en för IPv4 och en för IPv6.

AKS från v1.27

  1. Exponera NGINX-distributionen med kommandot kubectl expose deployment nginx .

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

    Du får utdata som visar att tjänsterna har exponerats.

    service/nginx exposed
    
  2. När distribueringen är exponerad och LoadBalancer tjänsterna har etablerats fullständigt, hämta IP-adresserna för tjänsterna med kommandot kubectl get services.

    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. Verifiera funktioner via en kommandoradswebbbegäran från en IPv6-kompatibel värd. Azure Cloud Shell är inte IPv6-kompatibelt.

    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 äldre än v1.27

  1. Exponera NGINX-distributionen med kommandot kubectl expose deployment nginx .

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

    Du får utdata som visar att tjänsterna har exponerats.

    service/nginx-ipv4 exposed
    service/nginx-ipv6 exposed
    
  2. När distribueringen är exponerad och LoadBalancer tjänsterna har etablerats fullständigt, hämta IP-adresserna för tjänsterna med kommandot 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. Verifiera funktioner via en kommandoradswebbbegäran från en IPv6-kompatibel värd. Azure Cloud Shell är inte IPv6-kompatibelt.

    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>