Partekatu honen bidez:


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

Aunque puede enrutar el tráfico de salida a través de una instancia de Azure Load Balancer, hay limitaciones en el número de flujos de tráfico de salida que puede tener. Azure NAT Gateway permite hasta 64 512 flujos de tráfico UDP y TCP de salida por dirección IP con un máximo de 16 direcciones IP.

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

Antes de empezar

  • Asegúrese de usar la versión más reciente de la 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 las redes virtuales personalizadas.

Importante

En clústeres no privados, el tráfico del clúster del servidor de API se enruta y procesa a través del tipo de salida de clústeres. 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.

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

  • Cree un clúster de AKS con una nueva puerta de enlace NAT 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.

  • Si no se especifica ninguna zona al crear una puerta de enlace NAT administrada, la puerta de enlace NAT se implementa en "ninguna zona" de manera predeterminada. Cuando la puerta de enlace NAT se coloca en ninguna zona, Azure coloca el recurso en una zona automáticamente. Para más información sobre el modelo de implementación no zonal, consulte Puerta de enlace NAT no zonal.

  • Un recurso de puerta de enlace NAT administrado no se puede usar en varias zonas de disponibilidad.

      az aks create \
          --resource-group myResourceGroup \
          --name myNatCluster \
          --node-count 3 \
          --outbound-type managedNATGateway \
          --nat-gateway-managed-outbound-ip-count 2 \
          --nat-gateway-idle-timeout 4 \
          --generate-ssh-keys
    
  • Actualice la dirección IP de salida o el tiempo de espera de inactividad mediante el comando az aks update con el parámetro --nat-gateway-managed-outbound-ip-count o --nat-gateway-idle-timeout.

    az aks update \ 
        --resource-group myResourceGroup \
        --name myNatCluster\
        --nat-gateway-managed-outbound-ip-count 5
    

Creación de un clúster de AKS con una puerta de enlace NAT asignada por el usuario

Esta configuración requiere traer sus propias redes (mediante Kubenet o Azure CNI) y que la puerta de enlace NAT esté preconfigurada en la subred. Los siguientes comandos crean los recursos necesarios para este escenario.

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

    az group create --name myResourceGroup \
        --location southcentralus
    
  2. Cree una identidad administrada para los permisos de red y almacene el identificador en $IDENTITY_ID para su uso posterior.

    IDENTITY_ID=$(az identity create \
        --resource-group myResourceGroup \
        --name myNatClusterId \
        --location southcentralus \
        --query id \
        --output tsv)
    
  3. Cree una IP pública para la puerta de enlace de NAT mediante el comando az network public-ip create.

    az network public-ip create \
        --resource-group myResourceGroup \
        --name myNatGatewayPip \
        --location southcentralus \
        --sku standard
    
  4. Cree la puerta de enlace NAT mediante el comando az network nat gateway create.

    az network nat gateway create \
        --resource-group myResourceGroup \
        --name myNatGateway \
        --location southcentralus \
        --public-ip-addresses myNatGatewayPip
    

    Importante

    No se puede usar un único recurso de puerta de enlace NAT en varias zonas de disponibilidad. Para garantizar la resistencia de zona, se recomienda implementar un recurso de puerta de enlace de NAT en cada zona de disponibilidad y asignar a subredes que contienen clústeres de AKS en cada zona. Para más información sobre este modelo de implementación, consulte Puerta de enlace de NAT para cada zona. Si no hay ninguna zona configurada para la puerta de enlace de NAT, la selección de ubicación de la zona predeterminada es "sin zona", en la que Azure coloca la puerta de enlace de NAT en una zona automáticamente.

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

    az network vnet create \
        --resource-group myResourceGroup \
        --name myVnet \
        --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.

    SUBNET_ID=$(az network vnet subnet create \
        --resource-group myResourceGroup \
        --vnet-name myVnet \
        --name myNatCluster \
        --address-prefixes 172.16.0.0/22 \
        --nat-gateway myNatGateway \
        --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.

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

Deshabilitación de OutboundNAT para Windows

OutboundNAT de Windows 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

Limitaciones

  • No se puede establecer el tipo de salida de clúster en LoadBalancer. Puede establecerlo en Nat Gateway o UDR:
    • NAT Gateway: NAT Gateway puede controlar automáticamente la conexión NAT y es más eficaz que Standard Load Balancer. Puede incurrir en cargos adicionales con esta opción.
    • UDR (UserDefinedRouting):debe tener en cuenta las limitaciones de puerto al configurar reglas de enrutamiento.
    • Si necesita cambiar de un equilibrador de carga a una puerta de enlace NAT, 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:

  • SNAT por Load Balancer (debe usar OutboundNAT predeterminado) tiene "64 puertos en la dirección IP del host".
  • SNAT de Azure Firewall (deshabilitar OutboundNAT) tiene 2496 puertos por IP pública.
  • SNAT por NAT Gateway (deshabilitar OutboundNAT) tiene 64512 puertos por dirección IP pública.
  • Si el intervalo de puertos de Azure Firewall no es suficiente para la aplicación, debe usar NAT Gateway.
  • Azure Firewall no SNAT con reglas de red cuando la dirección IP de destino está en un intervalo de direcciones IP privadas por IANA RFC 1918 o espacio de direcciones compartido por IANA RFC 6598.

Deshabilitación manual de 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.

    az aks nodepool add \
        --resource-group myResourceGroup \
        --cluster-name myNatCluster \
        --name mynp \
        --node-count 3 \
        --os-type Windows \
        --disable-windows-outbound-nat
    

Pasos siguientes

Para obtener más información sobre Azure NAT Gateway, consulte Azure NAT Gateway.