Menggunakan Cloud DNS untuk GKE


Halaman ini menjelaskan cara menggunakan Cloud DNS sebagai penyedia DNS Kubernetes untuk Google Kubernetes Engine (GKE).

Menggunakan Cloud DNS sebagai penyedia DNS tidak memungkinkan klien di luar cluster me-resolve dan menjangkau Service Kubernetes secara langsung. Anda tetap perlu mengekspos Service secara eksternal menggunakan Load Balancer dan mendaftarkan alamat IP eksternal cluster mereka di infrastruktur DNS Anda.

Untuk mengetahui informasi selengkapnya tentang penggunaan kube-dns sebagai penyedia DNS, lihat Penemuan layanan dan DNS. Untuk mempelajari cara menggunakan kube-dns versi kustom atau penyedia DNS kustom, lihat Menyiapkan Deployment kube-dns kustom.

Cara kerja Cloud DNS untuk GKE

Cloud DNS dapat digunakan sebagai penyedia DNS untuk GKE, yang menyediakan resolusi DNS Pod dan Service dengan DNS terkelola yang tidak memerlukan penyedia DNS yang dihosting cluster. Data DNS untuk Pod dan Service secara otomatis disediakan di Cloud DNS untuk alamat IP cluster, headless, dan Service nama eksternal.

Cloud DNS mendukung spesifikasi DNS Kubernetes lengkap dan memberikan resolusi untuk data A, AAAA, SRV, dan PTR untuk Service dalam cluster GKE. Data PTR diimplementasikan menggunakan aturan kebijakan respons.

Menggunakan Cloud DNS sebagai penyedia DNS untuk GKE memberikan banyak manfaat dibandingkan DNS yang dihosting cluster:

  • Menghapus overhead pengelolaan server DNS yang dihosting cluster. Cloud DNS tidak memerlukan penskalaan, pemantauan, atau pengelolaan instance DNS karena merupakan layanan terkelola sepenuhnya yang dihosting di infrastruktur Google yang sangat skalabel.
  • Resolusi lokal kueri DNS di setiap node GKE. Serupa dengan NodeLocal DNSCache, Cloud DNS meng-cache respons DNS secara lokal, sehingga memberikan resolusi DNS berlatensi rendah dan skalabilitas tinggi.
  • Integrasi dengan Kemampuan Observasi Google Cloud untuk pemantauan dan logging DNS. Untuk mengetahui informasi selengkapnya, baca Mengaktifkan dan menonaktifkan logging untuk zona yang dikelola pribadi.

Arsitektur

Jika Cloud DNS adalah penyedia DNS untuk GKE, pengontrol berjalan sebagai Pod yang dikelola GKE. Pod ini berjalan di node bidang kontrol cluster Anda dan menyinkronkan data DNS cluster ke zona DNS pribadi yang terkelola.

Diagram berikut menunjukkan cara bidang kontrol Cloud DNS dan bidang data menyelesaikan nama cluster:

Pod meminta alamat IP layanan menggunakan Cloud DNS.
Diagram: Menyelesaikan nama cluster

Dalam diagram, Service backend memilih Pod backend yang sedang berjalan. clouddns-controller membuat data DNS untuk Service backend.

Pod frontend mengirim permintaan DNS untuk menyelesaikan alamat IP dari Service bernamabackend ke Server metadata lokal Compute Engine di 169.254.169.254. Server metadata berjalan secara lokal pada node, yang mengirimkan cache yang tidak ditemukan ke Cloud DNS.

Bidang data Cloud DNS berjalan secara lokal dalam setiap node GKE atau instance virtual machine (VM) Compute Engine. Bergantung pada jenis Service Kubernetes, Cloud DNS me-resolve nama Service ke alamat IP virtualnya, untuk Service IP Cluster, atau daftar alamat IP endpoint, untuk Service Headless.

Setelah frontend Pod me-resolve alamat IP, Pod dapat mengirim traffic ke Service backend dan Pod apa pun di belakang Service.

Cakupan DNS

Cloud DNS memiliki dua jenis cakupan DNS, cakupan cluster GKE dan cakupan Virtual Private Cloud (VPC). Cluster tidak dapat beroperasi dalam kedua mode secara bersamaan.

  • Cakupan cluster GKE: Data DNS hanya dapat diselesaikan dalam cluster, yang merupakan perilaku yang sama dengan kube-dns. Hanya node yang berjalan di cluster GKE yang dapat me-resolve nama Service. Secara default, cluster memiliki nama DNS yang diakhiri dengan *.cluster.local. Nama-nama DNS ini hanya terlihat dalam cluster dan tidak tumpang tindih atau bertentangan dengan nama DNS *.cluster.local untuk cluster GKE lain dalam project yang sama. Ini adalah mode defaultnya.

    • Cakupan VPC aditif Cloud DNS:

      Cakupan VPC aditif Cloud DNS adalah fitur opsional yang memperluas cakupan cluster GKE agar Layanan headless dapat diselesaikan dari resource lain di VPC, seperti VM Compute Engine atau klien lokal yang terhubung menggunakan Cloud VPN atau Cloud Interconnect. Cakupan VPC tambahan adalah mode tambahan yang diaktifkan bersama cakupan cluster, yang dapat Anda enable atau nonaktifkan di cluster Anda tanpa memengaruhi waktu beroperasi atau kemampuan DNS (cakupan cluster).

  • Cakupan VPC: Data DNS dapat diselesaikan dalam seluruh VPC. VM Compute Engine dan klien lokal dapat terhubung menggunakan Cloud Interconnect atau Cloud VPN dan langsung me-resolve nama Service GKE. Anda harus menyetel domain kustom unik untuk setiap cluster, yang berarti bahwa semua data DNS Service dan Pod bersifat unik dalam VPC. Mode ini mengurangi hambatan komunikasi antara resource GKE dan non-GKE.

Tabel berikut mencantumkan perbedaan antara cakupan cluster GKE, cakupan VPC aditif Cloud DNS, dan cakupan VPC:

Fitur Cakupan cluster GKE Cakupan VPC aditif Cloud DNS Cakupan VPC
Cakupan Visibilitas DNS Hanya dalam cluster GKE Memperluas ke seluruh jaringan VPC Seluruh jaringan VPC
Resolusi Layanan Headless Dapat di-resolve dalam cluster Dapat di-resolve dalam cluster menggunakan `cluster.local` dan di seluruh VPC menggunakan akhiran cluster Dapat diselesaikan di dalam cluster dan di seluruh VPC menggunakan akhiran cluster
Persyaratan Domain Unik Tidak. Menggunakan `*.cluster.local` default Ya, Anda harus menetapkan domain kustom yang unik Ya, Anda harus menetapkan domain kustom yang unik
Konfigurasi Penyiapan Default, tanpa langkah tambahan Opsional saat pembuatan cluster
Dapat diaktifkan/dinonaktifkan kapan saja
Harus dikonfigurasi selama pembuatan cluster

Resource Cloud DNS

Saat Anda menggunakan Cloud DNS sebagai penyedia DNS untuk cluster GKE, pengontrol Cloud DNS membuat resource di Cloud DNS untuk project Anda. Resource yang dibuat GKE bergantung pada cakupan Cloud DNS.

Cakupan Zona pencarian maju Zona pencarian balik
Cakupan cluster 1 zona pribadi per cluster per zona Compute Engine (di region) 1 zona kebijakan respons per cluster per zona Compute Engine (di region)
Cakupan VPC aditif Cloud DNS 1 zona pribadi per cluster per zona Compute Engine (di region) per cluster (zona global)
1 Zona pribadi cakupan VPC per cluster (zona global)
1 zona kebijakan respons per cluster per zona Compute Engine (di region) per cluster (zona global)
1 Zona kebijakan respons cakupan VPC per cluster (zona global)
Cakupan VPC 1 zona pribadi per cluster (zona global) 1 zona kebijakan respons per cluster (zona global)

Konvensi penamaan yang digunakan untuk resource Cloud DNS ini adalah sebagai berikut:

Cakupan Zona pencarian maju Zona pencarian balik
Cakupan cluster gke-CLUSTER_NAME-CLUSTER_HASH-dns gke-CLUSTER_NAME-CLUSTER_HASH-rp
Cakupan VPC aditif Cloud DNS gke-CLUSTER_NAME-CLUSTER_HASH-dns untuk zona cakupan cluster
gke-CLUSTER_NAME-CLUSTER_HASH-dns-vpc untuk zona cakupan VPC
gke-CLUSTER_NAME-CLUSTER_HASH-rp untuk zona cakupan cluster
gke-NETWORK_NAME_HASH-rp untuk zona cakupan cluster
Cakupan VPC gke-CLUSTER_NAME-CLUSTER_HASH-dns gke-NETWORK_NAME_HASH-rp

Selain zona yang disebutkan dalam tabel sebelumnya, pengontrol Cloud DNS membuat zona berikut di project Anda, bergantung pada konfigurasi Anda:

Konfigurasi DNS kustom Jenis zona Konvensi penamaan zona
Domain stub Penerusan (zona global) gke-CLUSTER_NAME-CLUSTER_HASH-DOMAIN_NAME_HASH
Server nama upstream kustom Penerusan (zona global) gke-CLUSTER_NAME-CLUSTER_HASH-upstream

Untuk mempelajari lebih lanjut cara membuat domain stub kustom atau server nama upstream kustom, lihat Menambahkan resolver kustom untuk domain stub.

Zona terkelola dan zona penerusan

Untuk melayani traffic DNS internal, pengontrol Cloud DNS membuat zona DNS terkelola di setiap zona Compute Engine dari region tempat cluster berada. Misalnya, jika Anda men-deploy cluster di zona us-central1-c, pengontrol Cloud DNS akan membuat zona terkelola di us-central1-a, us-central1-b, us-central1-c, dan us-central1-f.

Untuk setiap stubDomain DNS, pengontrol Cloud DNS membuat satu zona penerusan.

Cloud DNS memproses setiap upstream DNS menggunakan satu zona terkelola dengan nama DNS ..

Harga

Jika Cloud DNS adalah penyedia DNS untuk cluster GKE Standard, kueri DNS dari Pod di dalam cluster GKE akan ditagih sesuai dengan harga Cloud DNS.

Kueri ke zona DNS cakupan VPC yang dikelola oleh GKE ditagih menggunakan harga Cloud DNS standar.

Persyaratan

Cloud DNS API harus diaktifkan di project Anda.

Cloud DNS untuk GKE memiliki persyaratan berikut untuk cakupan cluster:

  • Untuk Standar, GKE versi 1.24.7-gke.800, 1.25.3-gke.700 atau yang lebih baru.
  • Untuk Autopilot, GKE versi 1.25.9-gke.400, 1.26.4-gke.500 atau yang lebih baru.
  • Google Cloud CLI versi 411.0.0 atau yang lebih baru.

Cloud DNS untuk GKE memiliki persyaratan berikut untuk cakupan VPC aditif:

  • Untuk Standar, GKE versi 1.24.7-gke.800, 1.25.3-gke.700 atau yang lebih baru.
  • Untuk Autopilot, GKE versi 1.28 atau yang lebih baru.
  • Google Cloud CLI versi 471.0.0.
  • Cluster GKE harus menggunakan cakupan cluster Cloud DNS sebagai penyedia DNS default.

Cloud DNS untuk GKE memiliki persyaratan berikut untuk cakupan VPC:

  • Untuk Standard, GKE versi 1.19 atau yang lebih baru.
  • Google Cloud CLI versi 364.0.0 atau yang lebih baru.
  • Cloud DNS API harus diaktifkan di project Anda.

Batas dan pembatasan

Batasan berikut berlaku:

  • Cakupan VPC tidak didukung pada cluster Autopilot, hanya cakupan cluster yang didukung. Jika perlu me-resolve nama layanan headless yang berjalan di cluster GKE Autopilot, Anda harus menggunakan cakupan VPC tambahan.
  • Cloud DNS tidak mematuhi rezim kepatuhan Impact Level 4 (IL4). Cloud DNS untuk GKE tidak dapat digunakan di Assured Workload dengan skema kepatuhan IL4. Anda perlu menggunakan kube-dns di lingkungan yang diatur tersebut. Untuk cluster GKE Autopilot, pemilihan kube-dns atau Cloud DNS secara otomatis dilakukan berdasarkan rezim kepatuhan Anda.
  • Perubahan manual pada zona DNS pribadi terkelola tidak didukung dan akan ditimpa oleh pengontrol Cloud DNS. Modifikasi pada data DNS di zona tersebut tidak akan dipertahankan saat pengontrol dimulai ulang.
  • Setelah Anda mengaktifkan Cloud DNS untuk GKE di dalam cluster, kube-dns akan terus berjalan di cluster tersebut. Anda dapat menonaktifkan kube-dns dengan menskalakan Deployment dan autoscaler kube-dns ke nol.
  • Anda tidak dapat mengubah cakupan DNS dalam cluster setelah menetapkan cakupan dengan flag --cluster-dns-scope. Jika Anda perlu mengubah cakupan DNS, buat ulang cluster dengan cakupan DNS yang berbeda.
  • Domain stub kustom dan konfigurasi server DNS upstream berlaku untuk konfigurasi DNS Pod dan node. Pod yang menggunakan jaringan host atau proses yang berjalan langsung di host juga menggunakan konfigurasi server nama upstream dan domain stub. Ini hanya didukung dalam Standard.
  • Domain stub kustom dan server nama upstream yang dikonfigurasi melalui kube-dns Configmap secara otomatis diterapkan ke Cloud DNS untuk DNS cakupan cluster. DNS cakupan VPC mengabaikan ConfigMap kube-dns dan Anda harus menerapkan konfigurasi ini secara langsung di Cloud DNS. Ini hanya didukung dalam Standard.
  • Tidak ada jalur migrasi dari kube-dns ke cakupan VPC, operasi ini mengganggu. Buat ulang cluster saat beralih dari kube-dns ke cakupan VPC atau sebaliknya.
  • Untuk cakupan VPC, rentang alamat IP sekunder untuk Service tidak boleh dibagikan dengan cluster lain di subnetwork tersebut.
  • Untuk cakupan VPC, kebijakan respons yang terkait dengan data PTR dilampirkan ke jaringan VPC. Jika ada kebijakan respons lain yang terikat dengan jaringan cluster, resolusi data PTR untuk alamat IP layanan Kubernetes akan gagal.
  • Jika Anda mencoba membuat Service headless dengan jumlah Pod yang melebihi kuota yang diizinkan, Cloud DNS tidak akan membuat kumpulan atau kumpulan record untuk Service.

Kuota

Cloud DNS menggunakan kuota untuk membatasi jumlah resource yang dapat dibuat oleh GKE untuk entri DNS. Kuota dan batas untuk Cloud DNS mungkin berbeda dengan batasan kube-dns untuk project Anda.

Kuota default berikut diterapkan pada setiap zona terkelola di project Anda saat menggunakan Cloud DNS untuk GKE:

Resource DNS Kubernetes Resource Cloud DNS yang sesuai Kuota
Jumlah data DNS Byte maks per zona terkelola 2.000.000 (maks. 50 MB untuk zona terkelola)
Jumlah Pod per Service headless (IPv4/IPv6) Jumlah data per kumpulan data resource GKE 1.24 hingga 1.25: 1.000 (IPv4/IPv6)
GKE 1.26 dan yang lebih baru: 3.500/2.000 (IPv4/IPv6)
Jumlah cluster GKE dalam sebuah project Jumlah kebijakan respons per project 100
Jumlah data PTR per cluster Jumlah aturan per kebijakan respons 100.000

Batas resource

Resource Kubernetes yang Anda buat per cluster berkontribusi terhadap batas resource Cloud DNS, seperti dijelaskan dalam tabel berikut:

Batas Kontribusi terhadap batas
Kumpulan data resource per zona terkelola Jumlah layanan ditambah jumlah endpoint layanan headless dengan nama host yang valid, per cluster.
Kumpulan data per kumpulan data resource Jumlah endpoint per layanan headless. Tidak memengaruhi jenis layanan lainnya.
Jumlah aturan per kebijakan respons Untuk cakupan cluster, jumlah layanan ditambah jumlah endpoint layanan headless dengan nama host yang valid per cluster. Untuk cakupan VPC, jumlah layanan ditambah jumlah endpoint headless dengan nama host dari semua cluster di VPC.

Untuk mempelajari lebih lanjut cara pembuatan data DNS untuk Kubernetes, lihat Penemuan Layanan Berbasis DNS Kubernetes.

Sebelum memulai

Sebelum memulai, pastikan Anda telah menjalankan tugas berikut:

  • Aktifkan Google Kubernetes Engine API.
  • Aktifkan Google Kubernetes Engine API
  • Jika ingin menggunakan Google Cloud CLI untuk tugas ini, instal lalu initialize gcloud CLI. Jika sebelumnya Anda telah menginstal gcloud CLI, dapatkan versi terbaru dengan menjalankan gcloud components update.

Mengaktifkan DNS cakupan cluster

Dalam DNS cakupan cluster, hanya node yang berjalan di cluster GKE yang dapat menyelesaikan nama layanan, dan nama layanan tidak bertentangan di antara cluster. Perilaku ini sama dengan kube-dns di cluster GKE, yang berarti Anda dapat memigrasikan cluster dari kube-dns ke cakupan cluster Cloud DNS tanpa periode nonaktif atau perubahan pada aplikasi Anda.

Diagram berikut menunjukkan cara Cloud DNS membuat zona DNS pribadi untuk cluster GKE. Hanya proses dan Pod yang berjalan di node dalam cluster yang dapat me-resolve data DNS cluster, karena hanya node yang berada dalam cakupan DNS.

Pod di node berbeda yang me-resolve Service dalam cluster GKE.
Diagram: DNS cakupan cluster

Mengaktifkan DNS cakupan cluster di cluster baru

Cluster GKE Autopilot

Cluster Autopilot baru pada versi 1.25.9-gke.400, 1.26.4-gke.500, atau yang lebih baru akan ditetapkan secara default ke cakupan cluster Cloud DNS.

Cluster GKE Standar

Anda dapat membuat cluster GKE Standard dengan cakupan cluster Cloud DNS yang diaktifkan menggunakan gcloud CLI atau Konsol Google Cloud:

gcloud

Buat cluster menggunakan flag --cluster-dns:

gcloud container clusters create CLUSTER_NAME \
    --cluster-dns=clouddns \
    --cluster-dns-scope=cluster \
    --location=COMPUTE_LOCATION

Ganti kode berikut:

Flag --cluster-dns-scope=cluster bersifat opsional dalam perintah ini karena cluster adalah nilai defaultnya.

Konsol

  1. Buka halaman Google Kubernetes Engine di konsol Google Cloud.

    Buka Google Kubernetes Engine

  2. Klik Create.

  3. Dari panel navigasi, pada Cluster, klik Networking.

  4. Di bagian DNS provider, klik Cloud DNS.

  5. Pilih Cakupan cluster.

  6. Konfigurasi cluster Anda sesuai kebutuhan.

  7. Klik Create.

Mengaktifkan DNS cakupan cluster di cluster yang ada

Cluster GKE Autopilot

Anda tidak dapat memigrasikan cluster GKE Autopilot yang ada dari kube-dns ke cakupan cluster Cloud DNS. Untuk mengaktifkan cakupan cluster Cloud DNS, buat ulang cluster Autopilot dalam versi 1.25.9-gke.400, 1.26.4-gke.500, atau yang lebih baru.

Cluster GKE Standar

Anda dapat memigrasikan cluster GKE Standard yang sudah ada dari kube-dns ke cakupan cluster Cloud DNS menggunakan gcloud CLI atau Konsol Google Cloud dalam cluster GKE Standard.

Saat Anda memigrasikan cluster yang ada, node dalam cluster tidak menggunakan Cloud DNS sebagai penyedia DNS hingga Anda membuat ulang node.

Setelah Cloud DNS diaktifkan untuk sebuah cluster, setelan hanya akan diterapkan jika Anda mengupgrade kumpulan node yang ada atau menambahkan kumpulan node baru ke cluster tersebut. Saat Anda mengupgrade kumpulan node, node akan dibuat ulang.

Anda juga dapat memigrasikan cluster yang memiliki aplikasi yang berjalan tanpa mengganggu komunikasi cluster dengan mengaktifkan Cloud DNS sebagai penyedia DNS di setiap kumpulan node secara terpisah. Sebagian node beroperasi setiap saat karena beberapa kumpulan node menggunakan kube-dns dan beberapa kumpulan node menggunakan Cloud DNS.

Pada langkah berikut, Anda akan mengaktifkan Cloud DNS untuk sebuah cluster, lalu mengupgrade kumpulan node Anda. Mengupgrade kumpulan node akan membuat ulang node. Kemudian, node menggunakan Cloud DNS untuk resolusi DNS, bukan kube-dns.

gcloud

  1. Update cluster yang ada:

    gcloud container clusters update CLUSTER_NAME \
        --cluster-dns=clouddns \
        --cluster-dns-scope=cluster \
        --location=COMPUTE_LOCATION
    

    Ganti kode berikut:

    Responsnya mirip dengan hal berikut ini:

    All the node-pools in the cluster need to be re-created by the user to start using Cloud DNS for DNS lookups. It is highly recommended to complete this step
    shortly after enabling Cloud DNS.
    Do you want to continue (Y/n)?
    

    Setelah mengonfirmasi, pengontrol Cloud DNS akan berjalan di bidang kontrol GKE, tetapi Pod Anda tidak akan menggunakan Cloud DNS untuk resolusi DNS sebelum Anda mengupgrade kumpulan node atau menambahkan kumpulan node baru ke cluster.

  2. Upgrade kumpulan node di cluster untuk menggunakan Cloud DNS:

    gcloud container clusters upgrade CLUSTER_NAME \
        --node-pool=POOL_NAME \
        --location=COMPUTE_LOCATION
    

    Ganti kode berikut:

    • CLUSTER_NAME: nama cluster.
    • POOL_NAME: nama kumpulan node yang akan diupgrade.

    Jika kumpulan node dan bidang kontrol menjalankan versi yang sama, upgrade bidang kontrol terlebih dahulu, seperti yang dijelaskan di Mengupgrade bidang kontrol secara manual, lalu lakukan upgrade node pool.

    Konfirmasi respons dan ulangi perintah ini untuk setiap node pool dalam cluster. Jika cluster Anda memiliki satu node pool, hapus flag --node-pool.

Konsol

  1. Buka halaman Google Kubernetes Engine di konsol Google Cloud.

    Buka Google Kubernetes Engine

  2. Klik nama cluster yang ingin diubah.

  3. Di bagian Networking, pada kolom DNS provider, klik Edit DNS provider.

  4. Klik Cloud DNS.

  5. Klik Cakupan cluster.

  6. Klik Simpan perubahan.

Aktifkan cakupan VPC aditif Cloud DNS

Bagian ini menjelaskan langkah-langkah untuk mengaktifkan atau menonaktifkan cakupan VPC aditif Cloud DNS, sebagai add-on untuk cakupan cluster Cloud DNS.

Mengaktifkan cakupan VPC aditif Cloud DNS di cluster baru

Anda dapat mengaktifkan DNS cakupan VPC di cluster GKE baru menggunakan gcloud CLI atau Konsol Google Cloud.

Untuk Autopilot

gcloud container clusters create-auto CLUSTER_NAME \
    --additive-vpc-scope-dns-domain=UNIQUE_CLUSTER_DOMAIN

Ganti kode berikut:

  • CLUSTER_NAME: nama cluster.
  • UNIQUE_CLUSTER_DOMAIN: nama domain. Anda harus memastikan nama ini unik dalam VPC karena GKE tidak mengonfirmasi nilai ini. Anda tidak dapat mengubah nilai ini setelah ditetapkan. Anda tidak boleh menggunakan domain yang berakhiran ".local", atau Anda mungkin mengalami kegagalan resolusi DNS.

Untuk Standar

gcloud container clusters create CLUSTER_NAME \
    --cluster-dns-scope=cluster \
    --additive-vpc-scope-dns-domain=UNIQUE_CLUSTER_DOMAIN

Ganti kode berikut:

  • CLUSTER_NAME: nama cluster.
  • UNIQUE_CLUSTER_DOMAIN: nama domain. Anda harus memastikan bahwa nama ini unik dalam VPC karena GKE tidak mengonfirmasi nilai ini. Anda tidak dapat mengubah nilai ini setelah ditetapkan. Anda tidak boleh menggunakan domain yang berakhiran ".local", atau Anda mungkin mengalami kegagalan resolusi DNS.

Mengaktifkan cakupan VPC aditif Cloud DNS di cluster yang ada

Untuk mengaktifkan cakupan VPC aditif Cloud DNS dalam cluster yang ada, aktifkan Cloud DNS untuk cluster terlebih dahulu, lalu upgrade kumpulan node Anda. Mengupgrade kumpulan node akan membuat ulang node. Node kemudian menggunakan Cloud DNS untuk resolusi DNS, bukan kube-dns.

Untuk mengaktifkan cakupan VPC aditif Cloud DNS dalam cluster yang ada:

gcloud container clusters update CLUSTER_NAME \
    --enable-additive-vpc-scope \
    --additive-vpc-scope-dns-domain=UNIQUE_CLUSTER_DOMAIN

Ganti kode berikut:

  • CLUSTER_NAME: nama cluster.
  • UNIQUE_CLUSTER_DOMAIN: nama domain. Anda harus memastikan bahwa nama ini unik dalam VPC karena GKE tidak mengonfirmasi nilai ini. Anda tidak dapat mengubah nilai ini setelah ditetapkan. Anda tidak boleh menggunakan domain yang berakhiran ".local", atau mungkin mengalami kegagalan resolusi DNS.

Mengaktifkan DNS cakupan VPC

Dalam DNS cakupan VPC, nama DNS cluster dapat diselesaikan dalam seluruh VPC. Setiap klien dalam VPC dapat me-resolve data DNS cluster.

DNS cakupan VPC memungkinkan kasus penggunaan berikut:

  • Penemuan layanan headless untuk klien non-GKE dalam VPC yang sama.
  • Resolusi Service GKE dari klien cloud lokal atau pihak ketiga. Untuk mengetahui informasi selengkapnya, lihat Kebijakan server masuk.
  • Resolusi layanan saat klien dapat menentukan cluster mana yang ingin mereka komunikasikan menggunakan domain DNS cluster kustom.

Dalam diagram berikut, dua cluster GKE menggunakan DNS cakupan VPC di VPC yang sama. Kedua cluster memiliki domain DNS kustom, .cluster1 dan .cluster2, bukan domain .cluster.local default. VM berkomunikasi dengan Service backend headless dengan me-resolve backend.default.svc.cluster1. Cloud DNS menyelesaikan Service headless ke setiap IP Pod di Service dan VM berkomunikasi langsung dengan IP Pod.

Klien me-resolve ke Service headless dari luar cluster GKE.
Diagram: DNS cakupan VPC

Anda juga dapat menjalankan jenis resolusi ini dari jaringan lain saat terhubung ke VPC melalui Cloud Interconnect atau Cloud VPN. Kebijakan server DNS memungkinkan klien dari jaringan yang terhubung ke VPC untuk me-resolve nama di Cloud DNS, yang mencakup Service GKE jika cluster menggunakan DNS cakupan VPC.

Mengaktifkan DNS cakupan VPC di cluster yang ada

Migrasi hanya didukung di GKE Standard dan tidak di GKE Autopilot.

Cluster GKE Autopilot

Anda tidak dapat memigrasikan cluster GKE Autopilot dari kube-dns ke cakupan VPC Cloud DNS.

Cluster GKE Standar

Anda dapat memigrasikan cluster GKE yang sudah ada dari kube-dns ke cakupan VPC Cloud DNS menggunakan gcloud CLI atau Konsol Google Cloud.

Setelah Cloud DNS diaktifkan untuk sebuah cluster, setelan hanya akan diterapkan jika Anda mengupgrade kumpulan node yang ada atau menambahkan kumpulan node baru ke cluster tersebut. Saat Anda mengupgrade kumpulan node, node akan dibuat ulang.

Pada langkah berikut, Anda akan mengaktifkan Cloud DNS untuk sebuah cluster, lalu mengupgrade kumpulan node Anda. Mengupgrade kumpulan node akan membuat ulang node. Kemudian, node menggunakan Cloud DNS untuk resolusi DNS, bukan kube-dns.

gcloud

  1. Update cluster yang ada:

    gcloud container clusters update CLUSTER_NAME \
        --cluster-dns=clouddns \
        --cluster-dns-scope=vpc \
        --cluster-dns-domain=CUSTOM_DOMAIN \
        --location=COMPUTE_LOCATION
    

    Ganti kode berikut:

    • CLUSTER_NAME: nama cluster.
    • COMPUTE_LOCATION: lokasi Compute Engine untuk cluster.
    • CUSTOM_DOMAIN: nama domain. Anda harus memastikan bahwa nama ini unik dalam VPC karena GKE tidak mengonfirmasi nilai ini. Anda tidak dapat mengubah nilai ini setelah ditetapkan. Anda tidak boleh menggunakan domain yang berakhiran ".local", atau mungkin mengalami kegagalan resolusi DNS.

    Responsnya mirip dengan hal berikut ini:

    All the node-pools in the cluster need to be re-created by the user to start using Cloud DNS for DNS lookups. It is highly recommended to complete this step
    shortly after enabling Cloud DNS.
    Do you want to continue (Y/n)?
    

    Setelah Anda mengonfirmasi, pengontrol Cloud DNS berjalan di bidang kontrol GKE. Pod Anda tidak akan menggunakan Cloud DNS untuk resolusi DNS sebelum Anda mengupgrade kumpulan node atau menambahkan node pool baru ke cluster.

  2. Upgrade kumpulan node di cluster untuk menggunakan Cloud DNS:

    gcloud container clusters upgrade CLUSTER_NAME \
        --node-pool=POOL_NAME
    

    Ganti kode berikut:

    • CLUSTER_NAME: nama cluster.
    • POOL_NAME: nama kumpulan node yang akan diupgrade.

    Jika kumpulan node dan bidang kontrol menjalankan versi yang sama, upgrade bidang kontrol terlebih dahulu, seperti yang dijelaskan di Mengupgrade bidang kontrol secara manual, lalu lakukan upgrade node pool.

    Konfirmasi respons dan ulangi perintah ini untuk setiap node pool dalam cluster. Jika cluster Anda memiliki satu node pool, hapus flag --node-pool.

Konsol

  1. Buka halaman Google Kubernetes Engine di konsol Google Cloud.

    Buka Google Kubernetes Engine

  2. Klik nama cluster yang ingin diubah.

  3. Di bagian Networking, pada kolom DNS provider, klik Edit DNS provider.

  4. Klik Cloud DNS.

  5. Klik VPC scope.

  6. Klik Simpan perubahan.

Memverifikasi Cloud DNS

Pastikan Cloud DNS untuk GKE berfungsi dengan benar untuk cluster Anda:

  1. Pastikan node Anda menggunakan Cloud DNS dengan terhubung ke Pod pada sebuah node dan menjalankan perintah cat /etc/resolv.conf:

    kubectl exec -it POD_NAME -- cat /etc/resolv.conf | grep nameserver
    

    Ganti POD_NAME dengan nama Pod.

    Berdasarkan mode cluster, outputnya mirip dengan yang berikut ini:

    Cluster GKE Autopilot

    nameserver 169.254.20.10
    

    Karena NodeLocal DNSCache diaktifkan secara default di GKE Autopilot, Pod menggunakan NodeLocal DNSCache.

    Hanya jika cache lokal tidak memiliki entri untuk nama yang dicari, NodeLocal DNSCache akan meneruskan permintaan ke Cloud DNS.

    Cluster GKE Standar

    nameserver 169.254.169.254
    

    Pod menggunakan 169.254.169.254 sebagai nameserver, yang merupakan alamat IP server metadata tempat paket data Cloud DNS memproses permintaan di port 53. Node tidak lagi menggunakan alamat Service kube-dns untuk resolusi DNS dan semua resolusi DNS terjadi di node lokal.

    Jika output-nya adalah alamat IP yang mirip dengan 10.x.y.10, Pod menggunakan kube-dns. Lihat bagian Pemecahan Masalah untuk memahami mengapa pod masih menggunakan kube-dns.

    Jika output-nya 169.254.20.10, artinya Anda telah mengaktifkan NodeLocal DNSCache di cluster, berarti Pod menggunakan NodeLocal DNSCache ini.

  2. Deploy aplikasi sampel ke cluster Anda:

    kubectl run dns-test --image us-docker.pkg.dev/google-samples/containers/gke/hello-app:2.0
    
  3. Ekspos aplikasi contoh dengan Service:

    kubectl expose pod dns-test --name dns-test-svc --port 8080
    
  4. Pastikan bahwa Service berhasil di-deploy:

    kubectl get svc dns-test-svc
    

    Outputnya mirip dengan hal berikut ini:

    NAME           TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)    AGE
    dns-test-svc   ClusterIP   10.47.255.11    <none>        8080/TCP   6m10s
    

    Nilai CLUSTER-IP adalah alamat IP virtual untuk cluster Anda. Dalam contoh ini, alamat IP virtual adalah 10.47.255.11.

  5. Pastikan nama Service dibuat sebagai data di zona DNS pribadi untuk cluster Anda:

    gcloud dns record-sets list \
        --zone=PRIVATE_DNS_ZONE \
        --name=dns-test-svc.default.svc.cluster.local.
    

    Ganti PRIVATE_DNS_ZONE dengan nama zona DNS yang dikelola.

    Outputnya mirip dengan hal berikut ini:

    NAME: dns-test-svc.default.svc.cluster.local.
    TYPE: A
    TTL: 30
    DATA: 10.47.255.11
    

Menonaktifkan Cloud DNS untuk GKE

Cluster GKE Autopilot

Anda tidak dapat menonaktifkan Cloud DNS di cluster GKE Autopilot yang dibuat dengan Cloud DNS secara default. Lihat persyaratan untuk mengetahui informasi selengkapnya tentang cluster GKE Autopilot yang menggunakan Cloud DNS secara default.

Cluster GKE Standar

Anda dapat menonaktifkan cakupan cluster Cloud DNS menggunakan gcloud CLI atau Konsol Google Cloud di cluster GKE Standar.

gcloud

Update cluster untuk menggunakan kube-dns:

gcloud container clusters update CLUSTER_NAME \
    --cluster-dns=default

Konsol

  1. Buka halaman Google Kubernetes Engine di konsol Google Cloud.

    Buka Google Kubernetes Engine

  2. Klik nama cluster yang ingin diubah.

  3. Di bagian Networking, pada kolom DNS provider, klik Edit DNS provider.

  4. Klik Kube-dns.

  5. Klik Simpan perubahan.

Nonaktifkan cakupan VPC aditif Cloud DNS

Saat Anda menonaktifkan cakupan VPC aditif Cloud DNS untuk cluster, hanya data DNS di zona pribadi yang terhubung ke jaringan VPC yang akan dihapus. Kumpulan data di zona DNS pribadi untuk cluster GKE akan tetap ada, yang dikelola oleh Cloud DNS untuk GKE, hingga layanan headless dihapus dari cluster.

Untuk menonaktifkan cakupan VPC aditif Cloud DNS, jalankan perintah berikut:

gcloud container clusters update CLUSTER_NAME \
    --disable-additive-vpc-scope

Ganti CLUSTER_NAME dengan nama cluster.

Tindakan ini akan mempertahankan cluster Anda dengan cakupan cluster Cloud DNS yang aktif untuk menyediakan resolusi DNS dari dalam cluster.

Pembersihan

Setelah menyelesaikan latihan di halaman ini, ikuti langkah berikut untuk menghapus resource dan mencegah timbulnya biaya yang tidak diinginkan pada akun Anda:

  1. Hapus layanan:

    kubectl delete service dns-test-svc
    
  2. Hapus Pod:

    kubectl delete Pod dns-test
    
  3. Anda juga dapat menghapus cluster.

Menggunakan Cloud DNS dengan VPC Bersama

Cloud DNS untuk GKE mendukung VPC Bersama untuk VPC dan cakupan cluster.

Pengontrol GKE membuat zona pribadi terkelola dalam project yang sama dengan cluster GKE.

Akun layanan GKE untuk cluster GKE tidak memerlukan Identity and Access Management (IAM) untuk DNS di luar project-nya sendiri karena zona terkelola dan cluster GKE berada dalam project yang sama.

Lebih dari satu cluster per project layanan

Mulai GKE versi 1.22.3-gke.700, 1.21.6-gke.1500, Anda dapat membuat cluster di beberapa project layanan yang mereferensikan VPC dalam project host yang sama. Jika sudah memiliki cluster yang menggunakan VPC Bersama dan cakupan VPC Cloud DNS, Anda harus memigrasikannya secara manual dengan langkah berikut:

  • Upgrade cluster yang ada yang mengaktifkan VPC Bersama ke GKE versi 1.22.3-gke.700+ atau 1.21.6-gke.1500+.
  • Migrasikan kebijakan respons dari project layanan ke project host. Anda hanya perlu melakukan migrasi ini sekali per jaringan VPC Bersama.

Anda dapat memigrasikan kebijakan respons menggunakan Konsol Google Cloud.

Lakukan langkah-langkah berikut pada project layanan Anda:

  1. Buka halaman Cloud DNS zone.

    Buka zona Cloud DNS

  2. Klik tab Response policy zone.

  3. Klik kebijakan respons untuk jaringan VPC Anda. Anda dapat mengidentifikasi kebijakan respons melalui deskripsi, yang mirip dengan "Kebijakan respons untuk cluster GKE di jaringan NETWORK_NAME".

  4. Klik tab In use by.

  5. Di samping nama project host, klik untuk menghapus binding jaringan.

  6. Klik tab Response policy rules.

  7. Pilih semua entri dalam tabel.

  8. Klik Remove response policy rules.

  9. Klik Delete response policy.

Setelah Anda menghapus kebijakan respons, pengontrol DNS akan membuat kebijakan respons di project host secara otomatis. Cluster dari proyek layanan lainnya menggunakan kebijakan respons ini.

Mendukung domain stub kustom dan server nama upstream

Cloud DNS untuk GKE mendukung domain stub kustom dan server nama upstream yang dikonfigurasi menggunakan kube-dns ConfigMap. Dukungan ini hanya tersedia untuk cakupan cluster GKE.

Cloud DNS menerjemahkan nilai stubDomains dan upstreamNameservers menjadi zona penerusan Cloud DNS.

Masalah umum

Terraform berencana membuat ulang cluster Autopilot karena perubahan dns_config

Jika menggunakan terraform-provider-google atau terraform-provider-google-beta, Anda mungkin mengalami masalah saat Terraform mencoba membuat ulang cluster Autopilot. Error ini terjadi karena cluster Autopilot yang baru dibuat dan menjalankan versi 1.25.9-gke.400, 1.26.4-gke.500, 1.27.1-gke.400, atau yang lebih baru menggunakan Cloud DNS sebagai penyedia DNS, bukan kube-dns.

Masalah ini di-resolve di penyedia Terraform Google Cloud versi 4.80.0.

Jika tidak dapat mengupdate versi terraform-provider-google atau terraform-provider-google-beta, Anda dapat menambahkan lifecycle.ignore_changes ke resource untuk memastikan bahwa google_container_cluster mengabaikan perubahan pada dns_config .

  lifecycle {
    ignore_changes = [
      dns_config,
    ]
  }

Pemecahan masalah

Untuk mempelajari cara mengaktifkan logging DNS, baca bagian Mengaktifkan dan menonaktifkan logging untuk zona terkelola pribadi.

Untuk mengetahui informasi selengkapnya tentang cara memecahkan masalah DNS, lihat Memecahkan Masalah DNS di GKE.

Tidak dapat memperbarui cluster yang ada atau membuat cluster dengan mengaktifkan Cloud DNS

Pastikan Anda menggunakan versi yang benar. Cloud DNS untuk GKE memerlukan GKE versi 1.19 atau yang lebih baru untuk cluster yang menggunakan cakupan VPC, atau GKE versi 1.24.7-gke.800, 1.25.3-gke.700 atau yang lebih baru untuk cluster yang menggunakan cakupan cluster.

Pod menggunakan kube-dns bahkan setelah Cloud DNS diaktifkan di cluster yang ada

Pastikan Anda telah mengupgrade atau membuat ulang node pool setelah mengaktifkan Cloud DNS di cluster. Hingga langkah ini selesai, Pod akan terus menggunakan kube-dns.

Pod tidak dapat me-resolve pencarian DNS

  1. Pastikan bahwa Pod menggunakan Cloud DNS dengan terhubung ke Pod dan menjalankan perintah cat /etc/resolv.conf:

    kubectl exec -it POD_NAME -- cat /etc/resolv.conf | grep nameserver
    

    Ganti POD_NAME dengan nama Pod.

    Outputnya mirip dengan hal berikut ini:

    nameserver 169.254.169.254
    

    Jika output-nya adalah alamat IP yang mirip dengan 10.x.y.10 atau 34.118.224.10 (hanya di cluster GKE Autopilot dengan versi 1.27 dan yang lebih baru), Pod menggunakan kube-dns. Jika output-nya adalah 169.254.20.10, berarti Pod menggunakan NodeLocal DNSCache.

  2. Pastikan zona terkelola ada dan berisi entri DNS yang diperlukan:

    gcloud dns managed-zones list --format list
    

    Outputnya mirip dengan hal berikut ini:

     - creationTime: 2021-02-12T19:24:37.045Z
       description: Private zone for GKE cluster "cluster1" with cluster suffix "cluster.local" in project "project-243723"
       dnsName: cluster.local.
       id: 5887499284756055830
       kind: dns#managedZone
       name: gke-cluster1-aa94c1f9-dns
       nameServers: ['ns-gcp-private.googledomains.com.']
       privateVisibilityConfig: {'kind': 'dns#managedZonePrivateVisibilityConfig'}
       visibility: private
    

    Nilai name dalam respons menunjukkan bahwa Google Cloud membuat zona pribadi bernama gke-cluster1-aa94c1f9-dns.

  3. Pastikan Cloud DNS berisi entri untuk cluster Anda:

    gcloud dns record-sets list --zone ZONE_NAME | grep SERVICE_NAME
    

    Ganti kode berikut:

    • ZONE_NAME: nama zona pribadi.
    • SERVICE_NAME: nama layanan.

    Output menunjukkan bahwa Cloud DNS berisi data A untuk domain dns-test.default.svc.cluster.local. dan alamat IP cluster Anda, 10.47.255.11:

    dns-test.default.svc.cluster.local.                A     30     10.47.255.11
    
  4. Aktifkan logging Cloud DNS untuk melacak kueri. Setiap entri log berisi informasi tentang kueri, termasuk latensi DNS.

Pencarian DNS pada node gagal setelah Cloud DNS diaktifkan di cluster

Jika Anda mengaktifkan Cloud DNS cakupan cluster di cluster GKE yang memiliki domain stub kustom atau server nama upstream, konfigurasi kustom akan berlaku untuk node dan Pod di cluster karena Cloud DNS tidak dapat membedakan antara Pod dan node Permintaan DNS. Pencarian DNS pada node mungkin gagal jika server upstream khusus tidak dapat menyelesaikan kueri.

Tidak dapat mengupdate cluster yang ada atau membuat cluster dengan cakupan VPC aditif Cloud DNS yang diaktifkan

Pastikan Anda menggunakan versi yang benar. Cakupan VPC Cloud DNS Additive memerlukan GKE versi 1.28 atau yang lebih baru.

Pod tidak dapat me-resolve pencarian DNS

  1. Pastikan bahwa Pod menggunakan Cloud DNS dengan terhubung ke Pod dan menjalankan perintah cat /etc/resolv.conf:

    kubectl exec -it POD_NAME -- cat /etc/resolv.conf | grep nameserver
    

    Ganti POD_NAME dengan nama Pod.

    Outputnya mirip dengan hal berikut ini:

    nameserver 169.254.169.254
    

    Jika output-nya adalah alamat IP yang mirip dengan 10.x.y.10 atau 34.118.224.10 (hanya di cluster GKE Autopilot dengan versi 1.27 dan yang lebih baru), Pod menggunakan kube-dns. Jika output-nya adalah 169.254.20.10, berarti Pod menggunakan NodeLocal DNSCache.

  2. Pastikan zona terkelola ada dan berisi entri DNS yang diperlukan:

    gcloud dns managed-zones list --format list
    

    Outputnya mirip dengan hal berikut ini:

    gke-cluster-1-cbdc0678-dns  cluster.local.   Private zone for GKE cluster "cluster-1" with cluster suffix "cluster.local." in project "PROJECT_NAME" with scope "CLUSTER_SCOPE"  private
    gke-cluster-1-cbdc-dns-vpc  CLUSTER_DOMAIN.  Private zone for GKE cluster "cluster-1" with cluster suffix "CLUSTER_DOMAIN." in project "PROJECT_NAME" with scope "VPC_SCOPE"     private
    

    Nilai name dalam respons menunjukkan bahwa Google Cloud membuat zona pribadi bernama gke-cluster1-aa94c1f9-dns.

  3. Pastikan Cloud DNS berisi entri untuk cluster Anda di kedua ManagedZones:

    gcloud dns record-sets list --zone ZONE_NAME | grep SERVICE_NAME
    

    Ganti kode berikut:

    • ZONE_NAME: nama zona pribadi.
    • SERVICE_NAME: nama layanan.

    Outputnya mirip dengan hal berikut ini:

    my-service.default.svc.cluster.local.                A     30     10.47.255.11
    

    Nilai name dalam respons menunjukkan bahwa Google Cloud membuat zona pribadi bernama gke-cluster1-aa94c1f9-dns.

  4. Untuk pencarian DNS terbalik, pastikan Cloud DNS berisi entri untuk cluster Anda di ResponsePolicies:

    gcloud dns response-policies list --format="table(responsePolicyName, description)"
    

    Outputnya mirip dengan hal berikut ini:

      gke-NETWORK_HASH-rp        Response Policy for GKE clusters on network "VPC_NAME".
      gke-cluster-1-52c8f518-rp  Response Policy for GKE cluster "cluster-1" with cluster suffix "cluster.local." in project "khamed-gke-dev" with scope "CLUSTER_SCOPE".
    

    Nilai name dalam respons menunjukkan bahwa Google Cloud membuat zona pribadi bernama gke-cluster1-aa94c1f9-rp.

  5. Untuk pencarian DNS terbalik, pastikan Cloud DNS berisi entri untuk cluster Anda di ResponsePolicies:

      gcloud dns response-policies rules list ZONE_NAME --format="table(localData.localDatas[0].name, localData.localDatas[0].rrdatas[0])"
    

    Ganti ZONE_NAME dengan nama zona pribadi.

    Outputnya mirip dengan hal berikut ini:

      1.240.27.10.in-addr.arpa.    kubernetes.default.svc.cluster.local.
      52.252.27.10.in-addr.arpa.   default-http-backend.kube-system.svc.cluster.local.
      10.240.27.10.in-addr.arpa.   kube-dns.kube-system.svc.cluster.local.
      146.250.27.10.in-addr.arpa.  metrics-server.kube-system.svc.cluster.local.
    

Langkah selanjutnya