Configurar um IP para tráfego de entrada e de saída para 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 Firewall do Azure. Ao configurar a rota definida pelo usuário para o grupo de contêineres e as regras de firewall, você pode rotear e identificar o tráfego de e para o grupo de contêineres. A entrada e a saída do grupo de contêineres usam o IP do firewall. Vários grupos de contêineres implantados na sub-rede da rede virtual podem usar um único endereço IP de saída.
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 firewall do Azure implantado na rede com um IP estático
- Uma rota definida pelo usuário na sub-rede dos grupos de contêineres
- Uma regra NAT para a entrada de firewall e uma regra de aplicativo para a saída
Em seguida, valide a entrada e a saída dos grupos de contêineres de exemplo por meio do firewall.
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 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
Dica
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 do Azure.
Obtenha o endereço IP privado do grupo de contêineres executando o comando[az container show][az-container-show], que será usado em uma etapa posterior:
aciPrivateIp="$(az container show --name appcontainer \
--resource-group $resourceGroup \
--query ipAddress.ip --output tsv)"
Implantar o Firewall do Azure na rede
Nas seções a seguir, use a CLI do Azure para implantar um firewall do Azure na rede virtual. Para saber mais sobre isso, confira Tutorial: implantar e configurar o Firewall do Azure usando o portal do Azure.
Use o comando az network vnet subnet create para adicionar uma sub-rede chamada AzureFirewallSubnet para o firewall. O nome dessa sub-rede deve ser AzureFirewallSubnet.
az network vnet subnet create \
--name AzureFirewallSubnet \
--resource-group $resourceGroup \
--vnet-name aci-vnet \
--address-prefix 10.0.1.0/26
Use os comandos da CLI do Azure a seguir para criar um firewall na sub-rede.
Se ainda não estiver instalado, adicione a extensão de firewall à CLI do Azure usando o comando az extension add:
az extension add --name azure-firewall
Crie os recursos de firewall usando o comando az network firewall create:
az network firewall create \
--name myFirewall \
--resource-group $resourceGroup \
--location eastus
az network public-ip create \
--name fw-pip \
--resource-group $resourceGroup \
--location eastus \
--allocation-method static \
--sku standard
az network firewall ip-config create \
--firewall-name myFirewall \
--name FW-config \
--public-ip-address fw-pip \
--resource-group $resourceGroup \
--vnet-name aci-vnet
Atualize a configuração do firewall usando o comando az network firewall update:
az network firewall update \
--name myFirewall \
--resource-group $resourceGroup
Obtenha o endereço IP privado do firewall usando o comando az network firewall ip-config list. Esse endereço IP privado vai ser usado em um comando posterior.
fwPrivateIp="$(az network firewall ip-config list \
--resource-group $resourceGroup \
--firewall-name myFirewall \
--query "[].privateIpAddress" --output tsv)"
Obtenha o IP do firewall usando o comando az network public-ip show. Esse IP vai ser usado em um comando posterior.
fwPublicIp="$(az network public-ip show \
--name fw-pip \
--resource-group $resourceGroup \
--query ipAddress --output tsv)"
Determinar a rota definida pelo usuário na sub-rede das Instâncias de Contêiner do Azure
Para desviar o tráfego para o Firewall do Azure, determine uma rota definida pelo usuário na sub-rede da ACI. Para obter mais informações, confira Rotear o tráfego de rede.
Criar tabela de rotas
Execute o comando az network route-table create a seguir para criar a tabela de rotas. Crie a tabela de rotas na mesma região da rede virtual.
az network route-table create \
--name Firewall-rt-table \
--resource-group $resourceGroup \
--location eastus \
--disable-bgp-route-propagation true
Criar rota
Execute o comando az network-route-table route create para criar uma rota na tabela de rotas. Para rotear o tráfego para o firewall, defina o tipo do próximo salto como VirtualAppliance
e passe o endereço IP privado do firewall como o endereço do próximo salto.
az network route-table route create \
--resource-group $resourceGroup \
--name DG-Route \
--route-table-name Firewall-rt-table \
--address-prefix 0.0.0.0/0 \
--next-hop-type VirtualAppliance \
--next-hop-ip-address $fwPrivateIp
Associar a tabela de rotas à sub-rede das Instâncias de Contêiner do Azure
Execute o comando az network vnet subnet update para associar a tabela de rotas à sub-rede delegada para as Instâncias de Contêiner do Azure.
az network vnet subnet update \
--name aci-subnet \
--resource-group $resourceGroup \
--vnet-name aci-vnet \
--address-prefixes 10.0.0.0/24 \
--route-table Firewall-rt-table
Configurar regras no firewall
Por padrão, o Firewall do Azure nega (bloqueia) os tráfegos de entrada e de saída.
Configurar a regra NAT no firewall para a sub-rede das Instâncias de Contêiner do Azure
Crie uma regra NAT no firewall para converter e filtrar o tráfego de Internet de entrada para o contêiner de aplicativos que você iniciou anteriormente na rede. Para saber mais detalhes, confira Filtrar o tráfego da Internet de entrada com o DNAT do Firewall do Azure
Crie uma regra NAT e uma coleção usando o comando az network firewall nat-rule create:
az network firewall nat-rule create \
--firewall-name myFirewall \
--collection-name myNATCollection \
--action dnat \
--name myRule \
--protocols TCP \
--source-addresses '*' \
--destination-addresses $fwPublicIp \
--destination-ports 80 \
--resource-group $resourceGroup \
--translated-address $aciPrivateIp \
--translated-port 80 \
--priority 200
Adicione regras NAT conforme o necessário para filtrar o tráfego para outros endereços IP na sub-rede. Por exemplo, outros grupos de contêineres na sub-rede podem expor os endereços IP para o tráfego de entrada ou outros endereços IP internos podem ser atribuídos ao grupo de contêineres após uma reinicialização.
Criar regra de aplicativo de saída no firewall
Execute o comando az network firewall application-rule create a seguir para criar uma regra de saída no firewall. Essa regra de exemplo permite o acesso da sub-rede delegada às Instâncias de Contêiner do Azure para o FQDN checkip.dyndns.org
. O acesso HTTP ao site é usado em uma etapa posterior para confirmar o endereço IP de saída das Instâncias de Contêiner do Azure.
az network firewall application-rule create \
--collection-name myAppCollection \
--firewall-name myFirewall \
--name Allow-CheckIP \
--protocols Http=80 Https=443 \
--resource-group $resourceGroup \
--target-fqdns checkip.dyndns.org \
--source-addresses 10.0.0.0/24 \
--priority 200 \
--action Allow
Testar o acesso ao grupo de contêineres por meio do firewall
As seções a seguir verificam se a sub-rede delegada para Instâncias de Contêiner do Azure está configurada corretamente por trás do firewall do Azure. As etapas anteriores rotearam o tráfego de entrada na sub-rede e o tráfego de saída da sub-rede por meio do firewall.
Testar a entrada em 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 na variável $FW _PUBLIC_IP:
echo $fwPublicIp
A saída é semelhante a:
52.142.18.133
Se a regra NAT no firewall estiver configurada corretamente, você vai ver o seguinte ao inserir o IP do firewall em seu navegador:
Testar a saída de um grupo de contêineres
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 é o mesmo que o IP do firewall.
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>
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 firewall do Azure. Você configurou uma rota definida pelo usuário e as regras NAT e de aplicativo no firewall. Ao usar essa configuração, você configurou um endereço IP estático para a entrada e a saída de Instâncias de Contêiner do Azure.
Para obter mais informações sobre como gerenciar o tráfego e proteger os recursos do Azure, confira a documentação do Firewall do Azure.