Creación de una puerta de enlace NAT administrada o asignada por el usuario para el clúster de Azure Kubernetes Service (AKS)

Se aplica a: ✔️ AKS Automatic ✔️ AKS Standard

Para la mayoría de las cargas de trabajo de producción, AKS Automático es la configuración predeterminada recomendada y lista para producción de AKS. Los clústeres automáticos de AKS incluyen una puerta de enlace NAT administrada preconfigurada.

En AKS Standard, puede crear o configurar una puerta de enlace NAT administrada cuando desee la conectividad saliente administrada por AKS para el clúster. Para escenarios de red trae tu propio (BYO), utiliza una puerta de enlace NAT asignada por el usuario.

Aunque puede enrutar el tráfico de salida a través de un Azure Load Balancer, hay limitaciones en el número de flujos de tráfico saliente que puede establecer. Azure NAT Gateway admite hasta 64 512 flujos de tráfico UDP y TCP salientes por dirección IP con un máximo de 16 direcciones IP. Tres tipos de salida admiten la puerta de enlace NAT: managedNATGatewayV2 (versión preliminar), managedNATGatewayy userAssignedNATGateway.

En este artículo se muestra cómo crear un clúster de AKS con una puerta de enlace NAT administrada y una puerta de enlace NAT asignada por el usuario para el tráfico saliente. También muestra cómo deshabilitar OutboundNAT para Windows.

Importante

El managedNATGatewayV2 tipo de salida está actualmente en versión preliminar. Consulte los términos Supplementales de uso para las versiones preliminares de Microsoft Azure para conocer los términos legales que se aplican a las características de Azure que se encuentran en versión beta, versión preliminar o, de lo contrario, aún no se han publicado en disponibilidad general.

Requisitos previos

Los clústeres automáticos de AKS incluyen una puerta de enlace NAT administrada preconfigurada. Los pasos de este artículo son principalmente para escenarios de red estándar y personalizados de AKS.

  • Asegúrese de que usa la versión más reciente de CLI de Azure.
  • Asegúrese de que usa la versión 1.20.x o posterior de Kubernetes.
  • La puerta de enlace NAT administrada no es compatible con redes virtuales personalizadas.

Importante

En los clústeres que no son privados, el tráfico del clúster dirigido al servidor API se enruta y se procesa a través del tipo de salida del clúster. Para evitar que el tráfico del servidor de API se procese como tráfico público, considere la posibilidad de usar un clúster privado o consulte la característica Integración con red virtual del servidor de API.

Puerta de enlace NAT administrada en AKS

AKS Automatic usa una puerta de enlace NAT administrada como parte de su configuración predeterminada preconfigurada y lista para producción. Use esta sección si está trabajando con AKS Standard o si necesita comprender cómo se comporta la puerta de enlace NAT administrada en un clúster de AKS.

La puerta de enlace NAT administrada es la opción de salida administrada por AKS. AKS crea y administra la puerta de enlace NAT para proporcionar conectividad saliente para los nodos del clúster.

Use la puerta de enlace NAT administrada cuando desee:

  • Conectividad de salida administrada por AKS con menos sobrecarga operativa.
  • Una ruta de salida predeterminada apta para producción.
  • Administración de salida más sencilla que una implementación de puerta de enlace NAT administrada por el cliente.
  • Un modelo de red estándar de AKS sin usar un recurso de puerta de enlace NAT propio.

Creación de un clúster de AKS con puerta de enlace NAT administrada

Parámetros ip de salida

En la tabla siguiente se describen todos los parámetros IP de salida y cuándo usarlos:

Parámetro Entrada Versión de la dirección IP Quién administra las direcciones IP públicas
--nat-gateway-managed-outbound-ip-count Valor en el intervalo de [1, 16]. Número deseado de IPv4s de salida para la conexión saliente de la puerta de enlace NAT. IPv4 Azure
--nat-gateway-managed-outbound-ipv6-count Valor en el intervalo de [1, 16]. Número deseado de direcciones IPv6 salientes para la conexión de salida del gateway NAT. IPv6 Azure
--nat-gateway-outbound-ips IDs de recursos IP públicos separados por comas para la conexión de salida de la pasarela NAT. IPv4 o IPv6 Cliente
--nat-gateway-outbound-ip-prefixes ID de recurso con prefijo de IP pública separada por comas para la conexión de salida de la pasarela NAT. IPv4 o IPv6 Cliente

Crear un clúster de AKS con una puerta de enlace NAT StandardV2 administrada (managedNATGatewayV2)

Importante

Las características en versión preliminar de AKS están disponibles a elección del usuario y en régimen de autoservicio. Las versiones preliminares se proporcionan "tal cual" y "como están disponibles", y están excluidas de los Acuerdos de nivel de servicio y garantía limitada. Las versiones preliminares de AKS cuentan con soporte parcial por parte del servicio al cliente en la medida de lo posible. Por lo tanto, estas características no están diseñadas para su uso en producción. Para más información, consulte los siguientes artículos de soporte:

  • Cree un clúster de AKS con una puerta de enlace NAT de StandardV2 administrada mediante el comando az aks create con los parámetros --outbound-type managedNATGateway, --nat-gateway-outbound-ips, --nat-gateway-outbound-ip-prefixes, --nat-gateway-managed-outbound-ip-count, --nat-gateway-managed-outbound-ipv6-count y --nat-gateway-idle-timeout.
  • Cuando configure direcciones IP de salida para managedNATgatewayV2, use uno de los siguientes métodos. No puede usar direcciones IP de salida definidas por el cliente y administradas por Azure.
    • Direcciones IP administradas por Azure: Use --nat-gateway-managed-ip-outbound-count y --nat-gateway-managed-outbound-ipv6-count para que Azure asigne y administre automáticamente las direcciones IP públicas salientes por usted.
    • Direcciones IP definidas por el cliente: use --nat-gateway-outbound-ips y --nat-gateway-outbound-ip-prefixes para traer sus propias direcciones IP o prefijos públicos aprovisionados previamente, lo que le proporciona control total sobre las direcciones específicas usadas para el tráfico saliente. StandardV2 NAT Gateway requiere el uso de nuevas direcciones IP públicas de StandardV2. Las direcciones IP públicas de SKU estándar existentes no funcionan con la puerta de enlace NAT de StandardV2.

Instalación de la extensión aks-preview CLI de Azure

El managedNATGatewayV2 tipo de salida se encuentra actualmente en versión preliminar. Para usar este tipo de salida, instale la extensión de CLI de Azure aks-preview y registre el indicador de característica ManagedNATGatewayV2Preview.

Instale o actualice la extensión de CLI de Azure versión preliminar mediante el comando az extension add o az extension update. La versión mínima de la extensión de la aks-preview CLI de Azure es 20.0.0b1.

# Install the aks-preview extension
az extension add --name aks-preview

# Update the extension to make sure you have the latest version installed
az extension update --name aks-preview

Registro de la marca de característica ManagedNATGatewayV2Preview

  1. Registre la marca de características de ManagedNATGatewayV2Preview mediante el comando az feature register.

    az feature register --namespace "Microsoft.ContainerService" --name "ManagedNATGatewayV2Preview"
    
  2. Compruebe el registro correcto mediante el az feature show comando . El registro tarda unos minutos en completarse.

    az feature show --namespace "Microsoft.ContainerService" --name "ManagedNATGatewayV2Preview"
    

    Una vez que la característica muestre Registered, actualice el registro del proveedor de recursos Microsoft.ContainerService mediante el comando az provider register.

Creación de un clúster de AKS con una puerta de enlace NAT de StandardV2 administrada

Los siguientes comandos crean el grupo de recursos requeridos, la IP pública y los recursos prefijo IP público para acoplarse a la pasarela NAT, y el clúster AKS con una pasarela NAT StandardV2 gestionada.

  1. Cree un grupo de recursos con el comando az group create.

    # Set environment variables for resource group, AKS cluster, public IP, and public IP prefix names
    export RANDOM_SUFFIX=$(openssl rand -hex 3)
    export MY_RG="myResourceGroup$RANDOM_SUFFIX"
    export MY_AKS="myNatV2Cluster$RANDOM_SUFFIX"
    export MY_IP="myNatOutboundIP$RANDOM_SUFFIX"
    export MY_IP_PREFIX="myNatOutboundIPPrefix$RANDOM_SUFFIX"
    
    # Create the resource group
    az group create --name $MY_RG --location "eastus2"
    
  2. Cree una dirección IP pública IPv4 redundante de zona y un prefijo de IP pública usando el comando az network public-ip create. Almacene $MY_IP y $MY_IP_PREFIX para usar como direcciones IP de salida para la puerta de enlace NAT administrada StandardV2.

    # Create a zone redundant IPv4 public IP address and store the ID to $MY_IP_ID for later use
    export MY_IP_ID=$(az network public-ip create \
        --resource-group $MY_RG \
        --name $MY_IP \
        --location eastus2 \
        --sku StandardV2 \
        --allocation-method Static \
        --version IPv4 \
        --zone 1 2 3 \
        --query publicIp.id \
        --output tsv)
    
    # Create a zone redundant IPv4 public IP prefix and store the ID to $MY_IP_PREFIX_ID for later use
    export MY_IP_PREFIX_ID=$(az network public-ip prefix create \
        --resource-group $MY_RG \
        --name $MY_IP_PREFIX \
        --location eastus2 \
        --length 31 \
        --sku StandardV2 \
        --version IPv4 \
        --zone 1 2 3 \
        --query id \
        --output tsv)
    
  3. Cree el clúster de AKS y haga referencia a la dirección IP pública ($MY_IP_ID) y al prefijo de IP pública ($MY_IP_PREFIX_ID) mediante el comando az aks create con los parámetros --outbound-type managedNATGatewayV2, --nat-gateway-outbound-ips y --nat-gateway-outbound-ip-prefixes.

    az aks create \
        --resource-group $MY_RG \
        --name $MY_AKS \
        --node-count 3 \
        --outbound-type managedNATGatewayV2 \
        --nat-gateway-outbound-ips $MY_IP_ID \
        --nat-gateway-outbound-ip-prefixes $MY_IP_PREFIX_ID \
        --nat-gateway-idle-timeout 4 \
        --generate-ssh-keys
    

Actualice las direcciones IP de salida, los prefijos IP de salida, el recuento de direcciones IP de salida administradas o el tiempo de espera de inactividad mediante el comando az aks update con el parámetro --nat-gateway-outbound-ips, --nat-gateway-outbound-ip-prefixes, --nat-gateway-managed-outbound-count, --nat-gateway-managed-outbound-ipv6-count o --nat-gateway-idle-timeout. Un managedNATGatewayV2 no se puede actualizar para cambiar entre direcciones IP de salida definidas por el cliente y gestionadas, después de su creación. La configuración de IP de salida se determina cuando se crea inicialmente la puerta de enlace NAT de StandardV2 y permanece inmutable.

Creación de un clúster de AKS con una puerta de enlace NAT estándar administrada (managedNATGateway)

  • Crear un clúster de AKS con una puerta de enlace NAT estándar administrada mediante el comando az aks create con los parámetros --outbound-type managedNATGateway, --nat-gateway-managed-outbound-ip-count y --nat-gateway-idle-timeout. Si desea que la puerta de enlace NAT funcione fuera de una zona de disponibilidad específica, especifique la zona mediante --zones.
  • No puede usar un recurso de puerta de enlace NAT administrado en varias zonas de disponibilidad. Se aconseja utilizar managedNATgatewayV2 para la conectividad de salida con redundancia de zona.
  • Si no especifica una zona al crear una puerta de enlace NAT administrada, la puerta de enlace NAT se implementa en ninguna zona de forma predeterminada. Cuando la puerta de enlace NAT se encuentra en sin zona, Azure asigna automáticamente una zona al recurso. Para obtener más información sobre el modelo de implementación no zonal, consulte Puerta de enlace NAT no zonal.

Creación de un clúster de AKS con userAssignedNatGateway

Esta configuración requiere traer una red propia (a través de Azure CNI) y que la puerta de enlace NAT esté preconfigurada en la subred. Se soportan tanto las pasarelas NAT Standard como StandardV2 para esto outbound-type. Los comandos siguientes crean los recursos necesarios para implementar un recurso de puerta de enlace NAT standardV2 para el clúster de AKS.

  1. Cree un grupo de recursos con el comando az group create.

    # Set environment variables for resource group, AKS cluster, public IP, and public IP prefix names
    export RANDOM_SUFFIX=$(openssl rand -hex 3)
    export MY_RG="myResourceGroup$RANDOM_SUFFIX"
    
    # Create the resource group
    az group create --name $MY_RG --location southcentralus
    
  2. Cree una identidad administrada para los permisos de red y almacene el identificador en $IDENTITY_ID para su uso posterior.

    export IDENTITY_NAME="myNatClusterId$RANDOM_SUFFIX"
    export IDENTITY_ID=$(az identity create \
        --resource-group $MY_RG \
        --name $IDENTITY_NAME \
        --location southcentralus \
        --query id \
        --output tsv)
    

    Ejemplo de resultado:

    /xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/myResourceGroupxxx/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myNatClusterIdxxx
    
  3. Cree una dirección IP pública standardV2 para la puerta de enlace NAT mediante el az network public-ip create comando . Una puerta de enlace NAT standardV2 requiere una dirección IP pública standardV2.

    export PIP_NAME="myNatGatewayPip$RANDOM_SUFFIX"
    az network public-ip create \
        --resource-group $MY_RG \
        --name $PIP_NAME \
        --location southcentralus \
        --allocation-method Static \
        --version IPv4 \
        --zone 1 2 3 \
        --sku standard-v2
    
  4. Cree la puerta de enlace NAT de StandardV2 mediante el az network nat gateway create comando .

    export NATGATEWAY_NAME="myNatGateway$RANDOM_SUFFIX"
    az network nat gateway create \
        --resource-group $MY_RG \
        --name $NATGATEWAY_NAME \
        --location southcentralus \
        --public-ip-addresses $PIP_NAME \
        --sku StandardV2
        --idle-timeout 4
    

    Importante

    Para garantizar la redundancia de zona, implemente un recurso de puerta de enlace NAT standardV2, que abarca varias zonas de disponibilidad de una región. Esta configuración garantiza una conectividad saliente continua incluso si se produce un error en una sola zona. Para más información sobre la puerta de enlace NAT de StandardV2 y sus ventajas, consulte StandardV2 NAT Gateway. En comparación, un recurso de puerta de enlace NAT estándar proporciona resistencia solo dentro de la zona de disponibilidad en la que se implementa.

  5. Cree una red virtual mediante el comando az network vnet create.

    export VNET_NAME="myVnet$RANDOM_SUFFIX"
    az network vnet create \
        --resource-group $MY_RG \
        --name $VNET_NAME \
        --location southcentralus \
        --address-prefixes 172.16.0.0/20 
    
  6. Cree una subred en la red virtual mediante la instancia de NAT Gateway y almacene el identificador en $SUBNET_ID para su uso posterior.

    export SUBNET_NAME="myNatCluster$RANDOM_SUFFIX"
    export SUBNET_ID=$(az network vnet subnet create \
        --resource-group $MY_RG \
        --vnet-name $VNET_NAME \
        --name $SUBNET_NAME \
        --address-prefixes 172.16.0.0/22 \
        --nat-gateway $NATGATEWAY_NAME \
        --query id \
        --output tsv)
    
  7. Cree un clúster de AKS mediante la subred con la puerta de enlace NAT y la identidad administrada mediante el comando az aks create.

    export AKS_NAME="myNatCluster$RANDOM_SUFFIX"
    az aks create \
        --resource-group $MY_RG \
        --name $AKS_NAME \
        --location southcentralus \
        --network-plugin azure \
        --vnet-subnet-id $SUBNET_ID \
        --outbound-type userAssignedNATGateway \
        --assign-identity $IDENTITY_ID \
        --generate-ssh-keys
    

Consideraciones de producción

Al usar la puerta de enlace NAT administrada en producción, planee el comportamiento del tráfico saliente, el acceso al servidor de API y la resistencia de la carga de trabajo.

  • Utilice AKS Automático cuando desee la configuración predeterminada recomendada y lista para producción para la mayoría de las cargas de trabajo de AKS.
  • Use la puerta de enlace NAT administrada en AKS Estándar cuando quiera conectividad de salida administrada por AKS sin traer su propia puerta de enlace NAT.
  • Use un clúster privado o una integración con red virtual del servidor de API cuando desee reducir la exposición del tráfico del servidor de API.
  • Revise los requisitos de IP de salida antes de iniciarse.
  • Si las cargas de trabajo dependen de direcciones de salida fijas, valide que la puerta de enlace NAT administrada cumple esos requisitos antes de la implementación.
  • Si necesita administrar NAT independientemente de AKS, use una puerta de enlace NAT asignada por el usuario.

Deshabilitar OutboundNAT para Windows

Windows OutboundNAT puede causar ciertos problemas de conexión y comunicación con los pods de AKS. Un problema de ejemplo es la reutilización del puerto de nodo. En este ejemplo, Windows OutboundNAT usa puertos para traducir la dirección IP del pod a la dirección IP del host del nodo de Windows, lo que puede provocar una conexión inestable al servicio externo debido a un problema de agotamiento de puertos.

Windows habilita OutboundNAT de forma predeterminada. Ahora puede deshabilitar manualmente OutboundNAT al crear nuevos grupos de agentes de Windows.

Requisitos previos y limitaciones

  • Necesita un clúster de AKS existente con v1.26 o posterior. Si usa la versión 1.25 o anterior de Kubernetes, actualice la configuración de implementación.
  • No se puede establecer el tipo de salida del clúster en LoadBalancer. Puede establecerlo en NAT Gateway o UDR:
    • NAT Gateway: NAT Gateway controla automáticamente las conexiones NAT y es más eficaz que Standard Load Balancer. Puede incurrir en cargos adicionales mediante esta opción.
    • UDR (UserDefinedRouting):debe tener en cuenta las limitaciones de puerto al configurar reglas de enrutamiento.
    • Para cambiar de un equilibrador de carga a NAT Gateway, puede agregar una puerta de enlace NAT a la red virtual o ejecutar az aks upgrade para actualizar el tipo de salida.

Nota

UserDefinedRouting tiene las siguientes limitaciones:

  • El SNAT mediante el Load Balancer (debe utilizarse el OutboundNAT predeterminado) tiene 64 puertos en la IP del host.
  • El SNAT de Azure Firewall (desactivar OutboundNAT) tiene 2,496 puertos por dirección IP pública.
  • SNAT mediante NAT Gateway (deshabilitando OutboundNAT) tiene 64.512 puertos por cada dirección IP pública.
  • Si el intervalo de puertos del Firewall de Azure no es suficiente para tu aplicación, debe usar la puerta de enlace NAT.
  • Azure Firewall no realiza SNAT con las reglas de red cuando la dirección IP de destino está en un intervalo de direcciones IP privadas según el IANA RFC 1918 o en un espacio de direcciones compartido según el IANA RFC 6598.

Deshabilitar manualmente OutboundNAT para Windows

  • Deshabilite manualmente OutboundNAT para Windows al crear nuevos grupos de agentes de Windows mediante el comando az aks nodepool add con la marca --disable-windows-outbound-nat.

    Nota

    Puede usar un clúster de AKS existente, pero es posible que tenga que actualizar el tipo de salida y agregar un grupo de nodos para habilitar --disable-windows-outbound-nat.

    export WIN_NODEPOOL_NAME="win$(head -c 1 /dev/urandom | xxd -p)"
    az aks nodepool add \
        --resource-group $MY_RG \
        --cluster-name $MY_AKS \
        --name $WIN_NODEPOOL_NAME \
        --node-count 3 \
        --os-type Windows \
        --disable-windows-outbound-nat
    

    Ejemplo de resultado:

    {
      "id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/myResourceGroupxxx/providers/Microsoft.ContainerService/managedClusters/myNatClusterxxx/agentPools/mynpxxx",
      "name": "mynpxxx",
      "osType": "Windows",
      "provisioningState": "Succeeded",
      "resourceGroup": "myResourceGroupxxx",
      "type": "Microsoft.ContainerService/managedClusters/agentPools"
    }
    

Para obtener más información sobre Azure NAT Gateway y AKS Automatic, consulte los siguientes artículos: