Aggiornare i progetti per utilizzare il DNS di zona


Questo documento spiega come eseguire la migrazione di un progetto esistente dal DNS globale al DNS di zona. Il DNS a livello di zona migliora l'affidabilità isolando le interruzioni all'interno delle zone, evitando interruzioni dei servizi essenziali come la creazione di istanze e la riparazione automatica.

Prima di iniziare

  • Se non l'hai ancora fatto, configura l'autenticazione. L'autenticazione è il processo mediante il quale la tua identità viene verificata per l'accesso a servizi e API. Google Cloud Per eseguire codice o esempi da un ambiente di sviluppo locale, puoi autenticarti su Compute Engine selezionando una delle seguenti opzioni:

    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. Install the Google Cloud CLI, then initialize it by running the following command:

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

      Per utilizzare gli esempi dell'API REST in questa pagina in un ambiente di sviluppo locale, utilizza le credenziali fornite a gcloud CLI.

        Install the Google Cloud CLI, then initialize it by running the following command:

        gcloud init

      Per ulteriori informazioni, consulta Eseguire l'autenticazione per l'utilizzo di REST nella documentazione Google Cloud sull'autenticazione.

Ruoli obbligatori

Per ottenere le autorizzazioni necessarie per eseguire la migrazione dei progetti all'utilizzo del DNS zonale, chiedi all'amministratore di concederti i seguenti ruoli IAM:

  • Esegui la migrazione di un progetto per utilizzare il DNS di zona: Project Editor (roles/resourcemanager.projectEditor) nel progetto
  • Esegui la migrazione delle VM al DNS zonale all'interno di un progetto: Compute Instance Admin (v1) (roles/compute.instanceAdmin.v1) nel progetto
  • Se la VM utilizza un account di servizio: Utente account di servizio (roles/iam.serviceAccountUser) nell'account di servizio o nel progetto

Per saperne di più sulla concessione dei ruoli, consulta Gestire l'accesso a progetti, cartelle e organizzazioni.

Questi ruoli predefiniti contengono le autorizzazioni necessarie per eseguire la migrazione dei progetti all'utilizzo del DNS di zona. Per visualizzare le autorizzazioni esatte richieste, espandi la sezione Autorizzazioni richieste:

Autorizzazioni obbligatorie

Per eseguire la migrazione dei progetti all'utilizzo del DNS di zona sono necessarie le seguenti autorizzazioni:

  • Controlla i nomi DNS globali e i metadati della VM: compute.projects.get
  • Imposta i metadati su una VM: compute.instances.setMetadata
  • Impostare i metadati a livello di progetto: compute.projects.setCommonInstanceMetadata
  • Se le VM utilizzano account di servizio: iam.serviceAccounts.actAs

Potresti anche ottenere queste autorizzazioni con ruoli personalizzati o altri ruoli predefiniti.

Esegui la migrazione del progetto al DNS di zona

Per eseguire la migrazione di un progetto in modo che utilizzi il DNS di zona, completa le seguenti attività:

  1. Verificare se il progetto utilizza il DNS globale per impostazione predefinita
  2. Determinare l'idoneità alla migrazione dei progetti utilizzando l'analisi delle query
  3. Eseguire la migrazione dei progetti compatibili con il DNS di zona
  4. Correggere le query incompatibili
  5. Monitora i log DNS globali per verificare l'idoneità alla migrazione.
  6. Esegui la migrazione dei progetti rimanenti al DNS di zona
  7. Verificare se una modifica al DNS di zona influisce sul progetto

Verificare se il progetto utilizza il DNS globale per impostazione predefinita

Controlla i tuoi progetti per verificare se è necessario eseguire la migrazione dall'utilizzo del DNS globale al DNS di zona. Devi eseguire la migrazione solo dei progetti configurati per utilizzare il DNS globale come predefinito per tutti i nomi DNS interni creati all'interno del progetto.

Console

  1. Nella console Google Cloud, vai alla pagina Metadati di Compute Engine.

    Vai a Metadati

  2. Nella scheda Metadati, visualizza l'impostazione vmdnssetting, se esistente. Il valore assegnato indica se il progetto utilizza il DNS globale per impostazione predefinita.

    • GlobalDefault: il progetto ha il DNS globale abilitato.
    • ZonalOnly: il progetto ha il DNS di zona abilitato. Non è necessaria la migrazione di questo progetto.

    Se l'impostazione dei metadati vmdnssetting non è elencata, controlla se la tua organizzazione utilizza il DNS globale per impostazione predefinita.

gcloud

Esegui il seguente comando gcloud CLI per controllare il valore di vmDnsSetting.

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

Sostituisci PROJECT_ID con il nome del progetto.

Il valore restituito indica se il progetto utilizza il DNS globale per impostazione predefinita.

  • GLOBAL_DEFAULT: il progetto ha il DNS globale abilitato.
  • ZONAL_ONLY: il progetto ha il DNS di zona abilitato. Non è necessaria la migrazione di questo progetto.

REST

Controlla il valore di vmDnsSetting utilizzando il metodo projects.get. Questo esempio utilizza un parametro di query fields per includere solo i campi che vuoi visualizzare.

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

Sostituisci PROJECT_ID con l'ID progetto.

Il valore di vmDnsSetting indica se il progetto utilizza il DNS globale per impostazione predefinita.

  • GLOBAL_DEFAULT: il progetto ha il DNS globale abilitato.
  • ZONAL_ONLY: il progetto ha il DNS di zona abilitato. Per questo progetto non è necessaria la migrazione.

Utilizzare l'analisi delle query per determinare l'idoneità alla migrazione di un progetto

Per valutare se è possibile eseguire la migrazione di un progetto al DNS di zona senza modifiche al codice o senza alterare l'utilizzo del DNS globale, Google Cloud analizza la cronologia delle query DNS. Questa analisi fornisce le seguenti metriche che indicano la compatibilità del progetto con il DNS di zona:

  • zonal_dns_ready (Query compatibili): questa metrica indica il numero totale di query in un periodo di 100 giorni che possono essere risolte utilizzando il DNS zonale.

  • zonal_dns_risky (Query incompatibili): questa metrica rappresenta il numero totale di query che non possono essere risolte utilizzando il DNS zonale. Queste query in genere prevedono la comunicazione tra regioni o altri scenari in cui la risoluzione zonale non riesce. È fondamentale che, se questa metrica ha un valore diverso da zero, il progetto non sia ancora pronto per la migrazione. Devi risolvere queste query incompatibili prima di passare al DNS di zona.

Per visualizzare queste metriche, utilizza Metrics Explorer nella console Google Cloud.

  1. Nella console Google Cloud, vai alla pagina  Esplora metriche:

    Vai a Esplora metriche

    Se utilizzi la barra di ricerca per trovare questa pagina, seleziona il risultato con il sottotitolo Monitoring.

  2. Sul lato destro della barra degli strumenti contenente il campo Seleziona una metrica, fai clic su Editor di codice, MQL o PromQL.

  3. Se il campo di immissione della query non si chiama Query MQL, nell'angolo in basso a destra del campo di immissione della query, seleziona MQL per Lingua.

  4. Nel campo di immissione della query, inserisci il seguente testo esattamente come appare:

    fetch compute.googleapis.com/Location
    | metric 'compute.googleapis.com/global_dns/request_count'
    | every 1d
    | within 7d
    
  5. Fai clic sul pulsante Esegui query.

    La console Google Cloud mostra un grafico delle due metriche (zonal_dns_ready e zonal_dns_risky) e il numero corrispondente di query effettuate nel periodo di tempo per ogni metrica.

    Screenshot del grafico per le metriche di utilizzo del DNS globale.

  6. Controlla il valore della metrica zonal_dns_risky.

    • Se il valore è 0, il progetto è pronto per la migrazione al DNS di zona. Puoi eseguire la migrazione del progetto, come descritto in Eseguire la migrazione dei progetti pronti al DNS di zona.
    • Se il valore è un numero diverso da zero, ad esempio 0.02k come mostrato nello screenshot precedente, alcune query potrebbero non funzionare dopo la migrazione al DNS zonale. Il progetto non è pronto per la migrazione. Procedi con i passaggi descritti in Correggere le query incompatibili.

Esegui la migrazione dei progetti compatibili con il DNS di zona

Utilizza una delle seguenti opzioni per eseguire la migrazione dei progetti pronti per il passaggio al DNS di zona:

  • Fai clic sul pulsante Utilizza DNS zonale nella console Google Cloud.

    1. Quando visualizzi la pagina Istanze VM per il tuo progetto, se il progetto è pronto per la migrazione (è compatibile con le query DNS di zona), il banner include un consiglio per utilizzare il DNS di zona. Questo consiglio si basa sull'utilizzo del DNS interno nel progetto, ma è limitato agli ultimi 30 giorni.

      Uno screenshot del banner di disponibilità per la migrazione al DNS zonale nella console.

      Se fai clic sul pulsante Utilizza DNS di zona, i metadati del progetto vengono aggiornati in modo da utilizzare il DNS di zona.

    2. (Facoltativo) Visualizza ed esegui query sui metadati della VM per confermare la modifica dei metadati.

  • Modifica manualmente i metadati del progetto per utilizzare il DNS di zona.

    1. Attiva il DNS di zona per le tue istanze impostando la voce dei metadati vmDnsSetting per il progetto. Dopo aver impostato questa voce di metadati, potrai accedere alle tue istanze di calcolo solo tramite i relativi nomi DNS di zona (VM_NAME.ZONE.c.PROJECT_ID.internal) quando utilizzi i percorsi di ricerca. Le istanze mantengono entrambi i percorsi di ricerca a livello di zona e globale, ma i relativi nomi DNS globali, che non includono ZONE come parte del nome DNS interno, non funzionano più. Quando questa impostazione è attiva, solo le istanze nella stessa regione e nello stesso progetto possono accedere tra di loro utilizzando il nome globale.

      Console

      1. Per aggiornare l'impostazione a livello di progetto, nella console Google Cloud vai alla pagina Metadati di Compute Engine.

        Vai alla pagina Metadati personalizzati

      2. Fai clic su Modifica.

      3. Se esiste una chiave con il valore VmDnsSetting, modifica il valore in ZonalOnly.

      4. Se una chiave con il valore VmDnsSetting non esiste, fai clic su Aggiungi elemento.

        • Nel campo Key (Chiave), inserisci VmDnsSetting.
        • Nel campo Valore, inserisci ZonalOnly.
      5. Per completare la modifica delle voci dei metadati personalizzati, fai clic su Salva.

      gcloud

      1. Per aggiornare l'impostazione dei metadati per il progetto corrente, utilizza il comando project-info add-metadata.

        gcloud compute project-info add-metadata \
            --metadata vmDnsSetting=ZonalOnly
        
      2. (Facoltativo) Per verificare le impostazioni dei metadati di un progetto, usa il seguente comando:

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

        Sostituisci PROJECT_ID con il nome del progetto su cui eseguire la query.

      REST

      Per aggiornare l'impostazione dei metadati a livello di progetto, crea una richiesta POST utilizzando il metodo projects.setCommonInstanceMetadata.

      1. (Facoltativo) Per eseguire il blocco ottimistico, puoi facoltativamente fornire un fingerprint.

        Un'impronta è una stringa casuale di caratteri generata da Compute Engine. L'impronta cambia dopo ogni richiesta e, se fornisci un'impronta non corrispondente, la richiesta viene rifiutata.

        Se non fornisci un'impronta, non viene eseguito alcun controllo di coerenza e la richiesta projects.setCommonInstanceMetadata va a buon fine. Se utilizzi il metodo instances.setMetadata, è sempre obbligatoria un'impronta.

        Per ottenere l'impronta corrente di un progetto, chiama il metodo project.get.

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

        L'output è simile al seguente:

        {
         "name": "myproject",
         "commonInstanceMetadata": {
           "kind": "compute#metadata",
           "fingerprint": "FikclA7UBC0=",
           ...
         }
        }
        
      2. Crea una richiesta POST al metodo projects.setCommonInstanceMetadata per impostare la coppia chiave-valore dei metadati:

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

        Sostituisci PROJECT_ID con l'ID del tuo progetto.

    2. Dopo aver configurato la voce di metadati vmDnsSetting per il progetto, aggiorna il lease DHCP su ogni istanza del progetto. Puoi rinnovare il lease riavviando l'istanza, aspettando che scada o eseguendo uno dei seguenti comandi:

      Istanze Linux

      sudo dhclient -v -r
      

      Istanze Windows

      ipconfig /renew
      
    3. Verifica che il progetto utilizzi il DNS di zona.

Correggere le query incompatibili

Un progetto non è pronto per la migrazione se è stata eseguita almeno una query DNS incompatibile in un determinato periodo di tempo, ad esempio negli ultimi 30 giorni. Le query incompatibili potrebbero avere i seguenti attributi:

  • Effettuare una chiamata a un'istanza di calcolo in un altro progetto
  • Effettua una chiamata a un'istanza di calcolo in un'altra regione

Se il tuo progetto contiene query incompatibili, nella pagina Istanze VM della console Google Cloud viene visualizzato il seguente banner:

Banner che indica che il progetto non è pronto per la migrazione al DNS di zona.

Per correggere tutte le query incompatibili, ti consigliamo di utilizzare nella query il nome di dominio completo (FQDN) di zona dell'istanza di origine. Questo approccio garantisce che la risoluzione delle query rimanga invariata dopo la migrazione del progetto al DNS zonale.

Per risolvere le query incompatibili:

  1. Utilizza Esplora log per accedere e eseguire query sull'utilizzo del DNS globale per le istanze di calcolo del tuo progetto.

    Vai a Esplora log

  2. Seleziona il progetto.

  3. Applica i filtri per nome della risorsa e del log:

    1. Fai clic su Risorsa.
    2. Nella finestra di dialogo Seleziona risorsa, seleziona Istanza VM e poi fai clic su Applica.
    3. Fai clic su Nome log.
    4. Nella finestra di dialogo Seleziona i nomi dei log, seleziona gdnsusage e poi fai clic su Applica.

    In alternativa, puoi inserire quanto segue nel campo di query:

       resource.type="gce_instance"
       log_name="projects/PROJECT_ID/logs/compute.googleapis.com%2Fgdnsusage"
      
  4. Nel riquadro Risultati query, ogni query ha un campo jsonPayload. Ogni jsonPayload campo contiene le seguenti informazioni:

    • Il nome della VM di origine, il relativo ID progetto e il nome della zona.
    • Il nome della VM di destinazione, il relativo ID progetto e il nome della zona.
    • Un messaggio di debug che fornisce informazioni su come aggiornare la query DNS globale che non può essere risolta utilizzando i nomi DNS di zona. Queste sono query che bloccano la migrazione e che devi eseguire il debug e correggere.

      "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"
      
    • Un conteggio delle query di blocco della migrazione inviate dalla VM di origine alla VM di destinazione per quel giorno.

    Lo screenshot seguente mostra le informazioni del campo jsonPayload nella pagina della console di Esplora log.

    Screenshot di jsonPayload nei risultati della query del log gdnsusage.

  5. Utilizza le informazioni in jsonPayload ottenute nel passaggio precedente per determinare quale FQDN utilizzare per aggiornare manualmente le query DNS globali in modo da utilizzare il DNS di zona e preparare il progetto per la migrazione. I casi d'uso più comuni per sapere dove aggiornare il FQDN e risolvere la compatibilità sono i seguenti:

    • Nomi DNS interni del server dei metadati: non è richiesta alcuna azione perché il nome DNS restituito diventerà un FQDN zonale immediatamente dopo la migrazione al DNS zonale. Se il nome DNS è memorizzato nella cache, devi solo effettuare un'altra chiamata per aggiornare il valore della cache.
    • Nomi DNS interni utilizzati per accedere alle VM in un'altra regione: se hai un'applicazione che utilizza i nomi DNS interni per le VM in regioni diverse, puoi modificare il criterio DHCP o il file di configurazione per includere la zona nell'altra regione.
    • FQDN globale hardcoded: se hai un'applicazione che utilizza nomi FQDN globali hardcoded per le VM, puoi aggiornare la chiamata all'interno dell'applicazione in modo da utilizzare il nome DNS interno o il FQDN di zona. Puoi apportare questa modifica tramite una modifica del codice o della configurazione in Terraform.
    • VM in progetti di servizio che utilizzano una rete VPC condivisa: per risolvere i nomi DNS delle VM in progetti di servizio che utilizzano una rete VPC condivisa, devi utilizzare i FQDN zonali delle VM.
  6. Dopo aver aggiornato le query DNS globali per utilizzare il DNS di zona, svolgi quanto segue:

    1. Utilizza la pagina Esplora log per eseguire di nuovo una query sull'utilizzo del DNS globale. Dopo aver corretto tutte le query DNS globali che bloccano, non dovrebbero essere visualizzati log di debug nei risultati delle query.

    2. Ricontrolla la metrica di monitoraggio per verificare se tutte le query DNS incompatibili sono state rimosse.

Visualizzare i log DNS globali in Esplora log

Esplora log mostra principalmente i log DNS globali per i progetti con query incompatibili con il DNS di zona. Questi log ti aiutano a identificare e analizzare le query problematiche prima della migrazione.

Puoi anche utilizzare Esplora log per queste query incompatibili per eseguire quanto segue:

  • Crea dashboard: visualizza i pattern di query DNS globali incompatibili per ottenere informazioni sul comportamento di comunicazione della tua applicazione.
  • Log aggregati: analizza i log DNS in tutta l'organizzazione per identificare tendenze più ampie e potenziali aree di miglioramento.

Verificare se una modifica al DNS di zona influisce sul progetto

Dopo la migrazione al DNS zonale, è fondamentale verificare che le applicazioni e i servizi funzionino ancora correttamente. Poiché il DNS di zona modifica il modo in cui vengono risolti i nomi DNS interni, alcune applicazioni potrebbero riscontrare problemi se si basano su nomi DNS globali.

La sezione seguente descrive come verificare la presenza di potenziali impatti e come risolverli:

  1. Comunicazione delle istanze a riga di comando

    Attività: prova a eseguire un ping di un'istanza da un'altra utilizzando l'interfaccia a riga di comando gcloud.

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

    Possibile errore: "Impossibile risolvere l'host". Ciò significa che VM-A non riesce a trovare l'indirizzo IP di VM-B.

    Risoluzione: aggiorna il nome host che utilizzi per VM-B con il relativo nome di dominio completo (FQDN), che include il nome della zona: INSTANCE_NAME.ZONE.c.PROJECT_ID.internal

  2. Comunicazione delle istanze all'interno dei servizi Compute Engine

    Attività: se utilizzi i controlli di integrità per i gruppi di istanze gestite (MIG) che si basano su nomi DNS interni, controlla se i controlli di integrità passano.

    Potenziale errore: "Controllo di integrità non riuscito". Questo indica che il controllo di integrità non può raggiungere il suo target a causa di problemi di risoluzione DNS.

    Risoluzione: assicurati che il controllo dell'integrità userà il FQDN dell'istanza di destinazione, incluso il nome della zona.

  3. Casi d'uso specifici per applicazione

    Molte applicazioni si basano sul DNS interno per attività come le seguenti:

    • Connessione ai database (ad esempio Cloud SQL)
    • Interazione con le code di messaggi (ad esempio Pub/Sub)

    • Possibili errori: variano a seconda dell'applicazione, ma potrebbero includere:

      • "Impossibile connettersi a SERVICE_NAME"
      • "Connessione scaduta"
      • "Nessun host di questo tipo è noto"
    • Risoluzione: controlla la configurazione dell'applicazione per assicurarti che utilizzi il FQDN (incluso il nome della zona) quando fa riferimento ai servizi.

Ripristinare l'utilizzo del DNS globale

Puoi annullare la migrazione al DNS di zona ripristinando il tipo di DNS interno predefinito come DNS globale. Puoi farlo a livello di organizzazione, progetto, istanza o contenitore.

Ripristinare l'utilizzo del DNS globale per un progetto

Per ripristinare l'utilizzo del DNS globale per un progetto, completa i seguenti passaggi.

  1. Aggiungi quanto segue ai metadati del progetto: vmDnsSetting=GlobalDefault.

    Per informazioni su come impostare i valori dei metadati del progetto, consulta Imposta e rimuovi i metadati personalizzati.

  2. Verifica che nessuna delle istanze del progetto abbia il valore dei metadati vmDnsSetting impostato su ZonalOnly.

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

    Sostituisci INSTANCE_NAME con il nome dell'istanza da controllare.

  3. Aggiorna il lease DHCP su ogni istanza. Puoi aggiornare il lease riavviando l'istanza, aspettando che scada o eseguendo uno dei seguenti comandi nel sistema operativo guest:

    • Istanze Linux: sudo dhclient -v -r
    • Instanza Windows Server: ipconfig /renew

Ripristinare l'utilizzo del DNS globale per un'istanza

Per ripristinare l'utilizzo del DNS globale per un'istanza specifica, completa i seguenti passaggi.

  1. Aggiorna i metadati dell'istanza in modo da includere vmDnsSetting=GlobalDefault.

    Per informazioni su come impostare i valori dei metadati delle istanze di calcolo, consulta Imposta e rimuovi i metadati personalizzati.

  2. Per forzare la modifica della configurazione DNS, riavvia la rete dell'istanza utilizzando uno dei seguenti comandi:

    • Per Container-Optimized OS o Ubuntu:

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

      sudo systemctl restart network
      

      o

      sudo systemctl restart NetworkManager.service
      
    • Per Debian:

      sudo systemctl restart networking
      
    • Per i sistemi Linux con nmcli:

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

      ipconfig /renew
      

Ripristinare l'utilizzo del DNS globale per un contenitore

Se esegui l'applicazione o il carico di lavoro in container, su Google Kubernetes Engine o nell'ambiente flessibile di App Engine, la configurazione DNS nelle impostazioni del container potrebbe non aggiornarsi automaticamente finché non riavvii i container. Per disattivare il DNS zonale su queste app contenitore, completa i seguenti passaggi.

  1. Imposta l'impostazione dei metadati del progetto vmDnsSetting su GlobalDefault nei progetti proprietari dei container e delle VM.

  2. Riavvia i contenitori in modo che le impostazioni DNS tornino allo stato originale.

Risolvere i problemi relativi alla procedura di migrazione dal DNS globale al DNS di zona

Se riscontri problemi con la procedura di migrazione, consulta la guida alla risoluzione dei problemi.

Passaggi successivi