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.

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 cakupan DNS berikut. Cluster tidak dapat beroperasi dalam beberapa 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 DNS ini hanya terlihat dalam cluster dan tidak tumpang-tindih atau bertentangan dengan nama DNS *.cluster.local untuk cluster GKE lainnya dalam project yang sama. Ini adalah mode defaultnya.

    • Cakupan VPC tambahan Cloud DNS:

      Cakupan VPC tambahan Cloud DNS adalah fitur opsional yang memperluas cakupan cluster GKE untuk membuat Service headless dapat di-resolve 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 aktifkan atau nonaktifkan di cluster tanpa memengaruhi waktu aktif 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 DNS:

Fitur Cakupan cluster GKE Cakupan VPC tambahan Cloud DNS Cakupan VPC
Cakupan Visibilitas DNS Hanya dalam cluster GKE Diperluas ke seluruh jaringan VPC Seluruh jaringan VPC
Resolusi Layanan Headless Dapat diselesaikan dalam cluster Dapat di-resolve dalam cluster menggunakan `cluster.local` dan di seluruh VPC menggunakan akhiran cluster Dapat di-resolve 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 tambahan 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 tambahan 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 tambahan:

  • 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 rezim 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.
  • 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 lakukan inisialisasi 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 me-resolve nama layanan, dan nama layanan tidak bertentangan antar-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 Buat.

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 di cluster tersebut tidak menggunakan Cloud DNS sebagai penyedia DNS sampai 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 Anda mengonfirmasi, pengontrol Cloud DNS berjalan di bidang kontrol GKE, tetapi Pod tidak menggunakan Cloud DNS untuk resolusi DNS sampai 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.

Mengaktifkan cakupan VPC tambahan Cloud DNS

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

Mengaktifkan cakupan VPC tambahan 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=clouddns \
    --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 tambahan Cloud DNS di cluster yang ada

Untuk mengaktifkan cakupan VPC tambahan Cloud DNS di cluster yang ada, Anda harus mengaktifkan Cloud DNS untuk cluster terlebih dahulu, lalu mengupgrade kumpulan node. Mengupgrade kumpulan node akan membuat ulang node. Kemudian, node menggunakan Cloud DNS untuk resolusi DNS, bukan kube-dns.

Untuk mengaktifkan cakupan VPC tambahan Cloud DNS di 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 node pool 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.

  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.

Setelah menonaktifkan Cloud DNS untuk cluster Standard, perbarui kumpulan node yang terkait dengan cluster Anda. Atau, Anda dapat membuat node pool baru dan menjadwalkan workload di sana. Jika Anda tidak memperbarui node pool, namespace DNS akan terus mengarah ke Cloud DNS, bukan kube-dns.

gcloud

Update node pool untuk menggunakan kube-dns:

gcloud container clusters upgrade dns --node-pool=DEFAULT_POOL \
    --cluster-version=VERSION \
    --region=REGION

Menonaktifkan cakupan VPC tambahan Cloud DNS

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

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

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

Ganti CLUSTER_NAME dengan nama cluster.

Tindakan ini akan membuat cluster Anda dengan cakupan cluster Cloud DNS tetap diaktifkan 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 cluster GKE Standard.

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,
    ]
  }

Resolusi DNS gagal setelah bermigrasi dari kube-dns ke Cloud DNS dengan NodeLocal DNSCache diaktifkan

Bagian ini menjelaskan masalah umum yang ada di cluster GKE di Cloud DNS dengan NodeLocal DNSCache dalam Cakupan Cluster.

Setelah Anda melakukan migrasi dari kube-DNS ke Cloud DNS dengan NodeLocal DNSCache diaktifkan di cluster, cluster Anda mungkin mengalami error resolusi yang terputus-putus.

Saat menggunakan kube-dns dengan NodeLocal DNSCache diaktifkan di cluster, NodeLocal DNSCache dikonfigurasi untuk memproses kedua alamat (alamat NodeLocal DNSCache dan alamat kube-dns).

Untuk memeriksa status NodeLocal DNSCache, jalankan perintah berikut:

kubectl get cm -n kube-system node-local-dns -o json | jq .data.Corefile -r | grep bind

Outputnya mirip dengan hal berikut ini:

    bind 169.254.20.10 x.x.x.10
    bind 169.254.20.10 x.x.x.10

Setelah mengupdate cluster ke Cloud DNS, konfigurasi NodeLocal DNSCache akan diubah. Periksa NodeLocal DNSCache:

kubectl get cm -n kube-system node-local-dns -o json | jq .data.Corefile -r | grep bind

Outputnya mirip dengan hal berikut ini:

    bind 169.254.20.10
    bind 169.254.20.10

Alur kerja berikut menjelaskan entri dalam file resolv.conf saat migrasi dan pembuatan ulang node:

Sebelum migrasi

  • Pod memiliki resolv.conf yang dikonfigurasi ke kube-dns-IP (yaitu x.x.x.10).
  • Pod node-local-cache memproses kedua alamat (bind 169.254.20.10 x.x.x.10) dan memotong permintaan DNS dari Pod.
  • NodeLocal DNSCache berfungsi sebagai cache dan sedikit tekanan diberikan pada pod kube-dns.

Setelah migrasi

  • Setelah bidang kontrol diupdate untuk menggunakan Cloud DNS, Pod masih memiliki resolv.conf yang dikonfigurasi ke kube-dns-IP (yaitu x.x.x.10). Konfigurasi ini tetap ada karena GKE memerlukan pembuatan ulang node untuk menggunakan 169.254.20.10 .Penyiapan Cloud DNS memerlukan 169.254.20.10
  • Pod node-local-cache hanya memproses alamat NodeLocal DNSCache (mengikat 169.254.20.10). Permintaan tidak masuk ke Pod cache lokal Node.
  • Semua permintaan dari Pod dikirim langsung ke Pod kube-dns. Penyiapan ini menghasilkan traffic yang tinggi di Pod.

Setelah pembuatan ulang node atau upgrade node pool

  • Pod telah mengonfigurasi resolv.conf ke alamat IP NodeLocal DNSCache (169.254.20.10).
  • Pod node-local-cache hanya memproses alamat NodeLocal DNSCache (mengikat 169.254.20.10) dan menerima permintaan DNS dari Pod di alamat IP ini.

Saat kumpulan node menggunakan IP kube-dns di resolv.conf sebelum pembuatan ulang kumpulan node, peningkatan traffic kueri DNS juga akan meningkatkan traffic di pod kube-dns, yang menyebabkan kegagalan permintaan DNS secara berkala. Untuk meminimalkan error, Anda harus merencanakan migrasi ini selama periode nonaktif.

Pemecahan masalah

Untuk informasi tentang cara memecahkan masalah Cloud DNS, lihat halaman berikut:

Langkah selanjutnya