Configuración de redes de Azure CNI para la asignación dinámica de direcciones IP y la compatibilidad mejorada con subredes en Azure Kubernetes Service (AKS)
Un inconveniente de la CNI tradicional es el agotamiento de las direcciones IP Pod a medida que crece el clúster de AKS, de modo que se vuelve necesario recompilar todo el clúster en una subred más grande. La nueva capacidad de asignación dinámica de direcciones IP de Azure CNI soluciona este problema al asignar direcciones IP de pods de una subred que es independiente de la subred que hospeda el clúster de AKS.
Esto reporta las siguientes ventajas:
- Mejor uso de IP: las direcciones IP se asignan dinámicamente a los pods de clúster desde la subred de pod. Esto conduce a un mejor uso de las direcciones IP en el clúster en comparación con la solución CNI tradicional, que realiza una asignación estática de direcciones IP para cada nodo.
- Escalable y flexible: las subredes de nodo y pod se pueden escalar de manera independiente. Una sola subred de pod puede compartirse en varios grupos de nodos de un clúster o en varios clústeres de AKS implementados en la misma red virtual. También puede configurar una subred de pod independiente para un grupo de nodos.
- Alto rendimiento: Ya que a los pods se les asignan direcciones IP de red virtual, tienen conectividad directa con los recursos y el pod de otros clústeres de la red virtual. La solución admite clústeres muy grandes sin ninguna reducción del rendimiento.
- Directivas de red virtual independientes para pods: dado que los pods tienen una subred independiente, puede configurar directivas de red virtual independientes para ellas distintas de las directivas de nodo. Esto permite muchos escenarios útiles, como la habilitación de la conectividad a Internet solo para los pods y no para los nodos, la corrección de la IP de origen para los pods en un grupo de nodos mediante Azure NAT Gateway y el uso de NSG para filtrar el tráfico entre grupos de nodos.
- Directivas de red de Kubernetes: las directivas de red de Azure y Calico funcionan con esta nueva solución.
En este artículo se muestra cómo usar las redes de Azure CNI para la asignación dinámica de direcciones IP y la compatibilidad mejorada con subredes en AKS.
Requisitos previos
Revise los requisitos previos para configurar redes básicas de Azure CNI en AKS, ya que los mismos requisitos previos se aplican a este artículo.
Revise los parámetros de implementación para configurar redes básicas de Azure CNI en AKS, ya que se aplican los mismos parámetros.
No se admiten los clústeres de AKS Engine y de implementación personal.
CLI de Azure, versión
2.37.0
o posteriores.Si tiene un clúster existente, debe habilitar Container Insights para supervisar el uso de subredes IP. Puede habilitar Container Insights con el comando
az aks enable-addons
, tal como se muestra en el ejemplo siguiente:az aks enable-addons --addons monitoring --name $CLUSTER_NAME --resource-group $RESOURCE_GROUP_NAME
Planeamiento de las direcciones IP
Planear el direccionamiento IP es mucho más sencillo con esta característica. Dado que los nodos y pods se escalan de manera independiente, los espacios de direcciones también se pueden planear por separado. Dado que las subredes de pod se pueden configurar en la granularidad de un grupo de nodos, siempre podrá agregar una nueva subred cuando agregue un grupo de nodos. Los pods de sistema de un grupo de clústeres/nodos también reciben direcciones IP de la subred de pod, por lo que es necesario tener en cuenta este comportamiento.
Las direcciones IP se asignan a los nodos en lotes de 16. La asignación de IP de la subred del pod debe planearse con un mínimo de 16 direcciones IP por nodo en el clúster; los nodos solicitarán 16 direcciones IP al inicio y luego otro lote de 16 siempre que haya <8 direcciones IP sin asignar en su asignación.
La planeación de las direcciones IP para los servicios Kubernetes y el puente de Docker permanecen sin cambios.
Para ver y comprobar los recursos de NodeNetworkConfiguration (NNC) responsables de estas asignaciones de IP, puede ejecutar el siguiente comando:
kubectl get nodenetworkconfigs -n kube-system -o wide
Máximo de pods por nodo en un clúster con asignación dinámica de direcciones IP y compatibilidad mejorada con subredes
Los valores de pods por nodo al usar Azure CNI con asignación dinámica de direcciones IP difieren ligeramente del comportamiento de CNI tradicional:
CNI | Valor predeterminado | Configurable en la implementación |
---|---|---|
Azure CNI tradicional | 30 | Sí (hasta 250) |
Azure CNI con asignación dinámica de direcciones IP | 250 | Sí (hasta 250) |
Todas las demás instrucciones relacionadas con la configuración del máximo de pods por nodo siguen siendo las mismas.
Parámetros de implementación
Los parámetros de implementación para configurar redes básicas de Azure CNI en AKS son válidos, con dos excepciones:
- El parámetro subnet ahora hace referencia a la subred relacionada con los nodos del clúster.
- Se usa un parámetro adicional pod subnet para especificar la subred cuyas direcciones IP se asignarán dinámicamente a los pods.
Configuración de redes con asignación dinámica de direcciones IP y compatibilidad mejorada con subredes: CLI de Azure
El uso de la asignación dinámica de direcciones IP y la compatibilidad mejorada con subredes en el clúster es similar al método predeterminado para configurar un clúster de Azure CNI. En el ejemplo siguiente se describe cómo crear una nueva red virtual con una subred para nodos y una subred para pods, y cómo crear un clúster que usa Azure CNI con asignación dinámica de direcciones IP y compatibilidad mejorada con subredes. Asegúrese de reemplazar las variables como $subscription
con sus propios valores.
Cree la red virtual con dos subredes.
RESOURCE_GROUP_NAME="myResourceGroup"
VNET_NAME="myVirtualNetwork"
LOCATION="westcentralus"
SUBNET_NAME_1="nodesubnet"
SUBNET_NAME_2="podsubnet"
# Create the resource group
az group create --name $RESOURCE_GROUP_NAME --location $LOCATION
# Create our two subnet network
az network vnet create --resource-group $RESOURCE_GROUP_NAME --location $LOCATION --name $VNET_NAME --address-prefixes 10.0.0.0/8 -o none
az network vnet subnet create --resource-group $RESOURCE_GROUP_NAME --vnet-name $VNET_NAME --name $SUBNET_NAME_1 --address-prefixes 10.240.0.0/16 -o none
az network vnet subnet create --resource-group $RESOURCE_GROUP_NAME --vnet-name $VNET_NAME --name $SUBNET_NAME_2 --address-prefixes 10.241.0.0/16 -o none
Cree el clúster. Para ello, haga referencia a la subred de nodo con --vnet-subnet-id
y la subred de pod con --pod-subnet-id
y haga referencia al complemento de supervisión.
CLUSTER_NAME="myAKSCluster"
SUBSCRIPTION="aaaaaaa-aaaaa-aaaaaa-aaaa"
az aks create \
--name $CLUSTER_NAME \
--resource-group $RESOURCE_GROUP_NAME \
--location $LOCATION \
--max-pods 250 \
--node-count 2 \
--network-plugin azure \
--vnet-subnet-id /subscriptions/$SUBSCRIPTION/resourceGroups/$RESOURCE_GROUP_NAME/providers/Microsoft.Network/virtualNetworks/$VNET_NAME/subnets/$SUBNET_NAME_1 \
--pod-subnet-id /subscriptions/$SUBSCRIPTION/resourceGroups/$RESOURCE_GROUP_NAME/providers/Microsoft.Network/virtualNetworks/$VNET_NAME/subnets/$SUBNET_NAME_2 \
--enable-addons monitoring \
--generate-ssh-keys
Adición de grupo de nodos
Al agregar un grupo de nodos, haga referencia a la subred de nodo mediante --vnet-subnet-id
y la subred de pod mediante --pod-subnet-id
. En el ejemplo siguiente se crean dos nuevas subredes a las que se hace referencia durante la creación de un nuevo grupo de nodos:
SUBNET_NAME_3="node2subnet"
SUBNET_NAME_4="pod2subnet"
NODE_POOL_NAME="mynodepool"
az network vnet subnet create --resource-group $RESOURCE_GROUP_NAME --vnet-name $VNET_NAME --name $SUBNET_NAME_3 --address-prefixes 10.242.0.0/16 -o none
az network vnet subnet create --resource-group $RESOURCE_GROUP_NAME --vnet-name $VNET_NAME --name $SUBNET_NAME_4 --address-prefixes 10.243.0.0/16 -o none
az aks nodepool add --cluster-name $CLUSTER_NAME --resource-group $RESOURCE_GROUP_NAME --name $NODE_POOL_NAME \
--max-pods 250 \
--node-count 2 \
--vnet-subnet-id /subscriptions/$SUBSCRIPTION/resourceGroups/$RESOURCE_GROUP_NAME/providers/Microsoft.Network/virtualNetworks/$VNET_NAME/subnets/$SUBNET_NAME_3 \
--pod-subnet-id /subscriptions/$SUBSCRIPTION/resourceGroups/$RESOURCE_GROUP_NAME/providers/Microsoft.Network/virtualNetworks/$VNET_NAME/subnets/$SUBNET_NAME_4 \
--no-wait
Supervisión del uso de subred IP
Azure CNI proporciona la capacidad de supervisar el uso de subred IP. Para habilitar la supervisión del uso de subred IP, siga estos pasos:
Obtención del archivo YAML
Descargue o haga grep del archivo denominado container-azm-ms-agentconfig.yaml desde GitHub.
Buscar en integraciones de
azure_subnet_ip_usage
. Establezcaenabled
entrue
.Guarde el archivo.
Obtención de las credenciales de AKS
Establezca las variables para la suscripción, el grupo de recursos y el clúster. Considere los ejemplos siguientes:
az account set --subscription $SUBSCRIPTION
az aks get-credentials --name $CLUSTER_NAME --resource-group $RESOURCE_GROUP_NAME
Aplicación de la configuración
- Abra el terminal en la carpeta en la que se guarda el archivo descargado container-azm-ms-agentconfig.yaml.
- Aplique la configuración mediante el comando
kubectl apply -f container-azm-ms-agentconfig.yaml
. Esto reiniciará el pod y, después de 5 a 10 minutos, las métricas estarán visibles. - Para ver las métricas del clúster, vaya a Libros en la página del clúster en Azure Portal y busque el libro denominado Uso de IP de subred.
Preguntas frecuentes sobre la asignación dinámica de direcciones IP y la compatibilidad mejorada con subredes
¿Puedo asignar varias subredes de pod a un grupo de clústeres/nodos?
Solo se puede asignar una subred a un grupo de clústeres o nodos. Sin embargo, varios clústeres o grupos de nodos pueden compartir una sola subred.
¿Puedo asignar subredes de pod de una red virtual diferente?
No, la subred de pod debe ser de la misma red virtual que el clúster.
¿Algunos de los grupos de nodos de un clúster pueden usar el CNI tradicional mientras otros usan el nuevo CNI?
Todo el clúster debe usar un solo tipo de CNI.
Pasos siguientes
Más información acerca de las redes en AKS en los siguientes artículos:
Azure Kubernetes Service