Atualize seus projetos para usar DNS zonal


Este documento explica como migrar um projeto existente do DNS global para o DNS zonal. O DNS zonal aumenta a confiabilidade isolando interrupções dentro das zonas, evitando interrupções em serviços essenciais, como criação de instâncias e recuperação automática.

Antes de começar

  • Se ainda não o fez, configure a autenticação. Autenticação é o processo pelo qual sua identidade é verificada para acesso a Google Cloud serviços e APIs. Para executar códigos ou amostras em um ambiente de desenvolvimento local, você pode se autenticar no Compute Engine selecionando uma das seguintes opções:

    Select the tab for how you plan to use the samples on this page:

    Console

    When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.

    gcloud

    1. After installing the Google Cloud CLI, initialize it by running the following command:

      gcloud init

      If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

    2. Set a default region and zone.
    3. REST

      Para usar as amostras da API REST nesta página em um ambiente de desenvolvimento local, use as credenciais fornecidas para gcloud CLI.

        After installing the Google Cloud CLI, initialize it by running the following command:

        gcloud init

        If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

      Para mais informações, consulte Autenticar para usar REST na documentação de autenticação do Google Cloud.

Funções obrigatórias

Para obter as permissões necessárias para migrar projetos para usar DNS zonal, peça ao administrador que conceda a você as seguintes funções do IAM:

Para obter mais informações sobre a concessão de funções, consulte Gerenciar acesso a projetos, pastas e organizações .

Essas funções predefinidas contêm as permissões necessárias para migrar projetos para usar o DNS zonal. Para ver as permissões exatas necessárias, expanda a seção Permissões necessárias :

Permissões necessárias

As seguintes permissões são necessárias para migrar projetos para usar DNS zonal:

  • Verifique nomes DNS globais e metadados de VM: compute.projects.get
  • Defina metadados em uma VM: compute.instances.setMetadata
  • Defina metadados para todo o projeto: compute.projects.setCommonInstanceMetadata
  • Se suas VMs usarem contas de serviço: iam.serviceAccounts.actAs

Você também poderá obter essas permissões com funções personalizadas ou outras funções predefinidas .

Migre seu projeto para DNS zonal

Para migrar um projeto para usar DNS zonal, conclua as seguintes tarefas:

  1. Verifique se o seu projeto usa DNS global por padrão
  2. Determine a preparação para migração dos seus projetos usando análise de consulta
  3. Migrar projetos compatíveis com DNS zonal
  4. Corrigir consultas incompatíveis
  5. Monitore os logs DNS globais para confirmar a prontidão da migração .
  6. Migrar os projetos restantes para DNS zonal
  7. Verifique se uma alteração no DNS zonal está afetando seu projeto

Verifique se o seu projeto usa DNS global por padrão

Verifique seus projetos para ver se eles precisam migrar do DNS global para o DNS zonal. Você só precisa migrar projetos configurados para usar DNS global como padrão para quaisquer nomes DNS internos criados no projeto.

Console

  1. No console do Google Cloud, acesse a página Metadados do Compute Engine.

    Vá para Metadados

  2. Na guia Metadados , visualize a configuração vmdnssetting , se existir. O valor atribuído indica se o projeto usa DNS global por padrão.

    • GlobalDefault : o projeto tem DNS global habilitado.
    • ZonalOnly : o projeto tem DNS zonal habilitado. Este projeto não precisa ser migrado.

    Se a configuração de metadados vmdnssetting não estiver listada, verifique se sua organização usa DNS global por padrão .

gcloud

Execute o seguinte comando da CLI gcloud para verificar o valor de vmDnsSetting .

gcloud compute project-info describe --project=PROJECT_ID --flatten="vmDnsSetting"

Substitua PROJECT_ID pelo nome do projeto.

O valor retornado indica se o projeto usa DNS global por padrão.

  • GLOBAL_DEFAULT : o projeto tem DNS global habilitado.
  • ZONAL_ONLY : o projeto tem DNS zonal habilitado. Este projeto não precisa ser migrado.

DESCANSAR

Verifique o valor de vmDnsSetting usando o método projects.get . Este exemplo usa um parâmetro de consulta fields para incluir apenas os campos que você deseja visualizar.

GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID?fields=id,name,vmDnsSetting

Substitua PROJECT_ID pelo ID do projeto.

O valor de vmDnsSetting indica se o projeto usa DNS global por padrão.

  • GLOBAL_DEFAULT : o projeto tem DNS global habilitado.
  • ZONAL_ONLY : o projeto tem DNS zonal habilitado. Este projeto não precisa ser migrado.

Use a análise de consulta para determinar a preparação para migração de um projeto

Para avaliar se um projeto pode ser migrado para DNS zonal sem alterações de código ou alteração da forma como o DNS global é usado, Google Cloud analisa seu histórico de consultas DNS. Esta análise fornece as seguintes métricas que indicam a compatibilidade do projeto com o DNS zonal:

  • zonal_dns_ready ( consultas compatíveis ): esta métrica representa o número total de consultas em um período de 100 dias que podem ser resolvidas com êxito usando DNS zonal.

  • zonal_dns_risky ( consultas incompatíveis ): esta métrica representa o número total de consultas que não podem ser resolvidas usando DNS zonal. Estas consultas normalmente envolvem comunicação entre regiões ou outros cenários onde a resolução zonal falha. Fundamentalmente, se esta métrica tiver um valor diferente de zero, o seu projeto ainda não está pronto para migração. Você precisará responder a essas consultas incompatíveis antes de mudar para o DNS zonal.

Para visualizar essas métricas, use o Metrics Explorer no console do Google Cloud.

  1. No console do Google Cloud, acesse a página do explorador de métricas :

    Vá para o explorador de métricas

    Se você usar a barra de pesquisa para encontrar esta página, selecione o resultado cujo subtítulo é Monitoramento .

  2. No lado direito da barra de ferramentas que contém o campo Selecionar uma métrica , clique em Editor de código , MQL ou PromQL .

  3. Se o campo de entrada da consulta não tiver o título Consulta MQL , no canto inferior direito do campo de entrada da consulta, para Idioma , selecione MQL .

  4. No campo de entrada da consulta, insira o seguinte texto exatamente como aparece:

    fetch compute.googleapis.com/Location
    | metric 'compute.googleapis.com/global_dns/request_count'
    | every 1d
    | within 7d
    
  5. Clique no botão Executar consulta .

    O console do Google Cloud exibe um gráfico das duas métricas ( zonal_dns_ready e zonal_dns_risky ) e o número correspondente de consultas feitas durante o período para cada métrica.

    Captura de tela do gráfico de métricas globais de uso de DNS.

  6. Verifique o valor da métrica zonal_dns_risky .

    • Se o valor for 0 , o projeto estará pronto para migração para DNS zonal. Você pode migrar o projeto, conforme descrito em Migrar projetos que estão prontos para DNS zonal .
    • Se o valor for um número diferente de zero, como 0.02k , conforme mostrado na captura de tela anterior, algumas consultas poderão não funcionar após a migração para o DNS zonal. O projeto não está pronto para migração. Continue com as etapas em Corrigir consultas incompatíveis .

Migrar projetos compatíveis com DNS zonal

Use qualquer uma das opções a seguir para migrar projetos que estão prontos para mudar para DNS zonal:

  • Clique no botão Usar DNS zonal no console do Google Cloud.

    1. Ao visualizar a página de instâncias de VM do seu projeto, se ele estiver pronto para migração (se for compatível com consultas DNS zonais), o banner incluirá uma recomendação para Usar DNS zonal . Esta recomendação é baseada no uso de DNS interno no projeto, mas está limitada aos últimos 30 dias.

      Uma captura de tela do banner pronto para migrar para DNS zonal no console.

      Se você clicar no botão Usar DNS zonal , os metadados do projeto serão atualizados para usar DNS zonal.

    2. Opcional: visualize e consulte os metadados da VM para confirmar a alteração dos metadados.

  • Altere manualmente os metadados do projeto para usar DNS zonal.

    1. Habilite o DNS zonal para suas instâncias definindo a entrada de metadados vmDnsSetting para o projeto. Depois de definir essa entrada de metadados, suas instâncias de computação poderão ser acessadas somente por seus nomes DNS zonais ( VM_NAME . ZONE .c. PROJECT_ID .internal) ao usar caminhos de pesquisa. As instâncias ainda mantêm os caminhos de pesquisa zonal e global, mas seus nomes DNS globais, que não incluem ZONE como parte do nome DNS interno, não funcionam mais. Somente instâncias na mesma região e no mesmo projeto podem acessar umas às outras usando o nome global quando essa configuração estiver em vigor.

      Console

      1. Para atualizar a configuração no nível do projeto, no console do Google Cloud, acesse a página Metadados do Compute Engine.

        Vá para a página de metadados personalizados

      2. Clique em Editar .

      3. Se existir uma chave com o valor VmDnsSetting , altere seu valor para ZonalOnly .

      4. Se uma chave com o valor VmDnsSetting não existir, clique em Adicionar item .

        • No campo Chave , insira VmDnsSetting .
        • No campo Valor , insira ZonalOnly .
      5. Para terminar de modificar suas entradas de metadados personalizados, clique em Salvar .

      gcloud

      1. Para atualizar a configuração de metadados do projeto atual, use o comando project-info add-metadata .

        gcloud compute project-info add-metadata \
            --metadata vmDnsSetting=ZonalOnly
        
      2. Opcional: Para verificar as configurações de metadados de um projeto, use o seguinte comando:

        gcloud compute project-info describe --project=PROJECT_ID --flatten="vmDnsSetting"
        

        Substitua PROJECT_ID pelo nome do projeto a ser consultado.

      DESCANSAR

      Para atualizar a configuração de metadados no nível do projeto, crie uma solicitação POST usando o método projects.setCommonInstanceMetadata .

      1. Opcional: para executar o bloqueio otimista, você pode fornecer opcionalmente uma impressão digital .

        Uma impressão digital é uma sequência aleatória de caracteres gerada pelo Compute Engine. A impressão digital muda após cada solicitação e, se você fornecer uma impressão digital incompatível, sua solicitação será rejeitada.

        Se você não fornecer uma impressão digital, nenhuma verificação de consistência será executada e a solicitação projects.setCommonInstanceMetadata será bem-sucedida. Se você usar o método instances.setMetadata , uma impressão digital será sempre necessária.

        Para obter a impressão digital atual de um projeto, chame o método project.get .

        GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID
        

        A saída é semelhante à seguinte:

        {
         "name": "myproject",
         "commonInstanceMetadata": {
           "kind": "compute#metadata",
           "fingerprint": "FikclA7UBC0=",
           ...
         }
        }
        
      2. Construa uma solicitação POST para o método projects.setCommonInstanceMetadata para definir o par chave-valor de metadados:

        POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/setCommonInstanceMetadata
        
        {
        "fingerprint": "FikclA7UBC0=",
        "items": [
          {
          "key": "vmDnsSetting",
          "value": "ZonalOnly"
          }
        ]
        }
        

        Substitua PROJECT_ID pelo ID do seu projeto.

    2. Depois de configurar a entrada de metadados vmDnsSetting para seu projeto, atualize a concessão de DHCP em cada instância desse projeto. Você pode atualizar a concessão reiniciando a instância, aguardando a expiração da concessão ou executando um dos seguintes comandos:

      Instâncias Linux

      sudo dhclient -v -r
      

      Instâncias do Windows

      ipconfig /renew
      
    3. Verifique se o seu projeto usa DNS zonal .

Corrigir consultas incompatíveis

Um projeto que não está pronto para migrar significa que pelo menos uma consulta DNS incompatível foi feita dentro de um determinado período de tempo, como nos últimos 30 dias. Consultas incompatíveis podem ter os seguintes atributos:

  • Faça uma chamada para uma instância de computação em um projeto diferente
  • Faça uma chamada para uma instância de computação em uma região diferente

Se seu projeto tiver consultas incompatíveis, o seguinte banner aparecerá na página de instâncias de VM do console do Google Cloud:

Banner indicando que seu projeto não está pronto para migrar para DNS zonal.

Para corrigir todas as consultas incompatíveis, recomendamos que você use o nome de domínio totalmente qualificado (FQDN) zonal da instância de origem na consulta. Essa abordagem garante que a resolução da consulta permaneça ininterrupta após a migração do projeto para o DNS zonal.

Para resolver consultas incompatíveis, faça o seguinte:

  1. Use o Logs Explorer para acessar e consultar o uso de DNS global para instâncias de computação do seu projeto.

    Acesse o Explorador de registros

  2. Selecione o projeto.

  3. Aplique os filtros de recursos e nomes de log:

    1. Clique em Recurso .
    2. Na caixa de diálogo Selecionar recurso , selecione Instância de VM e clique em Aplicar .
    3. Clique em Nome do log .
    4. Na caixa de diálogo Selecionar nomes de log , selecione gdnsusage e clique em Aplicar .

    Alternativamente, você pode inserir o seguinte no campo de consulta:

       resource.type="gce_instance"
       log_name="projects/PROJECT_ID/logs/compute.googleapis.com%2Fgdnsusage"
      
  4. No painel Resultados da consulta , cada consulta possui um campo jsonPayload . Cada campo jsonPayload contém as seguintes informações:

    • O nome da VM de origem, o ID do projeto e o nome da zona.
    • O nome da VM de destino, o ID do projeto e o nome da zona.
    • Uma mensagem de depuração que fornece informações sobre como atualizar a consulta DNS global que não pode ser resolvida usando nomes DNS zonais. Estas são consideradas consultas de bloqueio de migração que você deve depurar e corrigir.

      "To use Zonal DNS, update the Global DNS query sent from the source VM
      VM_NAME.c.PROJECT_ID.internal to the following zonal
      FQDN: VM_NAME.ZONE.c.PROJECT_ID.internal"
      
    • Uma contagem de consultas que mostra quantas consultas de bloqueio de migração a VM de origem envia para a VM de destino naquele dia.

    A captura de tela a seguir mostra as informações do campo jsonPayload na página do console do Logs Explorer.

    Captura de tela do jsonPayload nos resultados da consulta de log do gdnsusage.

  5. Use as informações no jsonPayload obtidas na etapa anterior para determinar qual FQDN usar para atualizar manualmente suas consultas DNS globais para usar DNS zonal e preparar o projeto para migração. Os casos de uso mais comuns sobre onde atualizar o FQDN e resolver a compatibilidade são os seguintes:

    • Nomes DNS internos do servidor de metadados: nenhuma ação é necessária porque o nome DNS retornado mudará para um FQDN zonal imediatamente após a migração para DNS zonal. Se o nome DNS estiver armazenado em cache, basta fazer mais uma chamada para atualizar o valor do cache.
    • Nomes DNS internos usados ​​para acessar VMs em outra região: se você tiver um aplicativo que usa nomes DNS internos para VMs em regiões diferentes, poderá modificar a política DHCP ou o arquivo de configuração para incluir a zona na outra região.
    • FQDN global codificado: se você tiver um aplicativo que usa nomes FQDN globais codificados para VMs, poderá atualizar a chamada dentro do aplicativo para usar o nome DNS interno ou o FQDN zonal. Você pode fazer essa alteração por meio de uma alteração de código ou de configuração no Terraform.
    • VMs em projetos de serviço que usam uma rede VPC compartilhada: para resolver nomes DNS de VMs em projetos de serviço que usam uma rede VPC compartilhada, você deve usar os FQDNs zonais das VMs.
  6. Depois de atualizar as consultas DNS globais para usar DNS zonal, faça o seguinte:

    1. Use a página Logs Explorer para consultar novamente o uso do DNS global. Depois de corrigir todas as consultas de DNS globais bloqueadas, nenhum log de depuração deverá ser exibido nos resultados da consulta.

    2. Verifique novamente a métrica de monitoramento para ver se todas as consultas DNS incompatíveis foram removidas.

Ver registros DNS globais no Logs Explorer

O Logs Explorer mostra principalmente logs DNS globais para projetos com consultas incompatíveis com DNS zonal. Esses logs ajudam você a identificar e analisar essas consultas problemáticas antes da migração.

Você também pode utilizar o Logs Explorer para essas consultas incompatíveis para fazer o seguinte:

  • Crie painéis : visualize seus padrões de consulta DNS globais incompatíveis para obter insights sobre o comportamento de comunicação do seu aplicativo.
  • Logs agregados : analise os logs de DNS em toda a sua organização para identificar tendências mais amplas e áreas potenciais de melhoria.

Verifique se uma alteração no DNS zonal está afetando seu projeto

Depois de migrar para o DNS zonal, é crucial verificar se os seus aplicativos e serviços ainda estão funcionando corretamente. Como o DNS zonal altera a forma como os nomes DNS internos são resolvidos, alguns aplicativos poderão enfrentar problemas se dependerem de nomes DNS globais.

A seção a seguir descreve como verificar possíveis impactos e como resolvê-los:

  1. Comunicação de instância de linha de comando

    Tarefa : tente executar ping em uma instância de outra usando a CLI gcloud.

    gcloud compute ssh VM-A --command "ping VM-B"
    

    Erro potencial : "Não foi possível resolver o host" — Isso significa que VM-A não consegue encontrar o endereço IP do VM-B .

    Resolução : atualize o nome do host que você está usando para VM-B para seu nome de domínio totalmente qualificado (FQDN), que inclui o nome da zona: INSTANCE_NAME . ZONE .c. PROJECT_ID .internal

  2. Comunicação de instâncias nos serviços do Compute Engine

    Tarefa : se você estiver usando verificações de integridade para grupos de instâncias gerenciadas (MIGs) que dependem de nomes DNS internos, verifique se as verificações de integridade estão sendo aprovadas.

    Erro potencial : "Falha na verificação de integridade" — Isso indica que a verificação de integridade não pode atingir seu objetivo devido a problemas de resolução de DNS.

    Solução : certifique-se de que a verificação de integridade esteja usando o FQDN da instância de destino, incluindo o nome da zona.

  3. Casos de uso específicos de aplicativos

    Muitos aplicativos dependem de DNS interno para tarefas como as seguintes:

    • Conectar-se a bancos de dados (por exemplo, Cloud SQL)
    • Interagir com filas de mensagens (por exemplo, Pub/Sub)

    • Erros potenciais : variam dependendo do aplicativo, mas podem incluir:

      • "Não foi possível conectar-se ao SERVICE_NAME "
      • "Conexão expirou"
      • "Nenhum host é conhecido"
    • Resolução : verifique a configuração do seu aplicativo para ter certeza de que ele está usando o FQDN (incluindo o nome da zona) ao fazer referência a serviços.

Voltar a usar DNS global

Você pode desfazer a migração para DNS zonal alterando o tipo de DNS interno padrão de volta para DNS global. Você pode fazer isso no nível da organização, do projeto, da instância ou do contêiner.

Voltar a usar DNS global para um projeto

Para reverter um projeto para usar DNS global, conclua as etapas a seguir.

  1. Adicione o seguinte aos metadados do projeto: vmDnsSetting=GlobalDefault .

    Para obter informações sobre como definir valores de metadados do projeto, consulte Definir e remover metadados personalizados .

  2. Verifique se nenhuma das instâncias do projeto tem o valor de metadados vmDnsSetting definido como ZonalOnly .

    gcloud compute instances describe INSTANCE_NAME --flatten="metadata[]"
    

    Substitua INSTANCE_NAME pelo nome da instância a ser verificada.

  3. Atualize a concessão de DHCP em cada instância. Você pode atualizar a concessão reiniciando a instância, aguardando a expiração da concessão ou executando um dos seguintes comandos no sistema operacional convidado:

    • Instâncias Linux: sudo dhclient -v -r
    • Instância do Windows Server: ipconfig /renew

Voltar a usar DNS global para uma instância

Para reverter uma instância específica para usar DNS global, conclua as etapas a seguir.

  1. Atualize os metadados da instância para incluir vmDnsSetting=GlobalDefault .

    Para obter informações sobre como definir valores de metadados de instância de computação, consulte Definir e remover metadados personalizados .

  2. Para forçar a alteração da configuração do DNS, reinicie a rede da instância usando um dos seguintes comandos:

    • Para sistema operacional otimizado para contêiner ou Ubuntu:

      sudo systemctl restart systemd-networkd
      
    • Para CentOS, RedHat EL, Fedora CoreOS ou Rocky Linux:

      sudo systemctl restart network
      

      ou

      sudo systemctl restart NetworkManager.service
      
    • Para Debian:

      sudo systemctl restart networking
      
    • Para sistemas Linux com nmcli :

      sudo nmcli networking off
      sudo nmcli networking on
      
    • Para Windows:

      ipconfig /renew
      

Voltar a usar DNS global para um contêiner

Se você executar seu aplicativo ou carga de trabalho em contêineres, no Google Kubernetes Engine ou no ambiente flexível do App Engine, a configuração de DNS nas configurações do contêiner poderá não ser atualizada automaticamente até que você reinicie os contêineres. Para desabilitar o DNS zonal nesses aplicativos de contêiner, conclua as etapas a seguir.

  1. Defina a configuração de metadados do projeto vmDnsSetting como GlobalDefault nos projetos que possuem os contêineres e as VMs.

  2. Reinicie os contêineres para que suas configurações de DNS voltem ao estado original.

Solucionar problemas do processo de migração de DNS global para DNS zonal

Se você tiver problemas com o processo de migração, consulte o guia de solução de problemas .

O que vem a seguir