Crie um gateway NAT gerido ou atribuído pelo utilizador para o seu cluster Azure Kubernetes Service (AKS)

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

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

No AKS Standard, pode criar ou configurar um gateway NAT gerido quando quiser conectividade de saída gerida por AKS para o seu cluster. Para cenários de rede bring-your-own (BYO), utilize um gateway NAT atribuído pelo utilizador.

Embora possa encaminhar o tráfego de saída através de um Balanceador de Carga do Azure, existem limitações quanto ao número de fluxos de tráfego de saída que pode ter. O Azure NAT Gateway suporta 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 suportam o gateway NAT: managedNATGatewayV2 (Pré-visualização), managedNATGateway e userAssignedNATGateway.

Este artigo mostra-lhe como criar um cluster AKS com gateway NAT gerido e gateway NAT atribuído pelo utilizador para tráfego de saída. Também mostra como desativar o OutboundNAT para Windows.

Importante

O tipo de saída managedNATGatewayV2 está atualmente em pré-visualização. Consulte os Termos Suplementares de Utilização para Microsoft Azure Prévias para termos legais que se aplicam a funcionalidades Azure que estão em beta, pré-visualização ou ainda não lançadas em disponibilidade geral.

Pré-requisitos

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

  • Certifica-te de que estás a usar a versão mais recente do CLI do Azure.
  • Certifica-te de que estás a usar a versão 1.20.x do Kubernetes ou posterior.
  • O gateway NAT gerido não é compatível com redes virtuais personalizadas.

Importante

Em clusters não privados, o tráfego do cluster de servidores API é encaminhado e processado através do tipo de saída do cluster. 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.

Gateway NAT gerido no AKS

O AKS Automatic utiliza o gateway NAT gerido como parte da sua configuração predefinida, pronta para produção. Use esta secção se estiver a trabalhar com o AKS Standard ou se precisar de perceber como se comporta um gateway NAT gerido num cluster AKS.

O gateway NAT gerido é a opção de saída gerida pelo AKS. O AKS cria e gere o gateway NAT para fornecer conectividade de saída aos nós do seu cluster.

Utilize gateway NAT gerido quando pretender:

  • Conectividade de saída gerida por AKS com menos sobrecarga operacional.
  • Um caminho de saída predefinido adequado para produção.
  • Gestão de saída mais simples do que uma implementação de NAT gateway gerida pelo cliente.
  • Um modelo de rede AKS padrão sem utilizar o seu próprio recurso de gateway NAT.

Criar um cluster AKS com um gateway NAT gerenciado

Parâmetros de IP de saída

A tabela seguinte descreve cada parâmetro de IP de saída e quando utilizá-lo:

Parâmetro Entrada Versão do IP Quem gere as IPs públicas
--nat-gateway-managed-outbound-ip-count Valor dentro do intervalo de [1, 16]. Número desejado de IPv4s de saída para a ligação de saída do gateway NAT. IPv4 Azure
--nat-gateway-managed-outbound-ipv6-count Valor dentro do intervalo de [1, 16]. Número desejado de IPv6s para a conexão de saída do gateway NAT. IPv6 Azure
--nat-gateway-outbound-ips IDs de recursos de IP público separados por vírgulas para a ligação de saída do NAT gateway. IPv4 ou IPv6 Cliente
--nat-gateway-outbound-ip-prefixes IDs de recurso de prefixo de IP público, separados por vírgulas, para ligação de saída do gateway NAT. IPv4 ou IPv6 Cliente

Crie um cluster AKS com um gateway NAT StandardV2 gerido (managedNATGatewayV2)

Importante

Os recursos de pré-visualização do AKS estão disponíveis numa base de autosserviço e adesão voluntária. As visualizações prévias são fornecidas "como estão" e "conforme disponíveis" e são excluídas dos contratos de nível de serviço e da garantia limitada. As versões de teste do AKS são parcialmente cobertas pelo suporte ao cliente numa base de melhor esforço. Assim sendo, estas funcionalidades não se destinam ao uso em produção. Para obter mais informações, consulte os seguintes artigos de suporte:

  • Crie um cluster AKS com um gateway NAT StandardV2 gerido usando os parâmetros az aks create, --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 no comando.
  • Quando configura IPs de saída para um managedNATgatewayV2, use uma das seguintes abordagens. Não podes usar tanto IPs de saída geridos pelo Azure como definidos pelo cliente.
    • IPs geridos pelo Azure: Use --nat-gateway-managed-ip-outbound-count e --nat-gateway-managed-outbound-ipv6-count faça com que o Azure aloque e gere automaticamente os IPs públicos de saída em seu nome.
    • IPs definidos pelo cliente: Utilize --nat-gateway-outbound-ips e --nat-gateway-outbound-ip-prefixes para utilizar os seus próprios endereços IP públicos ou prefixos de IP público pré-provisionados, o que lhe dá controlo total sobre os endereços específicos utilizados para o tráfego de saída. O Gateway NAT StandardV2 requer a utilização de novos IPs públicos StandardV2. Os IPs públicos Standard SKU existentes não funcionam com o gateway NAT StandardV2.

Instala a extensão aks-preview CLI do Azure

O tipo managedNATGatewayV2 de saída está atualmente em versão preliminar. Para usar este tipo de saída, instale a extensão da aks-preview CLI do Azure e registe o sinalizador de funcionalidade ManagedNATGatewayV2Preview.

Instale ou atualize a extensão CLI do Azure preview 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

Registar o sinalizador de funcionalidade ManagedNATGatewayV2Preview

  1. Registe o sinalizador de funcionalidade ManagedNATGatewayV2Preview com 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. O registo demora alguns minutos a ser concluído.

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

    Quando a funcionalidade mostrar Registered, atualize o registo do fornecedor de recursos Microsoft.ContainerService usando o comando az provider register.

Crie um cluster AKS com um gateway NAT StandardV2 gerido

Os seguintes comandos criam o grupo de recursos necessário, o IP público e os recursos de prefixo IP público para serem ligados ao gateway NAT, e o cluster AKS com um gateway NAT StandardV2 gerido.

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

    # 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 IPv4 público redundante à zona e um prefixo de IP público, usando o comando az network public-ip create. Armazenar $MY_IP e $MY_IP_PREFIX para usar como IPs de saída para o gateway NAT gerido 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. Crie o cluster AKS e referencie o endereço IP público ($MY_IP_ID) e o prefixo de IP público ($MY_IP_PREFIX_ID) utilizando 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, prefixos de IPs de saída, contagem de IPs de saída geridos ou o timeout de inatividade, 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. A managedNATGatewayV2 não pode ser atualizado para alternar entre endereços IP de saída definidos pelo cliente e geridos após a criação. A configuração do IP de saída é determinada quando o gateway NAT StandardV2 é inicialmente criado e permanece imutável.

Crie um cluster AKS com um gateway NAT Standard gerido (managedNATGateway)

  • Crie um cluster AKS com um gateway NAT Standard gerido, utilizando o comando az aks create com os parâmetros --outbound-type managedNATGateway, --nat-gateway-managed-outbound-ip-count e --nat-gateway-idle-timeout. Se quiser que o gateway NAT opere fora de uma zona de disponibilidade específica, especifique a zona usando --zones.
  • Não pode usar um recurso de gateway NAT gerido em múltiplas zonas de disponibilidade. Para conectividade de saída redundante por zona, considere usar managedNATgatewayV2.
  • Se não especificar uma zona ao criar um gateway NAT gerido, o gateway NAT é implementado em nenhuma zona por predefinição. Quando o gateway NAT não está em nenhuma zona, o Azure coloca o recurso numa zona para si. Para 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

Esta configuração requer rede própria (via Azure CNI) e que um gateway NAT esteja preconfigurado na sub-rede. Tanto gateways NAT Standard como StandardV2 são suportados para isto outbound-type. Os comandos seguintes criam os recursos necessários para implementar um recurso de gateway NAT StandardV2 para o seu cluster AKS.

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

    # 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 gerida para permissões de rede e armazene o 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 das zonas, implemente um recurso de gateway NAT StandardV2, que se estende por várias zonas de disponibilidade numa região. Esta configuração garante a continuação da conectividade de saída mesmo que uma única zona falhe. Para mais detalhes sobre o gateway NAT StandardV2 e os seus benefícios, consulte Gateway NAT StandardV2. Em comparação, um recurso de gateway NAT Standard fornece resiliência apenas dentro da zona de disponibilidade onde é implementado.

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

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

    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 a produção

Quando usar um gateway NAT gerido em produção, planeie o comportamento do tráfego de saída, o acesso a servidores API e a resiliência da carga de trabalho.

  • Usa o AKS Automático quando quiseres o padrão recomendado para produção para a maioria das cargas de trabalho do AKS.
  • Usa gateway NAT gerido no AKS Standard quando quiseres conectividade de saída gerida por AKS sem trazeres o teu próprio gateway NAT.
  • Use um cluster privado ou uma integração VNet de API Server quando quiser reduzir a exposição ao tráfego do servidor API.
  • Revise os requisitos de IP de saída antes de lançar.
  • Se as suas cargas de trabalho dependem de endereços de saída fixos, valide que o gateway NAT gerido cumpre esses requisitos antes da implementação.
  • Se precisares de gerir o NAT independentemente do AKS, usa um gateway NAT atribuído pelo utilizador.

Desativar OutboundNAT para Windows

O Windows OutboundNAT pode causar certos problemas de ligação e comunicação com os teus 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 seu pod para o IP anfitrião do nó Windows, o que pode causar uma ligação instável ao serviço externo devido a um problema de esgotamento de portas.

O Windows ativa o OutboundNAT por defeito. Agora pode desativar manualmente o OutboundNAT ao criar novos pools de agentes Windows.

Pré-requisitos e limitações

  • Precisas de um cluster AKS existente com v1.26 ou posterior. Se estiveres a usar Kubernetes versão 1.25 ou anterior, atualiza a tua configuração de implementação.
  • Não podes definir o tipo de saída do cluster para Balanceador de Carga. Você pode defini-lo como Gateway NAT ou UDR:
    • NAT Gateway: O NAT Gateway gere automaticamente as ligações NAT e é mais potente do que o Balanceador de Carga Standard. Pode incorrer em custos adicionais ao utilizar esta opção.
    • UDR (UserDefinedRouting): Você deve ter em mente as limitações de porta ao configurar regras de roteamento.
    • Para mudar de um balanceador de carga para um NAT Gateway, pode adicionar um gateway NAT ao VNet ou executar az aks upgrade para atualizar o tipo de saída.

Nota

UserDefinedRouting tem as seguintes limitações:

  • O SNAT do Balanceador de Carga (deve usar o Outbound NAT predefinido) tem 64 portas no IP do anfitrião.
  • O SNAT do Azure Firewall (desativar o OutboundNAT) tem 2.496 portas por IP público.
  • O SNAT pelo NAT Gateway (com o OutboundNAT desativado) tem 64 512 portas por IP público.
  • Se o intervalo de portas do Azure Firewall não for suficiente para a sua aplicação, precisa de usar o NAT Gateway.
  • Azure Firewall não faz SNAT com as regras de rede quando o endereço IP de destino está num intervalo de endereços IP privados conforme IANA RFC 1918 ou espaço de endereçamento partilhado conforme IANA RFC 6598.

Desativar manualmente o OutboundNAT para Windows

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

    Nota

    Você pode usar um cluster AKS existente, mas talvez seja necessário atualizar o tipo de saída de conexão e adicionar um pool de nós 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
    

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