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

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

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

Antes de começar

  • Certifique-se de que está a utilizar a versão mais recente da CLI do Azure.
  • Verifique se você está usando o Kubernetes versão 1.20.x ou superior.
  • O gateway NAT gerenciado é incompatível com redes virtuais personalizadas.

Importante

Em clusters não privados, o tráfego de cluster do servidor de API é roteado e processado através do tipo de saída de clusters. Para evitar que o tráfego do servidor de API seja processado como tráfego público, considere o uso de um cluster privado ou confira o recurso de integração de rede virtual do servidor de API.

Criar um cluster AKS com um gateway NAT gerenciado

  • Crie um cluster AKS com um novo gateway NAT gerenciado usando o az aks create comando com os --outbound-type managedNATGatewayparâmetros , --nat-gateway-managed-outbound-ip-counte --nat-gateway-idle-timeout . Se desejar que o gateway NAT opere fora de uma zona de disponibilidade específica, especifique a zona usando --zones.

  • Se nenhuma zona for especificada ao criar um gateway NAT gerenciado, o gateway NAT será implantado em "nenhuma zona" por padrão. Quando o gateway NAT é colocado em nenhuma 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 NAT não zonal.

  • Um recurso de gateway NAT gerenciado não pode ser usado 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 \
          --generate-ssh-keys
    
  • Atualize o endereço IP de saída ou o tempo limite ocioso usando o az aks update comando com o --nat-gateway-managed-outbound-ip-count parâmetro or --nat-gateway-idle-timeout .

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

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

Essa configuração requer trazer sua própria rede (via Kubenet ou Azure CNI) e que o gateway NAT esteja 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 az group create comando.

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

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

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

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

    Importante

    Um único recurso de gateway 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 NAT em cada zona de disponibilidade e atribuir a sub-redes contendo clusters AKS em cada zona. Para obter mais informações sobre esse modelo de implantação, consulte Gateway NAT para cada zona. Se nenhuma zona estiver configurada para gateway NAT, o posicionamento de zona padrão será "sem zona", no qual o Azure coloca o gateway NAT em uma zona para você.

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

    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 usando o gateway NAT e armazene a ID para $SUBNET_ID 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 AKS usando a sub-rede com o gateway NAT e a identidade gerenciada usando o az aks create comando.

    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
    

Desativar OutboundNAT para Windows

O Windows OutboundNAT pode causar certos problemas de conexão e comunicação com seus pods AKS. Um exemplo de problema é a reutilização da porta do nó. Neste exemplo, o Windows OutboundNAT usa portas para traduzir o IP do pod para o 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 exaustão da porta.

O Windows habilita OutboundNAT por padrão. Agora você pode desabilitar manualmente OutboundNAT ao criar novos pools de agentes do Windows.

Pré-requisitos

  • Cluster AKS existente com v1.26 ou superior. Se você estiver usando o Kubernetes versão 1.25 ou anterior, precisará atualizar sua configuração de implantação.

Limitações

  • Não é possível definir o tipo de saída do cluster como LoadBalancer. Você pode defini-lo como Nat Gateway ou UDR:
    • NAT Gateway: O NAT Gateway pode lidar automaticamente com a conexão NAT e é mais poderoso do que o Standard Load Balancer. Poderá incorrer em custos adicionais com esta opção.
    • UDR (UserDefinedRouting): Você deve ter em mente as limitações de porta ao configurar regras de roteamento.
    • Se você precisar alternar de um balanceador de carga para o gateway NAT, poderá adicionar um gateway NAT à rede virtual ou executar az aks upgrade para atualizar o tipo de saída.

Nota

UserDefinedRouting tem as seguintes limitações:

  • SNAT by Load Balancer (deve usar o padrão OutboundNAT) tem "64 portas no IP do host".
  • SNAT by Azure Firewall (desabilitar OutboundNAT) tem 2496 portas por IP público.
  • SNAT by NAT Gateway (disable OutboundNAT) tem 64512 portas por IP público.
  • Se o intervalo de portas do Firewall do Azure não for suficiente para seu aplicativo, você precisará usar o Gateway NAT.
  • O Firewall do Azure não faz SNAT com regras de Rede quando o endereço IP de destino está em um intervalo de endereços IP privados por IANA RFC 1918 ou espaço de endereçamento compartilhado por IANA RFC 6598.

Desativar manualmente OutboundNAT para Windows

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

    Nota

    Você pode usar um cluster AKS existente, mas talvez seja necessário atualizar o tipo de saída e adicionar um pool de nós para habilitar --disable-windows-outbound-nato .

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

Próximos passos

Para obter mais informações sobre o Azure NAT Gateway, consulte Azure NAT Gateway.