Usar rede de pilha dupla no Serviço Kubernetes do Azure (AKS)

Você pode implantar seus clusters AKS em um modo de pilha dupla ao usar uma rede virtual do Azure de pilha dupla. Nessa configuração, os nós recebem um endereço IPv4 e IPv6 da sub-rede de rede virtual do Azure. Os pods recebem um endereço IPv4 e IPv6 de um espaço de endereços logicamente diferente do da sub-rede de rede virtual do Azure dos nós. A conversão de endereços de rede (NAT) é então configurada para que os pods possam alcançar recursos na rede virtual do Azure. O endereço IP de origem do tráfego é traduzido através de NAT para o endereço IP primário do nó da respetiva família (IPv4 para IPv4 e IPv6 para IPv6).

Este artigo mostra como usar a rede de pilha dupla com um cluster AKS. Para obter mais informações sobre opções de rede e considerações, consulte Conceitos de rede para Kubernetes e AKS.

Importante

A partir de 30 de novembro de 2025, o Azure Kubernetes Service (AKS) deixou de suportar nem fornecer atualizações de segurança para o Azure Linux 2.0. A imagem do nó Azure Linux 2.0 está congelada no 202512.06.0 lançamento. A partir de 31 de outubro de 2026, as imagens dos nós serão removidas e não poderá escalar os seus pools de nós. Migre para uma versão Azure Linux suportada atualizando os seus pools de nós para uma versão Kubernetes suportada ou migrando para o osSku AzureLinux3. Para mais informações, consulte a edição do Retirement GitHub e o anúncio de reforma do Azure Updates. Para se manter informado sobre anúncios e atualizações, siga as notas de lançamento do AKS.

Limitações

  • Em pools de nós Azure Linux, os serviços IPv6 requerem externalTrafficPolicy: Local.
  • A rede de dual-stack é necessária para a rede virtual do Azure e o pod CIDR.
    • Somente IPv6 de pilha única não é suportado para endereços IP de nó ou pod. Os serviços podem ser provisionados em IPv4 ou IPv6.
  • O Azure CNI Overlay não suporta políticas de rede Azure ou Calico com rede dual-stack. Para usar políticas de rede, utilize o Azure CNI Powered by Cilium.
  • O NAT Gateway Standard suporta apenas IPv4. Para saída dual-stack, use o StandardV2 NAT Gateway. O tipo de saída gerido pelo AKS managedNATGatewayV2 está em pré-visualização.
  • O add-on de nós virtuais não é suportado com rede dual-stack.

Pré-requisitos

Este artigo utiliza o Azure CNI Overlay. Também pode implementar um cluster dual-stack com Azure CNI Powered by Cilium em clusters Linux com o Kubernetes na versão 1.29 ou posterior.

Visão geral da rede de pilha dupla no Kubernetes

O Kubernetes v1.23 traz suporte upstream estável para clusters de pilha dupla IPv4/IPv6, incluindo pod e rede de serviços. Os nós e pods recebem sempre um endereço IPv4 e um endereço IPv6, enquanto os serviços podem ser de pilha dupla ou de pilha única em qualquer família de endereços.

O AKS configura os serviços de suporte necessários para redes de pilha dupla. Esta configuração inclui:

  • Se utilizar uma rede virtual gerida, uma configuração de pilha dupla da rede virtual.
  • Endereços de IPv4 e IPv6 de nós e pods.
  • Regras de saída para tráfego IPv4 e IPv6.
  • Configuração do balanceador de carga para serviços IPv4 e IPv6.

Observação

Quando usa rede dual-stack com um tipo de roteamento de saída definido pelo utilizador, pode optar por ter uma rota padrão para IPv6 dependendo se precisa ou não do seu tráfego IPv6 para chegar à internet. Se não tiver uma rota padrão para IPv6, aparece um aviso quando cria um cluster, mas não impede a criação do cluster.

Parâmetros do cluster de pilha dupla

Os seguintes parâmetros suportam clusters de pilha dupla:

Parâmetro Valores aceites Valor predefinido Restrições
--ip-families ipv4 ou ipv4,ipv6 Não especificado Forneça uma lista separada por vírgulas de famílias IP para ativar no cluster.
--pod-cidrs Intervalos CIDR separados por vírgulas 10.244.0.0/16,fd12:3456:789a::/64 O número e a ordem dos intervalos devem corresponder a --ip-families.
--service-cidrs Intervalos CIDR separados por vírgulas 10.0.0.0/16,fd12:3456:789a:1::/108 O número e a ordem dos intervalos devem corresponder a --ip-families. A sub-rede IPv6 não pode ser maior do que /108.

Implantar um cluster AKS de pilha dupla

  1. Crie um grupo de recursos do Azure para o cluster usando o az group create comando.

    az group create --location <region> --name <resourceGroupName>
    
  2. Crie um cluster AKS de pilha dupla, usando o comando az aks create com o parâmetro --ip-families definido como 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. Depois de criares o cluster, obtém as credenciais do cluster usando o az aks get-credentials comando.

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

Inspecione os nós para ver ambas as famílias de IP

Depois de o cluster ser provisionado, confirme que os nós estão provisionados com rede dual-stack usando o kubectl get nodes comando.

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

A saída do comando kubectl get nodes mostra que os nós têm endereços e espaço de atribuição de IP para pods, tanto para IPv4 quanto para 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

Criar um exemplo de carga de trabalho

Implemente um servidor web NGINX com três réplicas para verificar a atribuição de endereços IP de pods em pilha dupla.

Implantar um servidor Web NGINX

  1. Crie um servidor web NGINX executando o kubectl create deployment nginx comando.

    kubectl create deployment nginx --image=nginx:latest --replicas=3
    
  2. Veja os recursos do pod executando o kubectl get pods comando.

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

    A saída mostra que os pods têm endereços IPv4 e IPv6. Os pods não mostram endereços IP até que estejam prontos.

    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
    

Expor a carga de trabalho por meio de um LoadBalancer tipo de serviço

Importante

O Balanceador de Carga do Azure envia testes de integridade para destinos IPv6 a partir de um endereço de link local. Nos conjuntos de nós do Azure Linux, o tráfego para serviços IPv6 que utilizam externalTrafficPolicy: Cluster falha. Os exemplos seguintes definem externalTrafficPolicy: Local no serviço IPv6 para que kube-proxy responda à sonda no nó.

  1. Expõe a implementação NGINX com serviços IPv4 e IPv6 LoadBalancer separados usando o kubectl expose deployment nginx comando.

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

    Recebes resultados que mostram que os serviços estão expostos.

    service/nginx-ipv4 exposed
    service/nginx-ipv6 exposed
    
  2. Depois de expor a implementação e provisionar totalmente os LoadBalancer serviços, obtenha os endereços IP dos serviços usando o kubectl get services comando.

    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. Verifique a funcionalidade de uma VM Linux ou de uma máquina local com um endereço IPv6 atribuído e o encaminhamento IPv6 configurado. O Azure Cloud Shell não suporta 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>