Aggiorna i tuoi 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 di zona migliora l'affidabilità isolando le interruzioni all'interno delle zone, evitando interruzioni dei servizi essenziali come la creazione delle istanze e consentendo 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 di 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. 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

        Per utilizzare gli esempi di API REST in questa pagina in un ambiente di sviluppo locale, utilizzi le credenziali che fornisci a 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.

        Per saperne di più, consulta la sezione Autenticarsi per l'utilizzo di REST nella documentazione sull'autenticazione di Google Cloud .

Ruoli obbligatori

Per ottenere le autorizzazioni necessarie per eseguire la migrazione dei progetti in modo da abilitare l'utilizzo del DNS di zona, chiedi all'amministratore di concederti i seguenti ruoli IAM:

  • Eseguire la migrazione di un progetto in modo da abilitare l'utilizzo del DNS di zona: Project Editor (roles/resourcemanager.projectEditor) nel progetto
  • Eseguire la migrazione delle VM al DNS di zona all'interno di un progetto: Compute Instance Admin (v1) (roles/compute.instanceAdmin.v1) nel progetto
  • Se la VM utilizza un service account: Utente service account (roles/iam.serviceAccountUser) nel service account o nel progetto

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

Questi ruoli predefiniti contengono le autorizzazioni obbligatorie per eseguire la migrazione dei progetti in modo da abilitare l'utilizzo del DNS di zona. Per visualizzare le autorizzazioni obbligatorie corrette, espandi l'omonima sezione:

Autorizzazioni obbligatorie

Per eseguire la migrazione dei progetti in modo da abilitare l'utilizzo del DNS di zona, sono necessarie le seguenti autorizzazioni:

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

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

Eseguire la migrazione del progetto al DNS di zona

Per eseguire la migrazione di un progetto in modo da abilitare l'utilizzo del DNS di zona, completa le seguenti attività:

  1. Verifica se il tuo progetto utilizza il DNS globale per impostazione predefinita
  2. Determina l'idoneità alla migrazione dei tuoi progetti utilizzando l'analisi delle query
  3. Esegui la migrazione dei progetti compatibili con il DNS di zona
  4. Correggi le query incompatibili
  5. Monitora i log del DNS globale per verificare l'idoneità alla migrazione.
  6. Esegui la migrazione dei progetti rimanenti al DNS di zona
  7. Verifica se una modifica al DNS di zona interessa il tuo progetto

Verifica se il tuo progetto utilizza il DNS globale per impostazione predefinita

Esamina i tuoi progetti per verificare se è necessario eseguire la migrazione dall'utilizzo del DNS globale al DNS di zona. Devi eseguire la migrazione solo per i progetti per i quali è configurato l'utilizzo del 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: per il progetto è abilitato il DNS globale.
    • ZonalOnly: per il progetto è abilitato il DNS di zona. Non è necessaria la migrazione di questo progetto.

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

gcloud

Esegui il seguente comando gcloud CLI per verificare 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: per il progetto è abilitato il DNS globale.
  • ZONAL_ONLY: per il progetto è abilitato il DNS di zona. Non è necessaria la migrazione di questo progetto.

REST

Verifica il valore di vmDnsSetting utilizzando il metodo projects.get. Questo esempio utilizza un parametro di query fields per includere solo i campi che desideri 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: per il progetto è abilitato il DNS globale.
  • ZONAL_ONLY: per il progetto è abilitato il DNS di zona. Non è necessaria la migrazione di questo progetto.

Utilizza 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 rappresenta il numero totale di query in un periodo di 100 giorni che possono essere risolte correttamente utilizzando il DNS di zona.

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

Per visualizzare queste metriche, utilizza Esplora metriche 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 riporta la scritta Query MQL, nell'angolo in basso a destra del campo di immissione della query, seleziona MQL in 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 ciascuna metrica.

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

  6. Verifica 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 Esegui la migrazione dei progetti compatibili con il 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 di zona. Il progetto non è pronto per la migrazione. Procedi con i passaggi descritti in Correggi 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 Usa DNS di zona 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 suggerimento per utilizzare il DNS di zona. Questo suggerimento 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 di zona nella console.

      Se fai clic sul pulsante Usa DNS di zona, i metadati del progetto vengono aggiornati in modo da abilitare l'utilizzo del 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 in modo da abilitare l'utilizzo del 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 computing 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 ottengono accesso reciproco utilizzando il nome globale.

      Console

      1. Per aggiornare l'impostazione a livello di progetto, nella consoleGoogle 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 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, utilizza 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 una fingerprint.

        Una fingerprint è una stringa casuale di caratteri generata da Compute Engine. La fingerprint cambia dopo ogni richiesta e, se fornisci una fingerprint non corrispondente, la richiesta viene rifiutata.

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

        Per ottenere la fingerprint corrente di un progetto, richiama 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 il tuo ID progetto.

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

      Istanze Linux

      sudo dhclient -v -r
      

      Istanze Windows

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

Correggi le query incompatibili

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

  • Chiamata a un'istanza di computing in un altro progetto
  • Chiamata a un'istanza di computing in un'altra regione

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

Banner indicante 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 di zona.

Per risolvere le query incompatibili, segui questi passaggi:

  1. Utilizza Esplora log per accedere ed eseguire query sull'utilizzo del DNS globale per le istanze di computing 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 della query:

       resource.type="gce_instance"
       log_name="projects/PROJECT_ID/logs/compute.googleapis.com%2Fgdnsusage"
      
  4. Nel riquadro Risultati delle query, ogni query ha un campo jsonPayload. Ogni campo jsonPayload 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 considerate query che bloccano la migrazione e di cui deve essere eseguito il debug per la correzione.

      "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 che mostra il numero di 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 abilitare l'utilizzo del 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 di zona immediatamente dopo la migrazione al DNS di zona. 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 la policy DHCP o il file di configurazione in modo da 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 abilitare l'utilizzo del 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 di zona delle VM.
  6. Dopo aver aggiornato le query DNS globali in modo da abilitare l'utilizzo del DNS di zona, segui questi passaggi:

    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 di blocco, 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.

Visualizza i log DNS globali in Esplora log

Esplora log mostra principalmente i log DNS globali per i progetti con query incompatibili con il DNS a livello 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 fare quanto segue:

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

Verifica se una modifica al DNS di zona interessa il tuo progetto

Una volta effettuata la migrazione al DNS di zona, è fondamentale verificare che le applicazioni e i servizi funzionino ancora correttamente. Poiché il DNS di zona modifica la modalità di risoluzione dei nomi DNS interni, alcune applicazioni potrebbero riscontrare problemi se si basano su nomi di DNS globale.

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

  1. Comunicazione delle istanze tramite riga di comando

    Attività: prova a inviare un ping di un'istanza da un'altra istanza utilizzando gcloud CLI.

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

    Possibile errore: "Could not resolve 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 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 di Compute Engine

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

    Potenziale errore: "Health check failed". 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à usi il FQDN dell'istanza di destinazione, incluso il nome della zona.

  3. Casi d'uso specifici per l'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"
      • "Sessione di connessione scaduta"
      • "Non è noto un host di questo tipo"
    • Risoluzione: verifica la configurazione dell'applicazione per assicurarti che utilizzi il FQDN (incluso il nome della zona) quando si fa riferimento ai servizi.

Ripristinare l'utilizzo del DNS globale

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

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

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

    • Istanze Linux: sudo dhclient -v -r
    • Istanza 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 computing, 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 container

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 di zona su queste app container, 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 container 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