Implementar instâncias de contentores numa rede virtual do Azure

O Azure Rede Virtual fornece redes privadas e seguras para os seus recursos do Azure e no local. Ao implementar grupos de contentores numa rede virtual do Azure, os contentores podem comunicar de forma segura com outros recursos na rede virtual.

Este artigo mostra como utilizar o comando az container create na CLI do Azure para implementar grupos de contentores numa nova rede virtual ou numa rede virtual existente.

Importante

Antes de implementar grupos de contentores em redes virtuais, sugerimos que verifique primeiro a limitação. Para cenários de rede e limitações, veja Cenários e recursos de rede virtual para Azure Container Instances.

Importante

A implementação de grupos de contentores numa rede virtual está geralmente disponível para contentores do Linux e do Windows, na maioria das regiões onde Azure Container Instances está disponível. Para obter detalhes, veja as regiões disponíveis.

Importante

Os perfis de rede foram descontinuados a partir da versão da 2021-07-01 API. Se estiver a utilizar esta ou uma versão mais recente, ignore quaisquer passos e ações relacionados com perfis de rede.

Os exemplos neste artigo são formatados para a shell do Bash. Se preferir outra shell, como o PowerShell ou a Linha de Comandos, ajuste os carateres de continuação da linha em conformidade.

Implementar numa nova rede virtual

Nota

Se estiver a utilizar o intervalo de IP /29 da sub-rede para ter apenas 3 endereços IP. recomendamos que vá sempre um intervalo acima (nunca abaixo). Por exemplo, utilize o intervalo de IP /28 da sub-rede para que possa ter, pelo menos, 1 ou mais memória intermédia IP por grupo de contentores. Ao fazê-lo, pode evitar contentores bloqueados, não conseguir iniciar, reiniciar ou mesmo não conseguir parar estados.

Para implementar numa nova rede virtual e fazer com que o Azure crie automaticamente os recursos de rede, especifique o seguinte quando executar az container create:

  • Nome da rede virtual
  • Prefixo de endereço de rede virtual no formato CIDR
  • Nome da sub-rede
  • Prefixo de endereço de sub-rede no formato CIDR

Os prefixos de endereços de rede virtual e sub-rede especificam os espaços de endereços da rede virtual e da sub-rede, respetivamente. Estes valores são representados na notação CIDR (Classless Inter-Domain Routing), por exemplo 10.0.0.0/16. Para obter mais informações sobre como trabalhar com sub-redes, veja Adicionar, alterar ou eliminar uma sub-rede de rede virtual.

Depois de implementar o seu primeiro grupo de contentores com este método, pode implementar na mesma sub-rede ao especificar os nomes da rede virtual e da sub-rede ou o perfil de rede que o Azure cria automaticamente. Uma vez que o Azure delega a sub-rede para Azure Container Instances, pode implementar grupos de contentores na sub-rede.

Exemplo

O seguinte comando az container create especifica as definições para uma nova rede virtual e sub-rede. Indique o nome de um grupo de recursos que foi criado numa região onde estão disponíveis implementações de grupos de contentores numa rede virtual. Este comando implementa o contentor público microsoft aci-helloworld que executa um pequeno servidor Web Node.js que serve uma página Web estática. Na secção seguinte, irá implementar um segundo grupo de contentores na mesma sub-rede e testar a comunicação entre as duas instâncias de contentor.

az container create \
  --name appcontainer \
  --resource-group myResourceGroup \
  --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

Quando implementa numa nova rede virtual com este método, a implementação pode demorar alguns minutos enquanto os recursos de rede são criados. Após a implementação inicial, as implementações adicionais do grupo de contentores na mesma sub-rede são concluídas mais rapidamente.

Implementar numa rede virtual existente

Para implementar um grupo de contentores numa rede virtual existente:

  1. Crie uma sub-rede na sua rede virtual existente, utilize uma sub-rede existente na qual um grupo de contentores já esteja implementado ou utilize uma sub-rede existente esvaziada de todos os outros recursos e configuração.
  2. Implemente um grupo de contentores com az container create e especifique um dos seguintes:
    • Nome da rede virtual e nome da sub-rede
    • ID de recurso de rede virtual e ID de recurso da sub-rede, que permite utilizar uma rede virtual de um grupo de recursos diferente
    • Nome ou ID do perfil de rede, que pode obter com az network profile list

Exemplo

O exemplo seguinte implementa um segundo grupo de contentores na mesma sub-rede criada anteriormente e verifica a comunicação entre as duas instâncias de contentor.

Primeiro, obtenha o endereço IP do primeiro grupo de contentores que implementou, o appcontainer:

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

O resultado apresenta o endereço IP do grupo de contentores na sub-rede privada. Por exemplo:

10.0.0.4

Agora, defina CONTAINER_GROUP_IP para o IP que obteve com o az container show comando e execute o seguinte az container create comando. Este segundo contentor, o commchecker, executa uma imagem baseada em Alpine Linux e é executado wget no endereço IP da sub-rede privada do primeiro grupo de contentores.

CONTAINER_GROUP_IP=<container-group-IP-address>

az container create \
  --resource-group myResourceGroup \
  --name commchecker \
  --image alpine:3.5 \
  --command-line "wget $CONTAINER_GROUP_IP" \
  --restart-policy never \
  --vnet aci-vnet \
  --subnet aci-subnet

Após a conclusão desta segunda implementação de contentor, solicite os registos para que possa ver a saída do wget comando que executou:

az container logs --resource-group myResourceGroup --name commchecker

Se o segundo contentor comunicar com êxito com o primeiro, o resultado é semelhante a:

Connecting to 10.0.0.4 (10.0.0.4:80)
index.html           100% |*******************************|  1663   0:00:00 ETA

O resultado do registo deve mostrar que wget conseguiu ligar e transferir o ficheiro de índice do primeiro contentor com o respetivo endereço IP privado na sub-rede local. O tráfego de rede entre os dois grupos de contentores permaneceu na rede virtual.

Exemplo - YAML

Também pode implementar um grupo de contentores numa rede virtual existente com um ficheiro YAML, um modelo de Resource Manager ou outro método programático, como com o SDK python.

Por exemplo, ao utilizar um ficheiro YAML, pode implementar numa rede virtual com uma sub-rede delegada para Azure Container Instances. Especifique as seguintes propriedades:

  • ipAddress: as definições de endereço IP privado para o grupo de contentores.
    • ports: as portas a abrir, se existirem.
    • protocol: o protocolo (TCP ou UDP) da porta aberta.
  • subnetIds: os IDs de recursos das sub-redes a implementar em
    • id: o ID de recurso da sub-rede
    • name: o nome da sub-rede

Este YAML cria um grupo de contentores com o nome appcontaineryaml na sua rede virtual.

apiVersion: '2021-07-01'
location: westus
name: appcontaineryaml
properties:
  containers:
  - name: appcontaineryaml
    properties:
      image: mcr.microsoft.com/azuredocs/aci-helloworld
      ports:
      - port: 80
        protocol: TCP
      resources:
        requests:
          cpu: 1.0
          memoryInGB: 1.5
  ipAddress:
    type: Private
    ports:
    - protocol: tcp
      port: '80'
  osType: Linux
  restartPolicy: Always
  subnetIds:
    - id: <subnet-id>
      name: default
tags: null
type: Microsoft.ContainerInstance/containerGroups

Implemente o grupo de contentores com o comando az container create , especificando o nome do ficheiro YAML para o --file parâmetro :

az container create --resource-group myResourceGroup \
  --file vnet-deploy-aci.yaml

Assim que a implementação estiver concluída, execute o comando az container show para apresentar o respetivo estado. Resultado do exemplo:

Name              ResourceGroup    Status    Image                                       IP:ports     Network    CPU/Memory       OsType    Location
----------------  ---------------  --------  ------------------------------------------  -----------  ---------  ---------------  --------  ----------
appcontaineryaml  myResourceGroup  Running   mcr.microsoft.com/azuredocs/aci-helloworld  10.0.0.5:80  Private    1.0 core/1.5 gb  Linux     westus

Limpar os recursos

Eliminar instâncias de contentor

Quando terminar de trabalhar com as instâncias de contentor que criou, elimine-as com os seguintes comandos:

az container delete --resource-group myResourceGroup --name appcontainer -y
az container delete --resource-group myResourceGroup --name commchecker -y
az container delete --resource-group myResourceGroup --name appcontaineryaml -y

Eliminar recursos de rede

Atualmente, esta funcionalidade requer vários comandos adicionais para eliminar os recursos de rede que criou anteriormente. Se utilizou os comandos de exemplo nas secções anteriores deste artigo para criar a sua rede virtual e sub-rede, pode utilizar o seguinte script para eliminar esses recursos de rede. O script pressupõe que o grupo de recursos contém uma única rede virtual com um único perfil de rede.

Antes de executar o script, defina a RES_GROUP variável para o nome do grupo de recursos que contém a rede virtual e a sub-rede que devem ser eliminadas. Atualize o nome da rede virtual se não tiver utilizado o aci-vnet nome sugerido anteriormente. O script está formatado para a shell do Bash. Se preferir outra shell, como o PowerShell ou a Linha de Comandos, terá de ajustar a atribuição de variáveis e os acessórios em conformidade.

Aviso

Este script elimina recursos! Elimina a rede virtual e todas as sub-redes que contém. Certifique-se de que já não precisa de nenhum dos recursos na rede virtual, incluindo as sub-redes que contém, antes de executar este script. Depois de eliminados, estes recursos são irrecuperáveis.

# Replace <my-resource-group> with the name of your resource group
# Assumes one virtual network in resource group
RES_GROUP=<my-resource-group>

# Get network profile ID
# Assumes one profile in virtual network
NETWORK_PROFILE_ID=$(az network profile list --resource-group $RES_GROUP --query [0].id --output tsv)

# Delete the network profile
az network profile delete --id $NETWORK_PROFILE_ID -y

# Delete virtual network
az network vnet delete --resource-group $RES_GROUP --name aci-vnet

Passos seguintes