Expor um endereço IP estático para um grupo de contêineres

Este artigo mostra uma maneira de expor um endereço IP público estático para um grupo de contêineres usando um gateway de aplicativo do Azure. Siga estas etapas quando precisar de um ponto de entrada estático para um aplicativo em contêineres voltado para o externo que é executado Instâncias de Contêiner do Azure.

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

  • Uma Rede virtual do Azure
  • Um grupo de contêineres implantado na rede virtual que hospeda um pequeno aplicativo Web
  • Um gateway de aplicativo com um endereço IP de front-end público, um ouvinte para hospedar um site no gateway e uma rota para o grupo de contêineres de back-end

Desde que o gateway de aplicativo seja executado e o grupo de contêineres exponha um endereço IP privado estável na sub-rede delegada da rede, o grupo de contêineres ficarás acessível nesse endereço IP público.

Observação

O Gateway de Aplicativo do Azure dá suporte aos protocolos HTTP, HTTPS, HTTP/2 e WebSocket.

O Azure cobra por um gateway de aplicativo com base na quantidade de tempo que o gateway é provisionado e fica disponível, bem como na quantidade de dados que ele processa. Confira o preço.

Criar rede virtual

Em um caso típico, talvez você já tenha uma rede virtual do Azure. Se você não tiver uma, crie conforme mostrado com os comandos de exemplo a seguir. A rede virtual precisa de sub-redes separadas para o gateway de aplicativo e o grupo de contêineres.

Se precisar, crie um grupo de recursos do Azure. Por exemplo:

az group create --name myResourceGroup --location eastus

Crie uma rede virtual com o comando az network vnet create. Esse comando cria a sub-rede myAGSubnet na rede.

az network vnet create \
  --name myVNet \
  --resource-group myResourceGroup \
  --location eastus \
  --address-prefix 10.0.0.0/16 \
  --subnet-name myAGSubnet \
  --subnet-prefix 10.0.1.0/24

Use o comando az network vnet subnet create para criar uma sub-rede para o grupo de contêineres de back-end. Aqui, seu nome é myACISubnet.

az network vnet subnet create \
  --name myACISubnet \
  --resource-group myResourceGroup \
  --vnet-name myVNet   \
  --address-prefix 10.0.2.0/24

Use o comando az network public-ip create para criar um recurso de IP público estático. Em uma etapa posterior, esse endereço é configurado como o front-end do gateway de aplicativo.

az network public-ip create \
  --resource-group myResourceGroup \
  --name myAGPublicIPAddress \
  --allocation-method Static \
  --sku Standard

Criar grupo de contêineres

Execute o seguinte az container create para criar um grupo de contêineres na rede virtual configurada na etapa anterior.

O grupo é implantado na sub-rede myACISubnet e contém uma única instância chamada appcontainer que efetua o pull 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.

az container create \
  --name appcontainer \
  --resource-group myResourceGroup \
  --image mcr.microsoft.com/azuredocs/aci-helloworld \
  --vnet myVNet \
  --subnet myACISubnet

Quando implantado com êxito, o grupo de contêineres recebe um endereço IP privado na rede virtual. Por exemplo, execute o comando az container show a seguir para recuperar o endereço IP do grupo:

az container show \
  --name appcontainer --resource-group myResourceGroup \
  --query ipAddress.ip --output tsv

A saída é semelhante a: 10.0.2.4.

Para usar em uma etapa posterior, salve o endereço IP em uma variável de ambiente:

ACI_IP=$(az container show \
  --name appcontainer \
  --resource-group myResourceGroup \
  --query ipAddress.ip --output tsv)

Importante

Se o grupo de contêineres for interrompido, iniciado ou reiniciado, o IP privado do grupo de contêineres estará sujeito a alterações. Se isso acontecer, será necessário atualizar a configuração do gateway de aplicativo.

Criar um gateway de aplicativo

Crie um gateway de aplicativo na rede virtual, seguindo as etapas no guia de início rápido do gateway de aplicativo. O comando az network application-gateway createa seguir cria um gateway com um endereço IP de front-end público e uma rota para o grupo de contêineres de back-end. Consulte a documentação do Gateway de Aplicativo para obter detalhes sobre as configurações do gateway.

az network application-gateway create \
  --name myAppGateway \
  --location eastus \
  --resource-group myResourceGroup \
  --capacity 2 \
  --sku Standard_v2 \
  --http-settings-protocol http \
  --public-ip-address myAGPublicIPAddress \
  --vnet-name myVNet \
  --subnet myAGSubnet \
  --servers "$ACI_IP" \ 
  --priority 100

Pode levar até 15 minutos para que o Azure crie o gateway de aplicativo.

Testar o endereço IP público

Agora você pode testar o acesso ao aplicativo Web em execução no grupo de contêineres por trás do gateway de aplicativo.

Execute o comando az network public-ip show para recuperar o endereço IP público de front-end do gateway:

az network public-ip show \
--resource-group myresourcegroup \
--name myAGPublicIPAddress \
--query [ipAddress] \
--output tsv

A saída é um endereço IP público, semelhante a: 52.142.18.133.

Para exibir o aplicativo Web em execução quando configurado com êxito, navegue até o endereço IP público do gateway em seu navegador. O acesso com êxito é semelhante a:

Captura de tela de navegador mostrando aplicativo em execução em uma instância de contêiner do Azure

Próximas etapas

  • Consulte um modelo de início rápido para criar um grupo de contêineres com uma instância de contêiner do WordPress como um servidor de back-end atrás de um gateway de aplicativo.
  • Você também pode configurar um gateway de aplicativo com um certificado para terminação SSL. Consulte a visão geral e o tutorial.
  • Dependendo do seu cenário, considere o uso de outras soluções de balanceamento de carga do Azure com as Instâncias de Contêiner do Azure. Por exemplo, use o Gerenciador de Tráfego do Azure para distribuir o tráfego entre várias instâncias de contêiner e entre várias regiões. Veja esta postagem de blog.