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, só 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:
- 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.
- 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 emid
: o ID de recurso da sub-redename
: 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
Para implementar uma nova rede virtual, sub-rede, perfil de rede e grupo de contentores com um modelo de Resource Manager, veja Criar um grupo de contentores do Azure com a VNet.
Para implementar Azure Container Instances que consigam extrair imagens de um Azure Container Registry através de um ponto final privado, veja Deploy to Azure Container Instances from Azure Container Registry using a managed identidade.