Partilhar via


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-subnete 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.

  1. 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
    
  2. 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
    
  3. 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".

  4. 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
    
  5. 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 como false.

    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.