Configurar um gateway NAT para endereço IP estático para 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 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 etapas para configurar um grupo de contêineres em uma rede virtual integrada com um gateway NAT (Network Address Translation). Ao configurar um gateway NAT para SNAT um intervalo de endereços de sub-rede delegado às Instâncias de Contêiner do Azure (ACI), você pode identificar o tráfego de saída de seus grupos de contêineres. O tráfego de saída do grupo de contêineres usará o endereço IP público do gateway NAT. Um único gateway NAT pode ser usado por vários grupos de contêineres implantados na sub-rede da rede virtual delegada à ACI.

Neste artigo, você usa a CLI do Azure para criar os recursos para este cenário:

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

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

Nota

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

Se não tiver uma subscrição do Azure, crie uma conta gratuita do Azure antes de começar.

Pré-requisitos

  • Use o ambiente Bash no Azure Cloud Shell. Para obter mais informações, consulte Guia de início rápido para Bash no Azure Cloud Shell.

  • Se preferir executar comandos de referência da CLI localmente, instale a CLI do Azure. Se estiver a utilizar o Windows ou macOS, considere executar a CLI do Azure num contentor Docker. Para obter mais informações, consulte Como executar a CLI do Azure em um contêiner do Docker.

    • Se estiver a utilizar uma instalação local, inicie sessão no CLI do Azure ao utilizar o comando az login. Para concluir o processo de autenticação, siga os passos apresentados no seu terminal. Para outras opções de entrada, consulte Entrar com a CLI do Azure.

    • Quando solicitado, instale a extensão da CLI do Azure na primeira utilização. Para obter mais informações sobre as extensões, veja Utilizar extensões com o CLI do Azure.

    • Execute o comando az version para localizar a versão e as bibliotecas dependentes instaladas. Para atualizar para a versão mais recente, execute o comando az upgrade.

Iniciar o Azure Cloud Shell

O Azure Cloud Shell é um shell interativo gratuito que pode utilizar para executar os passos neste artigo. Tem as ferramentas comuns do Azure pré-instaladas e configuradas para utilização com a sua conta.

Para abrir o Cloud Shell, basta selecionar Experimentar no canto superior direito de um bloco de código. Também pode iniciar o Cloud Shell num separador do browser separado ao aceder a https://shell.azure.com.

Quando o Cloud Shell abrir, verifique se o Bash está selecionado para o seu 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-o no Cloud Shell e pressione Enter para executá-lo.

Iniciar sessão no Azure

O Cloud Shell é autenticado automaticamente na conta inicial com a qual entrou conectado. Use o script a seguir para entrar usando uma assinatura diferente, substituindo <Subscription ID> por sua ID de Assinatura do Azure. Se não tiver uma subscrição do Azure, crie uma conta gratuita do Azure antes de começar.

subscription="<subscriptionId>" # add subscription here

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

Para obter mais informações, consulte definir assinatura ativa ou fazer login interativamente

Nota

Para baixar o script completo, vá para o script completo.

Introdução

Este tutorial faz uso de uma variável aleatória. Se você estiver usando um grupo de recursos existente, modifique o valor dessa variável apropriadamente.

resourceGroup=resourceGroup$RANDOM

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

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

Implantar ACI em uma rede virtual

Em um caso típico, talvez você já tenha 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 às Instâncias de Contêiner do Azure.

O grupo de contêineres executa um pequeno aplicativo Web a partir da aci-helloworld imagem. Como mostrado em outros artigos da documentação, esta imagem empacota um pequeno aplicativo Web escrito em Node.js que serve 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

Nota

Ajuste o valor de para o espaço de --subnet address-prefix endereço IP que você precisa em sua sub-rede. A menor sub-rede suportada é /29, que fornece oito endereços IP. Alguns >endereços IP são reservados para uso pelo Azure, sobre os quais você pode ler mais aqui.

Crie um endereço IP público

Nas seções a seguir, use a CLI do Azure para implantar um gateway NAT do Azure na rede virtual. Para obter plano de fundo, consulte Guia de início rápido: criar um gateway 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 NAT. Este será utilizado para aceder à Internet. Você receberá um aviso sobre uma próxima alteração de quebra em que os endereços IP SKU padrão serão reconhecidos por zona de disponibilidade por padrão. Você pode saber 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 NAT em uma rede virtual

Use o seguinte az network nat gateway create para criar um gateway NAT que usa o IP público que você criou 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 para a sub-rede de origem

Vamos configurar a sub-rede aci-subnet de origem para usar um recurso de gateway NAT específico myNATgateway com az network vnet subnet update. Este comando ativará 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 appcontainer acesso de entrada à execução na rede virtual navegando até o endereço IP público do firewall. Anteriormente, você armazenava o endereço IP público na variável $NG_PUBLIC_IP

Implante o seguinte contêiner de exemplo na rede virtual. Quando é executado, ele envia uma única solicitação HTTP para http://checkip.dyndns.orgo , 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 endereço IP público do firewall 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

Visualize os logs de contêiner para confirmar que o endereço IP é o mesmo que o 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

Clean up resources (Limpar recursos)

Quando não for mais necessário, você pode usar az group delete para remover o grupo de recursos e todos os recursos relacionados da seguinte maneira. O parâmetro --no-wait devolve o controlo à linha de comandos, sem aguardar a conclusão da operação. O parâmetro --yes confirma que pretende eliminar os recursos sem uma linha de comandos adicional para fazê-lo.

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

Próximos passos

Neste artigo, você configura grupos de contêineres em uma rede virtual atrás de um gateway NAT do Azure. Usando essa configuração, você configura uma única saída de endereço IP estático dos grupos de contêineres das Instâncias de Contêiner do Azure.

Para obter assistência na solução de problemas, consulte Solucionar problemas de conectividade NAT da Rede Virtual do Azure.