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

Nota:

Al usar la asignación dinámica de direcciones IP, no se admite la exposición de una aplicación como un servicio Private Link mediante un servicio de equilibrador de carga de Kubernetes.

  • 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.

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

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

  1. Descargue o haga grep del archivo denominado container-azm-ms-agentconfig.yaml desde GitHub.

  2. Buscar en integraciones de azure_subnet_ip_usage. Establezca enabled en true.

  3. 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

  1. Abra el terminal en la carpeta donde se guarda el archivo descargado container-azm-ms-agentconfig.yaml.

  2. En primer lugar, aplique la configuración mediante el comando kubectl apply -f container-azm-ms-agentconfig.yaml

  3. Esto reiniciará el pod y, después de 5 a 10 minutos, las métricas estarán visibles.

  4. Para ver las métricas del clúster, vaya a Libros en la página del clúster en el Azure Portal y busque el libro denominado "Uso de IP de subred". La salida tendrá una apariencia parecida a la siguiente:

    A diagram of the Azure portal's workbook blade is shown, and metrics for an AKS cluster's subnet IP usage are displayed.

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: