Mengupdate project Anda untuk menggunakan DNS zona


Dokumen ini menjelaskan cara memigrasikan project yang ada dari DNS global ke DNS zonal. DNS zona meningkatkan keandalan dengan mengisolasi pemadaman dalam zona, mencegah gangguan pada layanan penting seperti pembuatan instance dan pemulihan otomatis.

Sebelum memulai

  • Jika Anda belum melakukannya, siapkan autentikasi. Autentikasi adalah proses yang digunakan untuk memverifikasi identitas Anda agar dapat mengakses Google Cloud layanan dan API. Untuk menjalankan kode atau contoh dari lingkungan pengembangan lokal, Anda dapat mengautentikasi ke Compute Engine dengan memilih salah satu opsi berikut:

    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

      Untuk menggunakan contoh REST API di halaman ini dalam lingkungan pengembangan lokal, gunakan kredensial yang Anda berikan ke gcloud CLI.

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

        gcloud init

      Untuk informasi selengkapnya, lihat Mengautentikasi untuk menggunakan REST dalam Google Cloud dokumentasi autentikasi.

Peran yang diperlukan

Untuk mendapatkan izin yang diperlukan guna memigrasikan project agar menggunakan DNS zonal, minta administrator untuk memberi Anda peran IAM berikut:

  • Memigrasikan project untuk menggunakan DNS zona: Project Editor (roles/resourcemanager.projectEditor) pada project tersebut
  • Memigrasikan VM ke DNS zona dalam project: Compute Instance Admin (v1) (roles/compute.instanceAdmin.v1) di project
  • Jika VM Anda menggunakan akun layanan: Pengguna Akun Layanan (roles/iam.serviceAccountUser) di akun layanan atau project

Untuk mengetahui informasi selengkapnya tentang cara memberikan peran, lihat Mengelola akses ke project, folder, dan organisasi.

Peran bawaan ini berisi izin yang diperlukan untuk memigrasikan project agar menggunakan DNS zonal. Untuk melihat izin yang benar-benar diperlukan, luaskan bagian Izin yang diperlukan:

Izin yang diperlukan

Izin berikut diperlukan untuk memigrasikan project agar menggunakan DNS zona:

  • Periksa nama DNS global dan metadata VM: compute.projects.get
  • Menetapkan metadata pada VM: compute.instances.setMetadata
  • Menetapkan metadata di seluruh project: compute.projects.setCommonInstanceMetadata
  • Jika VM Anda menggunakan akun layanan: iam.serviceAccounts.actAs

Anda mungkin juga bisa mendapatkan izin ini dengan peran khusus atau peran bawaan lainnya.

Memigrasikan project Anda ke DNS zona

Untuk memigrasikan project agar menggunakan DNS zona, selesaikan tugas berikut:

  1. Memeriksa apakah project Anda menggunakan DNS global secara default
  2. Menentukan kesiapan migrasi project Anda menggunakan analisis kueri
  3. Memigrasikan project yang kompatibel dengan DNS zona
  4. Memperbaiki kueri yang tidak kompatibel
  5. Pantau log DNS global untuk mengonfirmasi kesiapan migrasi.
  6. Memigrasikan project yang tersisa ke DNS zona
  7. Memeriksa apakah perubahan pada DNS zona memengaruhi project Anda

Memeriksa apakah project Anda menggunakan DNS global secara default

Periksa project Anda untuk melihat apakah project tersebut perlu dimigrasikan dari penggunaan DNS global ke DNS zona. Anda hanya perlu memigrasikan project yang dikonfigurasi untuk menggunakan DNS global sebagai default untuk nama DNS internal apa pun yang dibuat dalam project.

Konsol

  1. Di konsol Google Cloud, buka halaman Metadata Compute Engine.

    Buka Metadata

  2. Di tab Metadata, lihat setelan vmdnssetting, jika ada. Nilai yang ditetapkan menunjukkan apakah project menggunakan DNS global secara default.

    • GlobalDefault: project telah mengaktifkan DNS global.
    • ZonalOnly: project telah mengaktifkan DNS zona. Project ini tidak perlu dimigrasikan.

    Jika setelan metadata vmdnssetting tidak tercantum, periksa apakah organisasi Anda menggunakan DNS Global secara default.

gcloud

Jalankan perintah gcloud CLI berikut untuk memeriksa nilai vmDnsSetting.

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

Ganti PROJECT_ID dengan nama project.

Nilai yang ditampilkan menunjukkan apakah project menggunakan DNS global secara default.

  • GLOBAL_DEFAULT: project telah mengaktifkan DNS global.
  • ZONAL_ONLY: project telah mengaktifkan DNS zona. Project ini tidak perlu dimigrasikan.

REST

Periksa nilai vmDnsSetting menggunakan metode projects.get. Contoh ini menggunakan parameter kueri fields untuk hanya menyertakan kolom yang ingin Anda lihat.

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

Ganti PROJECT_ID dengan project ID.

Nilai vmDnsSetting menunjukkan apakah project menggunakan DNS global secara default.

  • GLOBAL_DEFAULT: project telah mengaktifkan DNS global.
  • ZONAL_ONLY: project telah mengaktifkan DNS zona. Project ini tidak perlu dimigrasikan.

Menggunakan analisis kueri untuk menentukan kesiapan migrasi project

Untuk menilai apakah project dapat dimigrasikan ke DNS zona tanpa perubahan kode atau mengubah cara penggunaan DNS global, Google Cloud akan menganalisis histori kueri DNS Anda. Analisis ini memberikan metrik berikut yang menunjukkan kompatibilitas project dengan DNS zona:

  • zonal_dns_ready (Kueri yang kompatibel): Metrik ini mewakili jumlah total kueri dalam jangka waktu 100 hari yang berhasil di-resolve menggunakan DNS zonal.

  • zonal_dns_risky (Kueri yang tidak kompatibel): Metrik ini mewakili jumlah total kueri yang tidak dapat diselesaikan menggunakan DNS zonal. Kueri ini biasanya melibatkan komunikasi lintas region atau skenario lain saat resolusi zona gagal. Yang terpenting, jika metrik ini memiliki nilai yang bukan nol, project Anda belum siap untuk dimigrasikan. Anda harus mengatasi kueri yang tidak kompatibel ini sebelum beralih ke DNS zonal.

Untuk melihat metrik ini, gunakan Metrics Explorer di konsol Google Cloud.

  1. Di konsol Google Cloud, buka halaman  Metrics explorer:

    Buka Metrics explorer

    Jika Anda menggunakan kotak penelusuran untuk menemukan halaman ini, pilih hasil yang subjudulnya adalah Monitoring.

  2. Di sisi kanan toolbar yang berisi kolom Select a metric, klik Code editor, MQL, atau PromQL.

  3. Jika kolom input kueri tidak berjudul Kueri MQL, di sudut kanan bawah kolom input kueri, untuk Bahasa, pilih MQL.

  4. Di kolom input kueri, masukkan teks berikut persis seperti yang ditampilkan:

    fetch compute.googleapis.com/Location
    | metric 'compute.googleapis.com/global_dns/request_count'
    | every 1d
    | within 7d
    
  5. Klik tombol Run query.

    Konsol Google Cloud menampilkan diagram dua metrik (zonal_dns_ready dan zonal_dns_risky) serta jumlah kueri yang sesuai yang dibuat selama jangka waktu untuk setiap metrik.

    Screenshot diagram untuk metrik penggunaan DNS global.

  6. Periksa nilai untuk metrik zonal_dns_risky.

    • Jika nilainya 0, project siap dimigrasikan ke DNS zonal. Anda dapat memigrasikan project, seperti yang dijelaskan dalam Memigrasikan project yang siap ke DNS zona.
    • Jika nilainya bukan nol, seperti 0.02k seperti yang ditunjukkan dalam screenshot sebelumnya, ada beberapa kueri yang mungkin tidak berfungsi setelah Anda bermigrasi ke DNS zonal. Project belum siap untuk dimigrasikan. Lanjutkan dengan langkah-langkah di Memperbaiki kueri yang tidak kompatibel.

Memigrasikan project yang kompatibel dengan DNS zona

Gunakan salah satu opsi berikut untuk memigrasikan project yang siap beralih ke DNS zona:

  • Klik tombol Use Zonal DNS di konsol Google Cloud.

    1. Saat Anda melihat halaman Instance VM untuk project, jika project Anda sudah siap untuk migrasi (kompatibel dengan kueri DNS zona), banner akan menyertakan rekomendasi untuk Menggunakan DNS Zona. Rekomendasi ini didasarkan pada penggunaan DNS internal dalam project, tetapi terbatas pada 30 hari terakhir.

      Screenshot banner siap bermigrasi ke DNS zonal di konsol.

      Jika Anda mengklik tombol Use Zonal DNS, metadata project akan diperbarui untuk menggunakan DNS zona.

    2. Opsional: Lihat dan buat kueri metadata VM untuk mengonfirmasi perubahan metadata.

  • Ubah metadata project secara manual untuk menggunakan DNS zona.

    1. Aktifkan DNS zona untuk instance Anda dengan menetapkan entri metadata vmDnsSetting untuk project. Setelah Anda menetapkan entri metadata ini, instance compute Anda hanya dapat diakses oleh nama DNS zonanya (VM_NAME.ZONE.c.PROJECT_ID.internal) saat menggunakan jalur penelusuran. Instance masih mempertahankan jalur penelusuran zona dan global, tetapi nama DNS globalnya, yang tidak menyertakan ZONE sebagai bagian dari nama DNS internal, tidak lagi berfungsi. Hanya instance di region dan project yang sama yang dapat saling mengakses menggunakan nama global saat setelan ini diterapkan.

      Konsol

      1. Untuk memperbarui setelan di tingkat project, di konsol Google Cloud, buka halaman Metadata Compute Engine.

        Buka halaman Metadata kustom

      2. Klik Edit.

      3. Jika kunci dengan nilai VmDnsSetting ada, ubah nilainya menjadi ZonalOnly.

      4. Jika kunci dengan nilai VmDnsSetting tidak ada, klik Tambahkan item.

        • Pada kolom Kunci, masukkan VmDnsSetting.
        • Di kolom Value, masukkan ZonalOnly.
      5. Untuk menyelesaikan perubahan entri metadata kustom, klik Simpan.

      gcloud

      1. Untuk memperbarui setelan metadata untuk project saat ini, gunakan perintah project-info add-metadata.

        gcloud compute project-info add-metadata \
            --metadata vmDnsSetting=ZonalOnly
        
      2. Opsional: Untuk memverifikasi setelan metadata untuk project, gunakan perintah berikut:

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

        Ganti PROJECT_ID dengan nama project yang akan dikueri.

      REST

      Untuk memperbarui setelan metadata di tingkat project, buat permintaan POST menggunakan metode projects.setCommonInstanceMetadata.

      1. Opsional: Untuk melakukan penguncian optimis, Anda dapat menyediakan sidik jari secara opsional.

        Sidik jari adalah string karakter acak yang dihasilkan oleh Compute Engine. Sidik jari berubah setelah setiap permintaan, dan jika Anda memberikan sidik jari yang tidak cocok, permintaan Anda akan ditolak.

        Jika Anda tidak memberikan sidik jari, pemeriksaan konsistensi tidak akan dilakukan, dan permintaan projects.setCommonInstanceMetadata akan berhasil. Jika Anda menggunakan metode instances.setMetadata, sidik jari selalu diperlukan.

        Untuk mendapatkan sidik jari saat ini dari sebuah project, panggil metode project.get.

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

        Outputnya mirip dengan hal berikut ini:

        {
         "name": "myproject",
         "commonInstanceMetadata": {
           "kind": "compute#metadata",
           "fingerprint": "FikclA7UBC0=",
           ...
         }
        }
        
      2. Buat permintaan POST ke metode projects.setCommonInstanceMetadata untuk menetapkan key-value pair metadata:

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

        Ganti PROJECT_ID dengan project ID Anda.

    2. Setelah mengonfigurasi entri metadata vmDnsSetting untuk project, muat ulang lease DHCP di setiap instance dalam project tersebut. Anda dapat memuat ulang lease dengan memulai ulang instance, atau dengan menunggu hingga lease berakhir, atau dengan menjalankan salah satu perintah berikut:

      Instance Linux

      sudo dhclient -v -r
      

      Instance Windows

      ipconfig /renew
      
    3. Pastikan project Anda menggunakan DNS zona.

Memperbaiki kueri yang tidak kompatibel

Project yang belum siap dimigrasikan berarti setidaknya ada satu kueri DNS yang tidak kompatibel yang dibuat dalam jangka waktu tertentu, seperti 30 hari terakhir. Kueri yang tidak kompatibel mungkin memiliki atribut berikut:

  • Melakukan panggilan ke instance komputasi di project lain
  • Melakukan panggilan ke instance komputasi di region lain

Jika project Anda memiliki kueri yang tidak kompatibel, banner berikut akan muncul di halaman VM instances di konsol Google Cloud:

Banner yang menunjukkan bahwa project Anda belum siap dimigrasikan ke DNS zona.

Untuk memperbaiki semua kueri yang tidak kompatibel, sebaiknya gunakan nama domain yang sepenuhnya memenuhi syarat (FQDN) zonal dari instance sumber dalam kueri. Pendekatan ini memastikan resolusi kueri tetap tidak terganggu setelah memigrasikan project ke DNS zonal.

Untuk mengatasi kueri yang tidak kompatibel, lakukan hal berikut:

  1. Gunakan Logs Explorer untuk mengakses dan membuat kueri penggunaan DNS global untuk instance komputasi project Anda.

    Buka Logs Explorer

  2. Pilih project.

  3. Terapkan filter nama resource dan log:

    1. Klik Resource.
    2. Pada dialog Select resource, pilih VM Instance, lalu klik Apply.
    3. Klik Log name.
    4. Dalam dialog Select log names, pilih gdnsusage, lalu klik Apply.

    Atau, Anda dapat memasukkan kode berikut ke dalam kolom kueri:

       resource.type="gce_instance"
       log_name="projects/PROJECT_ID/logs/compute.googleapis.com%2Fgdnsusage"
      
  4. Di panel Query results, setiap kueri memiliki kolom jsonPayload. Setiap kolom jsonPayload berisi informasi berikut:

    • Nama VM sumber, project ID-nya, dan nama zona.
    • Nama VM tujuan, project ID-nya, dan nama zona.
    • Pesan debug yang memberikan informasi tentang cara mengupdate kueri DNS global yang tidak dapat di-resolve menggunakan nama DNS zona. Kueri ini dianggap sebagai kueri pemblokir migrasi yang harus Anda debug dan perbaiki.

      "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"
      
    • Jumlah kueri yang menunjukkan jumlah kueri pemblokiran migrasi yang dikirim VM sumber ke VM tujuan untuk hari tersebut.

    Screenshot berikut menunjukkan informasi kolom jsonPayload di halaman konsol Logs Explorer.

    Screenshot jsonPayload di hasil kueri log gdnsusage.

  5. Gunakan informasi di jsonPayload yang Anda peroleh di langkah sebelumnya untuk menentukan FQDN yang akan digunakan untuk memperbarui kueri DNS global secara manual agar menggunakan DNS zona, dan siapkan project untuk migrasi. Kasus penggunaan yang paling umum untuk tempat memperbarui FQDN dan menyelesaikan kompatibilitas adalah sebagai berikut:

    • Nama DNS internal dari server metadata: Tidak diperlukan tindakan karena nama DNS yang ditampilkan akan segera berubah menjadi FQDN zona setelah migrasi ke DNS zona. Jika nama DNS di-cache, Anda hanya perlu melakukan satu panggilan lagi untuk memperbarui nilai cache.
    • Nama DNS internal yang digunakan untuk mengakses VM di region lain: Jika memiliki aplikasi yang menggunakan nama DNS internal untuk VM di region yang berbeda, Anda dapat mengubah kebijakan atau file konfigurasi DHCP untuk menyertakan zona di region lain.
    • FQDN global hard code: Jika memiliki aplikasi yang menggunakan nama FQDN global hard code untuk VM, Anda dapat memperbarui panggilan dalam aplikasi untuk menggunakan nama DNS internal atau FQDN zona. Anda dapat melakukan perubahan ini melalui perubahan kode atau perubahan konfigurasi di Terraform.
    • VM dalam project layanan yang menggunakan jaringan VPC Bersama: Untuk me-resolve nama DNS VM dalam project layanan yang menggunakan jaringan VPC Bersama, Anda harus menggunakan FQDN zona VM.
  6. Setelah Anda memperbarui kueri DNS global untuk menggunakan DNS zona, lakukan hal berikut:

    1. Gunakan halaman Logs Explorer untuk membuat kueri penggunaan DNS global lagi. Setelah Anda memperbaiki semua kueri DNS global yang memblokir, tidak akan ada log debug yang ditampilkan dalam hasil kueri.

    2. Periksa kembali metrik pemantauan untuk melihat apakah semua kueri DNS yang tidak kompatibel telah dihapus.

Melihat log DNS global di Logs Explorer

Logs Explorer terutama menampilkan log DNS global untuk project dengan kueri yang tidak kompatibel dengan DNS zona. Log ini membantu Anda mengidentifikasi dan menganalisis kueri bermasalah tersebut sebelum melakukan migrasi.

Anda juga dapat menggunakan Logs Explorer untuk kueri yang tidak kompatibel ini guna melakukan hal berikut:

  • Buat dasbor: Visualisasikan pola kueri DNS global yang tidak kompatibel untuk mendapatkan insight tentang perilaku komunikasi aplikasi Anda.
  • Log gabungan: Menganalisis log DNS di seluruh organisasi untuk mengidentifikasi tren yang lebih luas dan potensi area yang perlu ditingkatkan.

Memeriksa apakah perubahan pada DNS zona memengaruhi project Anda

Setelah bermigrasi ke DNS zonal, Anda harus memastikan bahwa aplikasi dan layanan Anda masih berfungsi dengan benar. Karena DNS zona mengubah cara nama DNS internal diselesaikan, beberapa aplikasi mungkin mengalami masalah jika mengandalkan nama DNS global.

Bagian berikut menjelaskan cara memeriksa potensi dampaknya dan cara menyelesaikannya:

  1. Komunikasi instance command line

    Tugas: Coba lakukan ping pada satu instance dari instance lain menggunakan gcloud CLI.

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

    Potensi Error: "Tidak dapat me-resolve host"—Artinya, VM-A tidak dapat menemukan alamat IP untuk VM-B.

    Solusi: Perbarui nama host yang Anda gunakan untuk VM-B ke nama domain yang sepenuhnya memenuhi syarat (FQDN), yang menyertakan nama zona: INSTANCE_NAME.ZONE.c.PROJECT_ID.internal

  2. Komunikasi instance dalam layanan Compute Engine

    Tugas: Jika Anda menggunakan health check untuk grup instance terkelola (MIG) yang mengandalkan nama DNS internal, periksa apakah health check lulus.

    Error yang Mungkin Terjadi: "Pemeriksaan kesehatan gagal"—Hal ini menunjukkan bahwa pemeriksaan kesehatan tidak dapat mencapai targetnya karena masalah resolusi DNS.

    Penyelesaian: Pastikan health check menggunakan FQDN instance target, termasuk nama zona.

  3. Kasus penggunaan khusus aplikasi

    Banyak aplikasi mengandalkan DNS internal untuk tugas seperti berikut:

    • Menghubungkan ke database (misalnya, Cloud SQL)
    • Berinteraksi dengan antrean pesan (misalnya, Pub/Sub)

    • Potensi Error: Hal ini bervariasi bergantung pada aplikasi, tetapi dapat mencakup:

      • "Tidak dapat terhubung ke SERVICE_NAME"
      • "Waktu tunggu koneksi habis"
      • "Tidak ada host seperti itu yang diketahui"
    • Solusi: Periksa konfigurasi aplikasi Anda untuk memastikan aplikasi tersebut menggunakan FQDN (termasuk nama zona) saat mereferensikan layanan.

Kembali menggunakan DNS global

Anda dapat mengurungkan migrasi ke DNS zona dengan mengubah jenis DNS internal default kembali ke DNS global. Anda dapat melakukannya di tingkat organisasi, project, instance, atau penampung.

Kembali menggunakan DNS global untuk project

Untuk mengembalikan project agar menggunakan DNS global, selesaikan langkah-langkah berikut.

  1. Tambahkan hal berikut ke metadata project: vmDnsSetting=GlobalDefault.

    Untuk mengetahui informasi tentang cara menetapkan nilai metadata project, lihat Menetapkan dan menghapus metadata kustom.

  2. Verifikasi bahwa tidak ada instance dalam project yang memiliki nilai metadata vmDnsSetting yang ditetapkan ke ZonalOnly.

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

    Ganti INSTANCE_NAME dengan nama instance yang akan diperiksa.

  3. Muat ulang lease DHCP di setiap instance. Anda dapat memuat ulang lease dengan memulai ulang instance, menunggu hingga lease berakhir, atau dengan menjalankan salah satu perintah berikut di sistem operasi tamu:

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

Kembali menggunakan DNS global untuk instance

Untuk mengembalikan instance tertentu agar menggunakan DNS global, selesaikan langkah-langkah berikut.

  1. Perbarui metadata instance untuk menyertakan vmDnsSetting=GlobalDefault.

    Untuk mengetahui informasi tentang cara menetapkan nilai metadata instance komputasi, lihat Menetapkan dan menghapus metadata kustom.

  2. Untuk memaksa perubahan konfigurasi DNS, mulai ulang jaringan instance menggunakan salah satu perintah berikut:

    • Untuk Container-Optimized OS atau Ubuntu:

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

      sudo systemctl restart network
      

      atau

      sudo systemctl restart NetworkManager.service
      
    • Untuk Debian:

      sudo systemctl restart networking
      
    • Untuk sistem Linux dengan nmcli:

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

      ipconfig /renew
      

Kembali menggunakan DNS global untuk penampung

Jika Anda menjalankan aplikasi atau beban kerja dalam container, di Google Kubernetes Engine, atau di lingkungan fleksibel App Engine, konfigurasi DNS di setelan container Anda mungkin tidak otomatis diupdate sampai Anda memulai ulang container. Untuk menonaktifkan DNS zonal di aplikasi penampung ini, selesaikan langkah-langkah berikut.

  1. Tetapkan setelan metadata project vmDnsSetting ke GlobalDefault pada project yang memiliki penampung dan VM.

  2. Mulai ulang penampung agar setelan DNS-nya kembali ke status awal.

Memecahkan masalah proses migrasi DNS global ke DNS zona

Jika Anda mengalami masalah dengan proses migrasi, lihat panduan pemecahan masalah.

Langkah berikutnya