Implantar um grupo de contêineres com configurações de DNS personalizadas
Na Rede Virtual do Azure, você pode implantar grupos de contêineres usando o az container create
comando na CLI do Azure. Você também pode fornecer definições de configuração avançadas para o az container create
comando usando um arquivo de configuração YAML.
Este artigo demonstra como implantar um grupo de contêineres com configurações de DNS personalizadas usando um arquivo de configuração YAML.
Para obter mais informações sobre como implantar grupos de contêineres em uma rede virtual, consulte o artigo Implantar em uma rede virtual.
Importante
Anteriormente, o processo de implantação de grupos de contêineres em redes virtuais usava perfis de rede para configuração. No entanto, os perfis de rede foram retirados a partir da versão da 2021-07-01
API. Recomendamos que você use a versão mais recente da API, que depende de IDs de sub-rede .
Pré-requisitos
Uma subscrição ativa do Azure. Se não tiver uma subscrição ativa do Azure, crie uma conta gratuita antes de começar.
CLI do Azure. Os exemplos de linha de comando neste artigo usam a CLI do Azure e são formatados para o shell Bash. Você pode instalar a CLI do Azure localmente ou usar o Azure Cloud Shell.
Um grupo de recursos para gerenciar todos os recursos usados neste guia de instruções. Usamos o nome de grupo de recursos de exemplo ACIResourceGroup ao longo deste artigo.
az group create --name ACIResourceGroup --location westus
Limitações
O IP do Resolvedor de DNS do Azure, 168.63.129.16, é adicionado automaticamente ao arquivo /etc/resolv.conf em instâncias de contêiner, mesmo quando uma configuração de DNS personalizada é aplicada. A presença do IP do Resolvedor de DNS do Azure pode causar resoluções DNS incorretas para distribuições que usam musl-libc, como o Alpine Linux. Essa resolução incorreta ocorre porque o musl-libc envia consultas DNS em paralelo e armazena em cache a resposta mais rápida. Para evitar esse problema, recomendamos que você use distribuições que lidam com consultas DNS sequencialmente, como Ubuntu e RHEL, que usam glibc em vez de musl-libc.
Para outros cenários e limitações de rede, consulte Cenários de rede virtual e recursos para instâncias de contêiner do Azure.
Importante
A implantação de grupo de contêineres em uma rede virtual está disponível para contêineres Linux na maioria das regiões onde as Instâncias de Contêiner do Azure estão disponíveis. Para obter detalhes, consulte Regiões e disponibilidade de recursos. Os exemplos neste artigo são formatados para o shell Bash. Para PowerShell ou prompt de comando, ajuste os caracteres de continuação de linha de acordo.
Criar a rede virtual
Você precisa de uma rede virtual para implantar um grupo de contêineres com uma configuração DNS personalizada. Essa rede virtual requer uma sub-rede com permissões para criar recursos de Instâncias de Contêiner do Azure e uma zona DNS privada vinculada para testar a resolução de nomes.
Este guia usa uma rede virtual chamada aci-vnet
, uma sub-rede chamada aci-subnet
e uma zona DNS privada chamada private.contoso.com
. Usamos as Zonas DNS Privadas do Azure, sobre as quais você pode aprender na Visão geral do DNS Privado.
Se você tiver uma rede virtual existente que atenda a esses critérios, poderá pular para Implantar seu grupo de contêineres.
Gorjeta
Você pode modificar os seguintes comandos com suas próprias informações, conforme necessário.
Crie a rede virtual usando o comando az network vnet create . Insira prefixos de endereço no formato CIDR (Roteamento entre Domínios sem Classe) (por exemplo:
10.0.0.0/16
).az network vnet create \ --name aci-vnet \ --resource-group ACIResourceGroup \ --location westus \ --address-prefix 10.0.0.0/16
Crie a sub-rede usando o comando az network vnet subnet create . O comando a seguir cria uma sub-rede em sua rede virtual com uma delegação que permite criar grupos de contêineres. Para obter mais informações sobre como trabalhar com sub-redes, consulte Adicionar , alterar ou excluir uma sub-rede de rede virtual. Para obter mais informações sobre a delegação de sub-redes, consulte a seção do artigo Cenários e Recursos de Rede Virtual sobre sub-redes delegadas.
az network vnet subnet create \ --name aci-subnet \ --resource-group ACIResourceGroup \ --vnet-name aci-vnet \ --address-prefixes 10.0.0.0/24 \ --delegations Microsoft.ContainerInstance/containerGroups
Registre o par chave-valor do ID da sub-rede a partir da saída deste comando. Você usa esse par chave-valor em seu arquivo de configuração YAML mais tarde. Assume a forma
"id"
de:"/subscriptions/<subscription-ID>/resourceGroups/ACIResourceGroup/providers/Microsoft.Network/virtualNetworks/aci-vnet/subnets/aci-subnet"
.Crie a zona DNS privada usando o comando az network private-dns zone create .
az network private-dns zone create -g ACIResourceGroup -n private.contoso.com
Vincule a zona DNS à sua rede virtual usando o comando az network private-dns link vnet create . O servidor DNS só é necessário para testar a resolução de nomes. O
-e
sinalizador permite o registro automático do nome do host, que é desnecessário, por isso o definimos comofalse
.az network private-dns link vnet create \ -g ACIResourceGroup \ -n aciDNSLink \ -z private.contoso.com \ -v aci-vnet \ -e false
Depois de concluir as etapas anteriores, você verá uma saída com um par chave-valor final que diz "virtualNetworkLinkState"
: "Completed"
.
Implantar seu grupo de contêineres
Nota
As configurações de DNS personalizadas não estão atualmente disponíveis no portal do Azure para implantações de grupos de contêineres. Eles devem ser fornecidos com o arquivo YAML, o modelo do Gerenciador de Recursos, a API REST ou um SDK do Azure.
Copie o seguinte YAML em um novo arquivo chamado custom-dns-deploy-aci.yaml. Edite as seguintes configurações com seus valores:
dnsConfig
: Configurações de DNS para seus contêineres dentro do seu grupo de contêineres.nameServers
: Uma lista de servidores de nomes a serem usados para pesquisas de DNS.searchDomains
: Sufixos DNS a serem anexados para pesquisas de DNS.
ipAddress
: As configurações de endereço IP privado para o grupo de contêineres.ports
: As portas a abrir, se houver.protocol
: O protocolo (TCP ou UDP) para a porta aberta.
subnetIDs
: Configurações de rede para a(s) sub-rede(s) na rede virtual.id
: O ID de recurso completo do Resource Manager da sub-rede, que você obteve anteriormente.
Nota
Os campos de configuração de DNS não são consultados automaticamente no momento, portanto, esses campos devem ser preenchidos explicitamente.
apiVersion: '2021-07-01'
location: westus
name: pwsh-vnet-dns
properties:
containers:
- name: pwsh-vnet-dns
properties:
command:
- /bin/bash
- -c
- echo hello; sleep 10000
environmentVariables: []
image: mcr.microsoft.com/powershell:latest
ports:
- port: 80
resources:
requests:
cpu: 1.0
memoryInGB: 2.0
dnsConfig:
nameServers:
- 10.0.0.10 # DNS Server 1
- 10.0.0.11 # DNS Server 2
searchDomains: contoso.com # DNS search suffix
ipAddress:
type: Private
ports:
- port: 80
subnetIds:
- id: /subscriptions/<subscription-ID>/resourceGroups/ACIResourceGroup/providers/Microsoft.Network/virtualNetworks/aci-vnet/subnets/aci-subnet
osType: Linux
tags: null
type: Microsoft.ContainerInstance/containerGroups
Implante o grupo de contêineres com o comando az container create , especificando o nome do arquivo YAML com o --file
parâmetro:
az container create --resource-group ACIResourceGroup \
--file custom-dns-deploy-aci.yaml
Quando a implantação estiver concluída, execute o comando az container show para exibir seu status. Saída de exemplo:
az container show --resource-group ACIResourceGroup --name pwsh-vnet-dns -o table
Name ResourceGroup Status Image IP:ports Network CPU/Memory OsType Location
---------------- --------------- -------- ------------------------------------------ ----------- --------- --------------- -------- ----------
pwsh-vnet-dns ACIResourceGroup Running mcr.microsoft.com/powershell 10.0.0.5:80 Private 1.0 core/2.0 gb Linux westus
Depois que o status mostrar Running
, execute o comando az container exec para obter acesso bash dentro do contêiner.
az container exec --resource-group ACIResourceGroup --name pwsh-vnet-dns --exec-command "/bin/bash"
Valide se o DNS está funcionando conforme o esperado dentro do seu contêiner. Por exemplo, leia o /etc/resolv.conf
arquivo para garantir a configuração adequada das configurações de DNS fornecidas no arquivo YAML.
Nota
Observe que o IP 168.63.129.16 do resolvedor de DNS do Azure é adicionado automaticamente ao arquivo /etc/resolv.conf em ACIs, mesmo quando uma configuração de DNS personalizada é aplicada. Isso pode levar a problemas de resolução em distribuições que lidam com processos de consulta DNS em paralelo. Para obter mais informações, consulte a seção Limitações.
root@wk-caas-81d609b206c541589e11058a6d260b38-90b0aff460a737f346b3b0:/# cat /etc/resolv.conf
nameserver 10.0.0.10
nameserver 10.0.0.11
nameserver 168.63.129.16
search contoso.com
Clean up resources (Limpar recursos)
Eliminar instâncias de contentor do Azure
Quando terminar a instância de contêiner criada, exclua-a com o comando az container delete :
az container delete --resource-group ACIResourceGroup --name pwsh-vnet-dns -y
Excluir recursos de rede
Se você não planeja usar essa rede virtual novamente, você pode excluí-la com o comando az network vnet delete :
az network vnet delete --resource-group ACIResourceGroup --name aci-vnet
Eliminar grupo de recursos
Se você não planeja usar esse grupo de recursos fora deste guia, poderá excluí-lo com o comando az group delete :
az group delete --name ACIResourceGroup
Digite y
quando solicitado se tiver certeza de que deseja executar a operação.
Próximos passos
Para obter mais informações sobre como implantar um grupo de contêineres em uma rede virtual, consulte o Modelo de início rápido do Azure Criar um grupo de contêineres do Azure com rede virtual.