Compartilhar via


Criar um gateway NAT gerenciado ou atribuído pelo usuário para seu cluster 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 saída de tráfego que você pode ter. Gateway da 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. Há três tipos de saída que dão suporte ao gateway NAT – managedNATGatewayV2 (versão prévia) managedNATGatewaye userAssignedNATGateway.

Em um modelo de gateway NAT gerenciado, o AKS gerencia o gateway NAT para fornecer conectividade de saída para os nós do seu cluster. O AKS dá suporte a duas opções de gateway NAT gerenciadas: a mais managedNATGatewayV2 recente e a original managedNATGateway. managedNATgatewayV2 usa o gateway NAT StandardV2, que é com redundância de zona por padrão, fornecendo conectividade de saída contínua mesmo se uma zona de disponibilidade falhar. Ao contrário do gateway NAT Padrão, você não precisa especificar uma zona, pois a redundância de zona é incorporada automaticamente. O gateway NAT StandardV2 também dá suporte a IPv6, maior taxa de transferência e logs de fluxo. Para obter mais detalhes, consulte o SKU do gateway NAT StandardV2.

Importante

O tipo de saída managedNATGatewayV2 está atualmente em PREVIEW. 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.

userAssignedNATGateway é um recurso de gateway NAT gerenciado pelo cliente que você configura de forma independente do AKS e é necessário ao usar uma rede virtual própria.

Este artigo mostra como criar um cluster AKS (Serviço de Kubernetes do Azure) 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 desabilitar o OutboundNAT no Windows.

Antes de começar

  • 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 superior.
  • O Gateway da 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 por meio do tipo de saída de clusters. 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.

Criar um cluster AKS com um managedNATgatewayV2

  • 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, você deve usar uma das seguintes abordagens — você não pode usar os IPs de saída Azure gerenciados e definidos pelo cliente:
    • Azure-managed IPs — use --nat-gateway-managed-ip-outbound-count e/ou --nat-gateway-managed-outbound-ipv6-count para que Azure aloque e gerencie automaticamente os IPs públicos de saída em seu nome.
    • IPs definidos pelo cliente – use --nat-gateway-outbound-ips e/ou --nat-gateway-outbound-ip-prefixes para trazer seus endereços IP pré-provisionados ou prefixos, dando a você controle total sobre os endereços específicos usados para o tráfego de saída. O Gateway da NAT Padrão V2 requer o uso de novos IPs Padrão V2. Os IPs públicos de SKU Padrão existentes não funcionam com o Gateway da NAT StandardV2.

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

managedNATGatewayV2 tipo de saída está atualmente em Versão Prévia, para usar esse tipo de saída, as etapas a seguir são necessárias para instalar a extensão aks-preview CLI do Azure e registrar o sinalizador de recurso ManagedNATGatewayV2Preview.

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:

  1. 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 CLI do Azure do aks-preview é 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
    
  2. Registrar o sinalizador de recurso ManagedNATGatewayV2Preview

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

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

    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.

    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.

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

    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"
    az group create --name $MY_RG --location "eastus2"
    
  4. 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.

    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 id \
        --output tsv)
    
    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)
    
  5. Crie o cluster do AKS e faça referência ao endereço IP público ($MY_IP_ID) e ao prefixo IP público ($MY_IP_PREFIX_ID).

    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 AKS com um managedNATgateway

  • Crie um cluster do AKS com um Gateway da NAT Padrão gerenciado usando o comando az aks create com --outbound-type managedNATGateway. parâmetros --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.

  • Um recurso de gateway de NAT gerenciado não pode ser utilizado em várias zonas de disponibilidade. Para conectividade de saída com redundância de zona, considere usar managedNATgatewayV2.

  • 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 em 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 da NAT não zonal.

Criar um cluster AKS com um userAssignedNatGateway

Essa configuração requer configuração própria de rede (via Azure CNI) e que o gateway NAT esteja preconfigurado 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.

    export RANDOM_SUFFIX=$(openssl rand -hex 3)
    export MY_RG="myResourceGroup$RANDOM_SUFFIX"
    az group create --name $MY_RG --location southcentralus
    
  2. Crie uma identidade gerenciada para permissões de rede e armazene a ID em $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)
    

    Resultados:

    /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, é recomendável implantar um recurso de gateway NAT StandardV2, que se estende por várias zonas de disponibilidade em uma região. Isso 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 ele é implantado.

  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
    

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, o Windows OutboundNAT utiliza portas para traduzir o IP do pod para o IP do host do nó Windows, o que pode resultar em uma conexão instável com o serviço externo devido ao esgotamento de portas.

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

Pré-requisitos

Limitações

  • Não é possível definir o tipo de saída do cluster como LoadBalancer. Você pode definir como Gateway da NAT ou UDR:
    • NAT Gateway: o Gateway nat pode lidar automaticamente com a conexão NAT e é mais poderoso do que 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:

  • SNAT com Balanceador de Carga (deve usar o OutboundNAT padrão) tem "64 portas no IP do host".
  • SNAT por Firewall do Azure (desativar OutboundNAT) tem 2496 portas por IP público.
  • O SNAT do Gateway da NAT tem 64.512 portas por IP público (é necessário desabilitar a OutboundNAT).
  • 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.

    O comando a seguir adiciona um pool de nós Windows a um cluster do AKS existente, desabilitando OutboundNAT.

      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
    

    Resultados:

    {
      "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"
    }
    

Próximas etapas

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