Criar um gateway da NAT gerenciado ou atribuído pelo usuário para o cluster do AKS (Serviço de Kubernetes do Azure)

Embora você possa rotear o tráfego de saída por meio de um Azure Load Balancer, há limitações no número de fluxos de tráfego de saída que você pode ter. O Gateway da NAT do Azure permite até 64.512 fluxos de tráfego UDP e TCP de saída por endereço IP com no máximo 16 endereços IP.

Este artigo mostra como criar um cluster do Serviço de Kubernetes do Azure (AKS) com um gateway da NAT gerenciado e um gateway da NAT atribuído pelo usuário para tráfego de saída. Ele também mostra como desabilitar OutboundNAT no Windows.

Antes de começar

  • Verifique se você está usando a última versão da CLI do Azure.
  • Verifique se você está usando o Kubernetes versão 1.20.x ou superior.
  • O Gateway da NAT gerenciado é incompatível com redes virtuais personalizadas.

Criar um cluster do AKS com um gateway da NAT gerenciado

  • Crie um cluster do AKS com um novo gateway da NAT gerenciado usando o comando az aks create com os parâmetros --outbound-type managedNATGateway, --nat-gateway-managed-outbound-ip-count e --nat-gateway-idle-timeout. Se você quiser que o gateway de NAT opere em uma zona de disponibilidade específica, especifique a zona usando --zones.

  • Se nenhuma zona for especificada quando você criar um gateway de NAT gerenciado, o gateway de NAT será implantado em "nenhuma zona" por padrão. Quando o gateway NAT é colocado emnenhuma zona, o Azure coloca o recurso em uma zona para você. Para obter mais informações sobre o modelo de implantação não zonal, consulte gateway da NAT não zonal.

  • Um recurso de gateway de NAT gerenciado não pode ser utilizado em várias zonas de disponibilidade.

      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
    
  • Atualize o endereço IP de saída ou o tempo limite ocioso usando o comando az aks update com o parâmetro --nat-gateway-managed-outbound-ip-count ou --nat-gateway-idle-timeout .

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

Criar um cluster do AKS com um gateway da NAT atribuído pelo usuário

Essa configuração requer a rede bring-your-own (via Kubenet ou CNI do Azure) e que o Gateway da NAT seja pré-configurado na sub-rede. Os comandos a seguir criam os recursos necessários para esse cenário.

  1. Crie um grupo de recursos usando o comando az group create.

    az group create --name myResourceGroup \
        --location southcentralus
    
  2. Crie uma identidade gerenciada para permissões de rede e armazene a ID em $IDENTITY_ID para uso posterior.

    IDENTITY_ID=$(az identity create \
        --resource-group myResourceGroup \
        --name myNatClusterId \
        --location southcentralus \
        --query id \
        --output tsv)
    
  3. Criar um IP público para o Gateway da NAT usando o comando az network public-ip create.

    az network public-ip create \
        --resource-group myResourceGroup \
        --name myNatGatewayPip \
        --location southcentralus \
        --sku standard
    
  4. Criar um Gateway da NAT usando o comando az network nat gateway create.

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

    Importante

    Um único recurso de gateway de NAT não pode ser usado em várias zonas de disponibilidade. Para garantir a resiliência da zona, recomenda-se implantar um recurso de gateway de NAT em cada zona de disponibilidade e atribuí-lo a sub-redes que contenham clusters do AKS em cada zona. Para obter mais informações sobre esse modelo de implantação, consulte Gateway de NAT para cada zona. Se nenhuma zona estiver configurada para o gateway de NAT, o posicionamento padrão da zona é "sem zona", no qual o Azure coloca o gateway de NAT em uma zona para você.

  5. Criar uma rede virtual usando o comando az network vnet create.

    az network vnet create \
        --resource-group myResourceGroup \
        --name myVnet \
        --location southcentralus \
        --address-prefixes 172.16.0.0/20 
    
  6. Crie uma sub-rede na rede virtual com o Gateway da NAT e armazene a ID em $SUBNET_ID para 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. Crie um cluster do AKS usando a sub-rede com o Gateway da NAT e a identidade gerenciada usando o 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 \
        --enable-managed-identity \
        --assign-identity $IDENTITY_ID
    

Desabilitar OutboundNAT para Windows

O Windows OutboundNAT pode causar determinados problemas de conexão e comunicação com seus pods do AKS. Um exemplo de problema é a reutilização da porta do nó. Neste exemplo, a OutboundNAT do Windows usa as portas para converter o IP do pod no IP do host do nó do Windows, o que pode causar uma conexão instável com o serviço externo devido a um problema de esgotamento de porta.

O Windows habilita o OutboundNAT por padrão. Agora você pode desabilitar manualmente o OutboundNAT quando cria pools de agentes do Windows.

Pré-requisitos

Limitações

  • Não é possível definir o tipo de saída do cluster como LoadBalancer. Você pode defini-lo como Gateway da NAT ou UDR:
    • Gateway da NAT: o Gateway da NAT pode lidar automaticamente com a conexão da NAT e é mais eficiente do que o Standard Load Balancer. Você poderá gerar custos extras com essa opção.
    • UDR (UserDefinedRouting): tenha em mente as limitações de porta ao configurar as regras de roteamento.
    • Caso você precise alternar de um balanceador de carga para o Gateway da NAT, adicione um gateway da NAT à VNet ou execute az aks upgrade para atualizar o tipo de saída.

Observação

O UserDefinedRouting tem as seguintes limitações:

  • O SNAT do balanceador de carga tem “64 portas no IP do host” (é necessário usar a OutboundNAT padrão).
  • O SNAT do Firewall do Azure tem 2.496 portas por IP público (é necessário desabilitar a OutboundNAT).
  • O SNAT do Gateway da NAT tem 64.512 portas por IP público (é necessário desabilitar a OutboundNAT).
  • Se o intervalo de portas do Firewall do Azure não for suficiente para seu aplicativo, use o Gateway da NAT.
  • O Firewall do Azure não aceita o SNAT com regras de rede quando o endereço IP de destino está em um intervalo de endereços IP privado de acordo com o IANA RFC 1918 ou em um espaço de endereço compartilhado de acordo com o IANA RFC 6598.

Desabilitar manualmente o OutboundNAT para Windows

  • Desabilite manualmente o OutboundNAT para Windows ao criar novos pools de agentes do Windows usando o comando az aks nodepool add com o sinalizador --disable-windows-outbound-nat.

    Observação

    Você pode usar um cluster do AKS existente, mas talvez precise atualizar o tipo de saída e adicionar um pool de nós para habilitar o --disable-windows-outbound-nat.

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

Próximas etapas

Para obter mais informações sobre o Gateway da NAT do Azure, confira Gateway da NAT do Azure.