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
Use o ambiente Bash no Azure Cloud Shell. Para obter mais informações, confira Início Rápido para Bash no Azure Cloud Shell.
Se preferir executar os comandos de referência da CLI localmente, instale a CLI do Azure. Para execuções no Windows ou no macOS, considere executar a CLI do Azure em um contêiner do Docker. Para obter mais informações, confira Como executar a CLI do Azure em um contêiner do Docker.
Se estiver usando uma instalação local, entre com a CLI do Azure usando o comando az login. Para concluir o processo de autenticação, siga as etapas exibidas no terminal. Para ver outras opções de entrada, confira Conectar-se com a CLI do Azure.
Quando solicitado, instale a extensão da CLI do Azure no primeiro uso. Para obter mais informações sobre extensões, confira Usar extensões com a CLI do Azure.
Execute az version para localizar a versão e as bibliotecas dependentes que estão instaladas. Para fazer a atualização para a versão mais recente, execute az upgrade.
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 usando uma assinatura diferente, substituindo <Subscription ID>
pela ID da Assinatura do Azure. Caso você não tenha uma assinatura 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 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 existente, 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.