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 Google Cloud Observability 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:
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 VPC |
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.3-gke.1430000 atau yang lebih baru.
- Google Cloud CLI versi 503.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.
Anda dapat mengaktifkan cluster GKE Autopilot cakupan VPC tambahan hanya saat pembuatan cluster. Mengaktifkan atau menonaktifkan cakupan VPC tambahan di cluster GKE Autopilot yang ada tidak didukung.
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.
- 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
lakukan inisialisasi
gcloud CLI. Jika sebelumnya Anda telah menginstal gcloud CLI, dapatkan versi terbaru dengan menjalankan
gcloud components update
.
Aktifkan Cloud DNS API di project Anda:
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.
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:
CLUSTER_NAME
: nama cluster.COMPUTE_LOCATION
: Lokasi Compute Engine untuk cluster.
Flag --cluster-dns-scope=cluster
bersifat opsional dalam perintah ini karena
cluster
adalah nilai defaultnya.
Konsol
Buka halaman Google Kubernetes Engine di konsol Google Cloud.
Klik add_box Create.
Dari panel navigasi, pada Cluster, klik Networking.
Di bagian DNS provider, klik Cloud DNS.
Pilih Cakupan cluster.
Konfigurasi cluster Anda sesuai kebutuhan.
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
Update cluster yang ada:
gcloud container clusters update CLUSTER_NAME \ --cluster-dns=clouddns \ --cluster-dns-scope=cluster \ --location=COMPUTE_LOCATION
Ganti kode berikut:
CLUSTER_NAME
: nama cluster.COMPUTE_LOCATION
: Lokasi Compute Engine untuk cluster Anda.
Flag
--cluster-dns-scope=cluster
bersifat opsional dalam perintah ini karenacluster
adalah nilai defaultnya.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.
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
Buka halaman Google Kubernetes Engine di konsol Google Cloud.
Klik nama cluster yang ingin diubah.
Di bagian Networking, pada kolom DNS provider, klik edit Edit DNS provider.
Klik Cloud DNS.
Klik Cakupan cluster.
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
Flag --cluster-dns-scope=cluster
bersifat opsional karena
cluster
adalah nilai defaultnya.
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 \
--additive-vpc-scope-dns-domain=UNIQUE_CLUSTER_DOMAIN \
--location=COMPUTE_LOCATION
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.COMPUTE_LOCATION
: lokasi Compute Engine untuk cluster.
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 me-resolve Service headless ke setiap IP Pod di Service dan VM berkomunikasi langsung dengan alamat IP Pod.
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
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.
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
Buka halaman Google Kubernetes Engine di konsol Google Cloud.
Klik nama cluster yang ingin diubah.
Di bagian Networking, pada kolom DNS provider, klik edit Edit DNS provider.
Klik Cloud DNS.
Klik VPC scope.
Klik Simpan perubahan.
Memverifikasi Cloud DNS
Pastikan Cloud DNS untuk GKE berfungsi dengan benar untuk cluster Anda:
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
sebagainameserver
, 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.Deploy aplikasi sampel ke cluster Anda:
kubectl run dns-test --image us-docker.pkg.dev/google-samples/containers/gke/hello-app:2.0
Ekspos aplikasi contoh dengan Service:
kubectl expose pod dns-test --name dns-test-svc --port 8080
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 adalah10.47.255.11
.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
Buka halaman Google Kubernetes Engine di konsol Google Cloud.
Klik nama cluster yang ingin diubah.
Di bagian Networking, pada kolom DNS provider, klik edit Edit DNS provider.
Klik Kube-dns.
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:
Hapus layanan:
kubectl delete service dns-test-svc
Hapus Pod:
kubectl delete Pod dns-test
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:
Buka halaman Cloud DNS zone.
Klik tab Response policy zone.
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".
Klik tab In use by.
Di samping nama project host, klik delete untuk menghapus binding jaringan.
Klik tab Response policy rules.
Pilih semua entri dalam tabel.
Klik Remove response policy rules.
Klik delete 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:
- Untuk mendapatkan saran tentang Cloud DNS di GKE, lihat Memecahkan Masalah Cloud DNS di GKE.
- Untuk mendapatkan saran khusus tentang Cloud DNS, lihat Memecahkan Masalah Cloud DNS.
- Untuk mendapatkan saran umum tentang mendiagnosis masalah DNS Kubernetes, lihat Men-debug Resolusi DNS.
Langkah selanjutnya
- Baca ringkasan tentang cara GKE menyediakan DNS terkelola.
- Baca DNS untuk layanan dan Pod untuk mengetahui ringkasan umum tentang cara penggunaan DNS di cluster Kubernetes.
- Pelajari Cakupan dan hierarki di Cloud DNS.
- Pelajari cara Mengaktifkan dan menonaktifkan logging untuk zona terkelola pribadi.