Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Puede implementar los clústeres de AKS en un modo de pila doble al usar una red virtual de Azure de doble pila. En esta configuración, los nodos reciben una dirección IPv4 y una IPv6 de la subred de la red virtual de Azure. Los pods reciben una dirección IPv4 y una IPv6 de un espacio de direcciones lógicamente distinto a la subred de red virtual de Azure de los nodos. A continuación, se configura la traducción de direcciones de red (NAT) para que los pods puedan acceder a los recursos en la red virtual de Azure. La dirección IP de origen del tráfico traduce las direcciones de red a la dirección IP principal del nodo de la misma familia (IPv4 a IPv4 e IPv6 a IPv6).
En este artículo se muestra cómo usar redes de doble pila con un clúster de AKS. Para más información sobre las opciones y consideraciones de red, consulte Conceptos de red para Kubernetes y AKS.
Importante
A partir del 30 de noviembre de 2025, Azure Kubernetes Service (AKS) ya no admite ni proporciona actualizaciones de seguridad para Azure Linux 2.0. La imagen de nodo de Linux 2.0 de Azure está congelada en la versión 202512.06.0. A partir del 31 de marzo de 2026, se quitarán las imágenes de nodo y no podrá escalar los grupos de nodos. Migre a una versión compatible de Azure Linux mediante la actualización de los grupos de nodos a una versión de Kubernetes compatible o la migración a osSku AzureLinux3. Para más información, consulte el asunto de retirada de GitHub y el anuncio sobre la retirada de actualizaciones de Azure. Para mantenerse informado sobre los anuncios y actualizaciones, siga las notas de lanzamiento de AKS.
Limitaciones
- En los grupos de nodos de Linux de Azure, los objetos de servicio solo se admiten con
externalTrafficPolicy: Local. - Las redes de doble pila son necesarias para la red virtual de Azure y el CIDR del pod.
- No se admite una pila única de solo IPv6 para las direcciones IP de nodo o pod. Los servicios se pueden aprovisionar en IPv4 o IPv6.
- Azure CNI Overlay es necesario
Prerrequisitos
- Los clústeres de pila doble de AKS requieren la versión v1.21.2 o posterior de Kubernetes. Se recomienda la versión 1.22.2 o posterior.
- Si usa plantillas de Azure Resource Manager, se requiere la versión de esquema 2021-10-01.
Introducción a las redes de doble pila en Kubernetes
Kubernetes v1.23 ofrece compatibilidad ascendente estable con clústeres de pila doble de IPv4/IPv6, incluidas redes de pods y servicios. Los nodos y pods siempre se asignan tanto a una dirección IPv4 como a una dirección IPv6, mientras que los servicios pueden ser de pila doble o de una sola pila en cualquiera de las familias de direcciones.
AKS configura los servicios auxiliares necesarios para las redes de doble pila. Esta configuración incluye:
- Si usa una red virtual administrada, una configuración de red virtual de pila doble.
- Direcciones de nodo y pod IPv4 e IPv6.
- Reglas de salida para el tráfico IPv4 e IPv6.
- Configuración del equilibrador de carga para los servicios IPv4 e IPv6.
Nota:
Al usar Dualstack con un tipo de salida de enrutamiento definido por el usuario, puede elegir tener una ruta predeterminada para IPv6 en función de si necesita su tráfico IPv6 para llegar a Internet o no. Si no tiene una ruta predeterminada para IPv6, aparecerá una advertencia al crear un clúster, pero no impedirá la creación del clúster.
Despliegue de un clúster de doble pila
Se proporcionan los siguientes atributos para admitir los clústeres de pila doble:
-
--ip-families: toma una lista de familias de direcciones IP separadas por comas para habilitarlas en el clúster.- Solo se admiten
ipv4oipv4,ipv6.
- Solo se admiten
-
--pod-cidrs: toma una lista de intervalos IP de notación CIDR separados por comas desde donde asignar direcciones IP de los pods.- La cantidad y el orden de los intervalos de esta lista debe coincidir con el valor que se proporciona a
--ip-families. - Si no se proporciona ningún valor, se usará el valor predeterminado de
10.244.0.0/16,fd12:3456:789a::/64.
- La cantidad y el orden de los intervalos de esta lista debe coincidir con el valor que se proporciona a
-
--service-cidrs: toma una lista de intervalos IP de notación CIDR separados por comas desde donde asignar direcciones IP de los servicios.- La cantidad y el orden de los intervalos de esta lista debe coincidir con el valor que se proporciona a
--ip-families. - Si no se proporciona ningún valor, se usará el valor predeterminado de
10.0.0.0/16,fd12:3456:789a:1::/108. - La subred IPv6 asignada a
--service-cidrsno puede ser mayor que /108.
- La cantidad y el orden de los intervalos de esta lista debe coincidir con el valor que se proporciona a
Implementar un clúster de AKS de pila doble
Cree un grupo de recursos de Azure para el clúster mediante el
az group createcomando .az group create --location <region> --name <resourceGroupName>Cree un clúster de AKS de pila doble mediante el comando
az aks createcon el parámetro--ip-familiesestablecido enipv4,ipv6.az aks create \ --location <region> \ --resource-group <resourceGroupName> \ --name <clusterName> \ --ip-families ipv4,ipv6 \ --generate-ssh-keysUna vez creado el clúster, obtenga las credenciales de administrador del clúster mediante el
az aks get-credentialscomando .az aks get-credentials --resource-group <resourceGroupName> --name <clusterName>
Inspección de los nodos para ver ambas familias de direcciones IP
Una vez aprovisionado el clúster, confirme que los nodos se aprovisionan con redes de doble pila mediante el
kubectl get nodescomando .kubectl get nodes -o=custom-columns="NAME:.metadata.name,ADDRESSES:.status.addresses[?(@.type=='InternalIP')].address,PODCIDRS:.spec.podCIDRs[*]"La salida del comando
kubectl get nodesmuestra que los nodos tienen direcciones y espacio de asignación de IP de pods tanto de IPv4 como de 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
Creación de una carga de trabajo de ejemplo
Una vez creado el clúster, puede implementar las cargas de trabajo. Este artículo le guía a través de una implementación de carga de trabajo de ejemplo de un servidor web NGINX.
Instalación de un servidor web NGINX
Cree un servidor web NGINX mediante el
kubectl create deployment nginxcomando .kubectl create deployment nginx --image=nginx:latest --replicas=3Vea los recursos del pod mediante el
kubectl get podscomando .kubectl get pods -o custom-columns="NAME:.metadata.name,IPs:.status.podIPs[*].ip,NODE:.spec.nodeName,READY:.status.conditions[?(@.type=='Ready')].status"La salida muestra que los pods tienen direcciones IPv4 e IPv6. Los pods no muestran direcciones IP hasta que estén listos.
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
Exposición de la carga de trabajo a través de un servicio de tipo LoadBalancer
Importante
A partir de AKS v1.27, puede crear un servicio LoadBalancer de doble pila que se aprovisionará con una dirección IP pública IPv4 y una dirección IP pública IPv6. Sin embargo, en versiones anteriores, solo se aprovisionará la primera dirección IP de un servicio en el equilibrador de carga, por lo que un servicio de pila doble solo recibe una dirección IP pública para su familia de direcciones IP enumeradas por primera vez. A fin de proporcionar un servicio de pila doble para una implementación única, cree dos servicios destinados al mismo selector: uno para IPv4 y el otro para IPv6.
AKS a partir de la versión 1.27
Exponga la implementación de NGINX mediante el comando
kubectl expose deployment nginx.kubectl expose deployment nginx --name=nginx --port=80 --type=LoadBalancer --overrides='{"spec":{"ipFamilyPolicy": "PreferDualStack", "ipFamilies": ["IPv4", "IPv6"]}}'Recibe una salida que muestra que los servicios se han expuesto.
service/nginx exposedUna vez que la implementación se expone y los servicios
LoadBalancerestán completamente aprovisionados, obtenga las direcciones IP de los servicios mediante el comandokubectl get services.kubectl get servicesNAME 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 2m11skubectl get services nginx -ojsonpath='{.spec.clusterIPs}'["10.0.223.73","fd17:d93e:db1f:f771::54e"]Compruebe la funcionalidad a través de una solicitud web de línea de comandos desde un host compatible con IPv6. Azure Cloud Shell no es compatible con 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 anterior a v1.27
Exponga la implementación de NGINX mediante el comando
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"]}}'Recibe una salida que muestra que los servicios se han expuesto.
service/nginx-ipv4 exposed service/nginx-ipv6 exposedUna vez que la implementación se expone y los servicios
LoadBalancerestán completamente aprovisionados, obtenga las direcciones IP de los servicios mediante el comandokubectl get services.kubectl get servicesNAME 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 63sCompruebe la funcionalidad a través de una solicitud web de línea de comandos desde un host compatible con IPv6. Azure Cloud Shell no es compatible con 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>