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

Aplica-se a: ✔️ AKS Automatic ✔️ AKS Standard

Para a maioria das cargas de trabalho de produção, o AKS Automatic é a opção padrão recomendada e pronta para uso em produção no AKS. Os clusters automáticos do AKS incluem um gateway NAT gerenciado pré-configurado.

No AKS Standard, você pode criar ou configurar um gateway NAT gerenciado quando quiser conectividade de saída gerenciada pelo AKS para seu cluster. Em cenários de rede do tipo traga sua própria rede (BYO), use um gateway NAT atribuído ao usuário.

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 saída de tráfego que você pode ter. Gateway da NAT do Azure dá suporte a 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. Três tipos de saída dão suporte ao gateway NAT: managedNATGatewayV2 (versão prévia) managedNATGatewaye userAssignedNATGateway.

Este artigo mostra como criar um cluster do AKS com gateway NAT gerenciado e gateway NAT atribuído ao usuário para o tráfego de saída. Ele também mostra como desabilitar o OutboundNAT para Windows.

Importante

O tipo de saída managedNATGatewayV2 está no momento em versão preliminar. Consulte os Termos Suplementares de Uso para visualizações do Microsoft Azure para termos legais que se aplicam a recursos do Azure que estão em versão beta, prévia ou ainda não liberados para disponibilidade geral para o público.

Pré-requisitos

Os clusters automáticos do AKS incluem um gateway NAT gerenciado pré-configurado. As etapas neste artigo são principalmente para o AKS Standard e cenários de rede personalizados.

  • Verifique se você está usando a versão mais recente do CLI do Azure.
  • Verifique se você está usando o Kubernetes versão 1.20.x ou posterior.
  • O gateway NAT gerenciado não é compatível com redes virtuais personalizadas.

Importante

Em clusters não privados, o tráfego do cluster do servidor de API é roteado e processado usando o tipo de saída do cluster. Para impedir que o tráfego do servidor de API seja processado como um tráfego público, considere o uso de um cluster privado ou confira o recurso Integração VNET do servidor de API.

Gateway NAT gerenciado no AKS

O AKS Automatic usa o gateway NAT gerenciado como parte da sua configuração padrão pré-configurada e pronta para produção. Use esta seção se você estiver trabalhando com o AKS Standard ou se precisar entender como o gateway NAT gerenciado se comporta em um cluster do AKS.

O gateway NAT gerenciado é a opção de saída gerenciada pelo AKS. O AKS cria e gerencia o gateway NAT para fornecer conectividade de saída para os nós do cluster.

Use o gateway de NAT gerenciado quando desejar:

  • Conectividade de saída gerenciada pelo AKS com menos sobrecarga operacional.
  • Um caminho de saída padrão amigável à produção.
  • Gerenciamento de saída mais simples do que uma implantação de um gateway NAT gerenciado pelo cliente.
  • Um modelo de rede AKS padrão sem usar um recurso próprio de gateway NAT.

Criar um cluster do AKS com um gateway da NAT gerenciado

Parâmetros de IP de saída

A tabela a seguir descreve cada parâmetro IP de saída e quando usá-lo:

Parâmetro Entrada Versão IP Quem gerencia os IPs públicos
--nat-gateway-managed-outbound-ip-count Valor no intervalo de [1, 16]. Número desejado de IPv4s de saída para conexão de saída do gateway da NAT. IPv4 Azure
--nat-gateway-managed-outbound-ipv6-count Valor no intervalo de [1, 16]. Número desejado de IPv6s de saída para conexão de saída do gateway da NAT. IPv6 Azure
--nat-gateway-outbound-ips IDs de recursos IPs públicos separados por vírgula para conexão de saída do gateway NAT. IPv4 ou IPv6 Cliente
--nat-gateway-outbound-ip-prefixes IDs de recursos de prefixos IPs separadas por vírgulas para conexão de saída do gateway da NAT. IPv4 ou IPv6 Cliente

Criar um cluster do AKS com um gateway da NAT StandardV2 gerenciado (managedNATGatewayV2)

Importante

As funcionalidades em versão preliminar do AKS estão disponíveis de forma optativa e por autoatendimento. As versões prévias são fornecidas “no estado em que se encontram” e “conforme disponíveis” e são excluídas dos contratos de nível de serviço e da garantia limitada. As versões prévias do AKS são parcialmente cobertas pelo suporte ao cliente em uma base de melhor esforço. Dessa forma, esses recursos não são destinados ao uso em produção. Para obter mais informações, consulte os seguintes artigos:

  • Crie um cluster do AKS com um gateway NAT StandardV2 gerenciado usando o comando az aks create com os 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 e --nat-gateway-idle-timeout.
  • Ao configurar IPs de saída para um managedNATgatewayV2, use uma das abordagens a seguir. Você não pode usar ambos os IPs de saída gerenciados pelo Azure e os definidos pelo cliente.
    • IPs gerenciados pelo Azure: Use --nat-gateway-managed-ip-outbound-count e --nat-gateway-managed-outbound-ipv6-count para que o Azure aloque e gerencie automaticamente os IPs públicos de saída para você.
    • IPs definidos pelo cliente: use --nat-gateway-outbound-ips e --nat-gateway-outbound-ip-prefixes para trazer seus próprios endereços IP pré-provisionados ou prefixos, permitindo ter total controle dos endereços específicos usados para o tráfego de saída. O Gateway NAT StandardV2 requer o uso de novos IPs públicos StandardV2. Os IPs públicos existentes da SKU Standard não funcionam com o gateway NAT StandardV2.

Instalar a extensão aks-preview CLI do Azure

O tipo de saída managedNATGatewayV2 está no momento em versão preliminar. Para usar esse tipo de saída, instale a extensão do CLI do Azure aks-preview e registre o sinalizador de recurso ManagedNATGatewayV2Preview.

Instale ou atualize a extensão de visualização CLI do Azure usando o comando az extension add ou az extension update. A versão mínima da extensão da CLI do aks-preview Azure é 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

Registrar o sinalizador de recurso ManagedNATGatewayV2Preview

  1. Registre o sinalizador de recurso ManagedNATGatewayV2Preview usando o comando az feature register.

    az feature register --namespace "Microsoft.ContainerService" --name "ManagedNATGatewayV2Preview"
    
  2. Verifique o registro bem-sucedido usando o az feature show comando. Leva alguns minutos para que o registro seja concluído.

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

    Depois que o recurso mostrar Registered, atualize o registro do provedor de recursos Microsoft.ContainerService usando o comando az provider register.

Criar um cluster do AKS com um gateway NAT StandardV2 gerenciado

Os comandos a seguir criam o grupo de recursos necessário, o IP público e os recursos de prefixo IP públicos a serem anexados ao gateway NAT e o cluster do AKS com um gateway NAT StandardV2 gerenciado.

  1. Crie um grupo de recursos usando o 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. Crie um endereço IP público IPv4 com redundância de zona e um prefixo IP público usando o az network public-ip create comando. Armazene $MY_IP e $MY_IP_PREFIX e use-os como IPs de saída para o gateway de NAT StandardV2 gerenciado.

    # 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. Crie o cluster do AKS e faça referência ao endereço IP público ($MY_IP_ID) e ao prefixo de IP público ($MY_IP_PREFIX_ID) usando o comando az aks create com os parâmetros --outbound-type managedNATGatewayV2, --nat-gateway-outbound-ips e --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
    

Atualize os IPs de saída, os prefixos de IP de saída, a contagem de IP de saída gerenciada ou o tempo limite ocioso usando o comando az aks update com o parâmetro --nat-gateway-outbound-ips, --nat-gateway-outbound-ip-prefixes, --nat-gateway-managed-outbound-count, --nat-gateway-managed-outbound-ipv6-count ou --nat-gateway-idle-timeout. Não é possível atualizar o managedNATGatewayV2 para alternar entre endereços IP de saída definidos pelo cliente e gerenciados após a criação. A configuração de IP de saída é determinada quando o gateway NAT StandardV2 é inicialmente criado e permanece imutável.

Criar um cluster do AKS com um gateway da NAT Standard gerenciado (managedNATGateway)

  • Crie um cluster AKS com um gateway NAT Standard 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 nat opere fora da zona de disponibilidade específica, especifique a zona usando --zones.
  • Você não pode usar um recurso de gateway de NAT gerenciado em várias zonas de disponibilidade. Para conectividade de saída com redundância de zona, use managedNATgatewayV2.
  • Se você não especificar uma zona ao criar um gateway NAT gerenciado, o gateway nat será implantado em nenhuma zona por padrão. Quando o gateway NAT está sem 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.

Criar um cluster AKS com um userAssignedNatGateway

Essa configuração requer a rede bring-your-own (via CNI do Azure) e que o Gateway da NAT seja pré-configurado na sub-rede. Tanto gateways da NAT Padrão quanto Padrão V2 são suportados para este outbound-type. Os comandos a seguir criam os recursos necessários para implantar um recurso de gateway NAT StandardV2 para o cluster do AKS.

  1. Crie um grupo de recursos usando o 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. Crie uma identidade gerenciada para permissões de rede e armazene a ID $IDENTITY_ID para 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)
    

    Exemplo de saída:

    /xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/myResourceGroupxxx/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myNatClusterIdxxx
    
  3. Crie um IP público StandardV2 para o gateway NAT usando o az network public-ip create comando. Um gateway NAT StandardV2 requer um endereço IP público 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. Crie o gateway NAT StandardV2 usando o 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 garantir a redundância de zona, implante um recurso de gateway NAT StandardV2, que se estende por várias zonas de disponibilidade em uma região. Essa configuração garante a conectividade de saída contínua mesmo se uma única zona falhar. Para obter mais detalhes sobre o gateway NAT StandardV2 e seus benefícios, consulte o Gateway NAT StandardV2. Em comparação, um recurso de gateway nat padrão fornece resiliência somente dentro da zona de disponibilidade na qual você o implanta.

  5. Criar uma rede virtual usando o 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. Crie uma sub-rede na rede virtual com o Gateway da NAT e armazene a ID em $SUBNET_ID para 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. Crie um cluster do AKS usando a sub-rede com o Gateway da NAT e a identidade gerenciada usando o 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
    

Considerações sobre produção

Quando você usa o gateway NAT gerenciado em produção, planeje o comportamento de tráfego de saída, o acesso ao servidor de API e a resiliência da carga de trabalho.

  • Use o AKS Automatic quando quiser a configuração padrão recomendada, pronta para produção, para a maioria das cargas de trabalho do AKS.
  • Use o gateway NAT gerenciado no AKS Standard quando quiser conectividade de saída gerenciada pelo AKS sem trazer seu próprio gateway NAT.
  • Use um cluster privado ou uma integração de VNet do Servidor de API quando quiser reduzir a exposição do tráfego do servidor de API.
  • Examine os requisitos de IP de saída antes de entrar em ação.
  • Se suas cargas de trabalho dependerem de endereços de saída fixos, valide se o gateway NAT gerenciado atende a esses requisitos antes da implantação.
  • Se você precisar gerenciar o NAT independentemente do AKS, use um gateway NAT atribuído pelo usuário.

Desabilitar OutboundNAT para Windows

Windows OutboundNAT pode causar determinados problemas de conexão e comunicação com os 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.

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

Pré-requisitos e limitações

  • Você precisa de um cluster AKS existente com v1.26 ou posterior. Se você estiver usando o Kubernetes versão 1.25 ou anterior, atualize a configuração de implantação.
  • Você não pode definir o tipo de saída do cluster como LoadBalancer. Você pode definir como Gateway da NAT ou UDR:
    • Gateway nat: o Gateway nat lida automaticamente com conexões NAT e é mais poderoso do que Standard Load Balancer. Você pode incorrer em encargos extras usando essa opção.
    • UDR (UserDefinedRouting): tenha em mente as limitações de porta ao configurar as regras de roteamento.
    • Para migrar de um balanceador de carga para um gateway NAT, você pode adicionar um gateway NAT à VNet ou executar az aks upgrade para atualizar o tipo de tráfego de saída.

Observação

O UserDefinedRouting tem as seguintes limitações:

  • O SNAT do Load Balancer (deve usar o OutboundNAT padrão) dispõe de 64 portas no IP do host.
  • O SNAT por Firewall do Azure (desabilitar OutboundNAT) tem 2.496 portas por IP público.
  • SNAT by NAT Gateway (desabilitar OutboundNAT) tem 64.512 portas por IP público.
  • Se o intervalo de portas Firewall do Azure não for suficiente para seu aplicativo, você precisará usar o Gateway de NAT.
  • Firewall do Azure não realiza SNAT com regras de rede quando o endereço IP de destino está no intervalo de endereços IP privado conforme IANA RFC 1918 ou espaço de endereço compartilhado conforme IANA RFC 6598.

Desabilitar manualmente o OutboundNAT para Windows

  • Desabilite manualmente o OutboundNAT para Windows ao criar novos pools de agentes 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.

    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
    

    Exemplo de saída:

    {
      "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 obter mais informações sobre Gateway da NAT do Azure e AKS Automatic, consulte os seguintes artigos: