Compartilhar via


Configurar um gateway da NAT para um endereço IP estático para o tráfego de saída de um grupo de contêineres

A configuração de um grupo de contêineres com um endereço IP externo permite que os clientes externos usem o endereço IP para acessar um contêiner no grupo. Por exemplo, um navegador pode acessar um aplicativo Web em execução em um contêiner. No entanto, atualmente um grupo de contêineres usa um endereço IP diferente para o tráfego de saída. Esse endereço IP de saída não é exposto programaticamente, o que torna o monitoramento do grupo de contêineres e a configuração das regras de firewall do cliente mais complexos.

Este artigo fornece as etapas para configurar um grupo de contêineres em uma rede virtual integrada ao gateway da NAT (Conversão de Endereços de Rede). Configurando um gateway da NAT para SNAT de um intervalo de endereços de sub-rede delegado a ACI (Instâncias de Contêiner do Azure), você pode identificar o tráfego de saída dos seus grupos de contêineres. O tráfego de saída do grupo de contêineres usa o endereço IP público do gateway da NAT. Vários grupos de contêineres implantados na sub-rede da rede virtual podem usar um único gateway da NAT.

Neste artigo, a CLI do Azure é usada para criar os recursos para este cenário:

  • Grupos de contêineres implantados em uma sub-rede delegada na rede virtual
  • Um gateway da NAT implantado na rede com um endereço IP público estático

Em seguida, valide a saída dos grupos de contêineres de exemplo por meio do gateway da NAT.

Observação

O serviço ACI recomenda a integração com um gateway da NAT para cargas de trabalho em contêineres que tenham saída estática, mas não requisitos de entrada estáticos. Para arquitetura de ACI que oferece suporte à entrada e à saída estáticas, confira o seguinte tutorial: Usar o Firewall do Azure para entrada e saída.

Caso você não tenha uma assinatura do Azure, crie uma conta gratuita do Azure antes de começar.

Pré-requisitos

Iniciar o Azure Cloud Shell

O Azure Cloud Shell é um shell gratuito e interativo que poderá ser usado para executar as etapas deste artigo. Ele tem ferramentas do Azure instaladas e configuradas para usar com sua conta.

Para abrir o Cloud Shell, basta selecionar Experimentar no canto superior direito de um bloco de código. Você também pode iniciar o Cloud Shell em uma guia separada do navegador indo até https://shell.azure.com.

Quando o Cloud Shell abrir, verifique se o Bash está selecionado para o ambiente. As sessões subsequentes usarão a CLI do Azure em um ambiente Bash. Selecione Copiar para copiar os blocos de código, cole-os no Cloud Shell e pressione Enter para executá-los.

Entrar no Azure

O Cloud Shell é autenticado automaticamente na conta inicial usada para entrar. Use o seguinte script para entrar com outra assinatura, substituindo subscriptionId pela ID de sua assinatura do Azure.

Caso você não tenha uma assinatura do Azure, crie uma conta gratuita do Azure antes de começar.

subscription="subscriptionId" # Set Azure subscription ID here

az account set -s $subscription # ...or use 'az login'

Para saber mais, confira definir assinatura ativa ou fazer logon de forma interativa.

Observação

Para baixar o script completo, acesse script completo.

Introdução

Este tutorial usa uma variável aleatória. Se você usou um grupo de recursos que já existe, modifique o valor dessa variável adequadamente.

resourceGroup=resourceGroup$RANDOM

Grupo de recursos do Azure: se você ainda não tiver um grupo de recursos do Azure, crie um com o az group create. Modifique o valor do local conforme apropriado.

az group create --name $resourceGroup --location eastus

Implantar as Instâncias de Contêiner do Azure em uma rede virtual

Normalmente, já existe uma rede virtual do Azure na qual implantar um grupo de contêineres. Para fins de demonstração, os comandos a seguir criam uma rede virtual e uma sub-rede quando o grupo de contêineres é criado. A sub-rede é delegada para as Instâncias de Contêiner do Azure.

O grupo de contêineres executa um pequeno aplicativo Web da imagem aci-helloworld. Conforme mostrado em outros artigos da documentação, essa imagem empacota um pequeno aplicativo Web escrito em Node.js que atende a uma página HTML estática.

Crie o grupo de contêineres com o comando az container create:

az container create \
  --name appcontainer \
  --resource-group $resourceGroup \
  --image mcr.microsoft.com/azuredocs/aci-helloworld \
  --vnet aci-vnet \
  --vnet-address-prefix 10.0.0.0/16 \
  --subnet aci-subnet \
  --subnet-address-prefix 10.0.0.0/24

Observação

Ajuste o valor de --subnet address-prefix para o espaço de endereços IP que você precisa na sub-rede. A menor sub-rede com suporte é /29, que fornece oito endereços IP. Alguns >endereços IP são reservados para uso pelo Azure. Leia mais sobre isso aqui.

Criar um endereço IP público

Nas seções a seguir, use a CLI do Azure para implantar um gateway da NAT do Azure na rede virtual. Para obter mais informações, consulte Início Rápido: criar um gateway da NAT usando a CLI do Azure.

Primeiro, use az network vnet public-ip create para criar um endereço IP público para o gateway da NAT. O gateway usa esse IP público para acessar a internet. Você receberá um aviso sobre uma próxima alteração interruptiva em que os endereços IP do SKU Standard serão cientes da zona de disponibilidade por padrão. Saiba mais sobre o uso de zonas de disponibilidade e endereços IP públicos aqui.

az network public-ip create \
  --name myPublicIP \
  --resource-group $resourceGroup \
  --sku standard \
  --zone 1 \
  --allocation static

Armazene o endereço IP público em uma variável para uso durante a etapa de validação posteriormente neste script.

ngPublicIp="$(az network public-ip show \
  --name myPublicIP \
  --resource-group $resourceGroup \
  --query ipAddress --output tsv)"

Implantar um gateway da NAT em uma rede virtual

Use a instrução az network nat gateway create para criar um gateway da NAT que use o IP público criado na etapa anterior.

az network nat gateway create \
  --resource-group $resourceGroup \
  --name myNATgateway \
  --public-ip-addresses myPublicIP \
  --idle-timeout 10

Configurar o serviço NAT da sub-rede de origem

Vamos configurar a sub-rede de origem aci-subnet para usar um recurso de gateway da NAT específico myNATgateway, com az network vnet subnet update. Esse comando ativa o serviço NAT na sub-rede especificada.

az network vnet subnet update \
    --resource-group $resourceGroup  \
    --vnet-name aci-vnet \
    --name aci-subnet \
    --nat-gateway myNATgateway

Testar a saída de um grupo de contêineres

Teste o acesso de entrada no appcontainer em execução na rede virtual navegando até o IP do firewall. Anteriormente, você armazenou o IP público na variável $NG_PUBLIC_IP

Implante o contêiner de exemplo a seguir na rede virtual. Quando é executado, ele envia uma solicitação HTTP para http://checkip.dyndns.org, que exibe o endereço IP do remetente (o endereço IP de saída). Se a regra de aplicativo no firewall estiver configurada corretamente, o IP do firewall vai ser retornado.

az container create \
  --resource-group $resourceGroup \
  --name testegress \
  --image mcr.microsoft.com/azuredocs/aci-tutorial-sidecar \
  --command-line "curl -s http://checkip.dyndns.org" \
  --restart-policy OnFailure \
  --vnet aci-vnet \
  --subnet aci-subnet

Veja os logs de contêiner para confirmar se o endereço IP é igual ao endereço IP público que criamos na primeira etapa do tutorial.

az container logs \
  --resource-group $resourceGroup \
  --name testegress

A saída é semelhante a:

<html><head><title>Current IP Check</title></head><body>Current IP Address: 52.142.18.133</body></html>

Esse endereço IP deve corresponder ao endereço IP público criado na primeira etapa do tutorial.

echo $ngPublicIp

Limpar os recursos

Quando não for mais necessário, use az group delete para remover o grupo de recursos e todos os recursos relacionados, como demonstrado a seguir. O parâmetro --no-wait retorna o controle ao prompt sem aguardar a conclusão da operação. O parâmetro --yes confirma que você deseja excluir os recursos sem outro prompt para fazer isso.

az group delete --name $resourceGroup --yes --no-wait

Próximas etapas

Nesse artigo, você configurou grupos de contêineres em uma rede virtual por trás de um gateway da NAT do Azure. Ao usar essa configuração, você definiu uma saída de endereço IP estático único de grupos de contêineres de Instâncias de Contêiner do Azure.

Para obter ajuda na solução de problemas, consulte Solução de problemas de conectividade da NAT da Rede Virtual do Azure.