Halaman ini menunjukkan cara menyelesaikan masalah terkait Cloud DNS di Google Kubernetes Engine (GKE).
Mengidentifikasi sumber masalah DNS di Cloud DNS
Error seperti dial tcp: i/o timeout
, no such
host
, atau Could not resolve host
sering kali menandakan masalah pada kemampuan Cloud DNS untuk me-resolve kueri.
Jika Anda telah melihat salah satu error tersebut, tetapi tidak tahu penyebabnya, gunakan bagian berikut untuk membantu Anda menemukannya. Bagian-bagian ini disusun untuk memulai dengan langkah-langkah yang kemungkinan besar akan membantu Anda, jadi coba setiap bagian secara berurutan.
Memverifikasi setelan dasar
Jika Pod Anda tidak dapat me-resolve pencarian DNS, pastikan Cloud DNS dikonfigurasi seperti yang Anda inginkan. Bagian ini membantu Anda memverifikasi apakah Anda menggunakan Cloud DNS, mengonfirmasi keberadaan zona DNS pribadi untuk cluster GKE, dan memastikan akurasi data DNS untuk layanan target.
Untuk memverifikasi setelan ini, selesaikan perintah berikut:
Periksa server DNS yang digunakan Pod Anda:
kubectl exec -it POD_NAME -- cat /etc/resolv.conf | grep nameserver
Ganti
POD_NAME
dengan nama Pod yang mengalami masalah dengan resolusi DNS.Jika Anda menggunakan Cloud DNS, output-nya adalah sebagai berikut:
nameserver 169.254.169.254
Jika Anda melihat nilai lain, berarti Anda tidak menggunakan Cloud DNS. Pastikan Cloud DNS telah diaktifkan dengan benar.
Pastikan zona terkelola ada:
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 "" with cluster suffix "CLUSTER_DOMAIN" in project "PROJECT_ID" dnsName: CLUSTER_DOMAIN. id: 5887499284756055830 kind: dns#managedZone name: gke-CLUSTER_NAME-aa94c1f9-dns nameServers: ['ns-gcp-private.googledomains.com.'] privateVisibilityConfig: {'kind': 'dns#managedZonePrivateVisibilityConfig'} visibility: private
Output ini mencakup nilai-nilai berikut:
CLUSTER_DOMAIN
: akhiran domain DNS yang secara otomatis ditetapkan ke cluster Anda.PROJECT_ID
: project ID Anda.CLUSTER_NAME
: nama cluster dengan zona pribadi.
Dalam output ini, nilai di kolom
name
menunjukkan bahwa Google Cloud membuat zona bernamagke-CLUSTER_NAME-aa94c1f9-dns
.Jika Anda tidak melihat zona terkelola, artinya zona pribadi tidak dibuat untuk cluster Anda, atau Anda mungkin tidak diautentikasi dengan benar. Untuk memecahkan masalah, lihat Zona pribadi dalam dokumentasi Cloud DNS.
Verifikasi data DNS untuk Layanan Anda:
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 berikut ini:
dns-test.default.svc.cluster.local. A 30 10.47.255.11
Output ini menunjukkan bahwa Cloud DNS berisi data A untuk domain
dns-test.default.svc.cluster.local.
dan alamat IP cluster Anda adalah10.47.255.11
.Jika data terlihat salah, lihat Menambahkan patch ke kumpulan data resource di dokumentasi Cloud DNS untuk memperbaruinya.
Memverifikasi kebijakan respons
Pastikan kebijakan respons Anda ada dan diberi nama dengan benar:
Lihat daftar semua kebijakan respons Anda:
gcloud dns response-policies list --format="table(responsePolicyName, description)"
Outputnya mirip dengan hal berikut ini:
RESPONSE_POLICY_NAME DESCRIPTION gke-CLUSTER_NAME-52c8f518-rp Response Policy for GKE cluster "CLUSTER_NAME" with cluster suffix "cluster.local." in project "gke-dev" with scope "CLUSTER_SCOPE".
Dalam output ini,
gke-CLUSTER_NAME-52c8f518-rp
menunjukkan bahwa Google Cloud membuat zona pribadi bernamagke-CLUSTER_NAME-aa94c1f9-rp
. Kebijakan respons yang dibuat Google Cloud memiliki awalangke-
.Melihat kebijakan respons di zona pribadi tertentu:
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 yang mengalami masalah.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.
Kolom pertama menampilkan alamat IP atau pola nama domain yang cocok dengan aturan. Kolom kedua adalah nama host yang terkait dengan alamat IP.
Jika Anda melihat masalah dalam output perintah ini, lihat memperbarui aturan kebijakan respons dalam dokumentasi Cloud DNS.
Menyelidiki dengan log, dasbor, dan metrik
Cloud DNS menyertakan beberapa opsi logging dan pemantauan untuk membantu Anda menyelidiki masalah DNS lebih lanjut:
Untuk melihat log resource seperti zona dan data, aktifkan Cloud Logging untuk Cloud DNS.
Untuk melihat diagram kueri DNS dan melihat data untuk rasio error, QPS, dan latensi persentil ke-99 untuk zona pribadi Anda, gunakan dasbor pemantauan Cloud DNS.
Untuk memvisualisasikan latensi dan rasio keberhasilan kueri DNS, gunakan metrik
query/latencies
danquery/response_count
di Metrics Explorer.
Memeriksa data baru
Tinjau log untuk melihat apakah ada data baru yang dibuat di zona pribadi Cloud DNS yang dikelola. Hal ini dapat membantu jika Anda tiba-tiba mengalami kegagalan resolusi DNS di cluster.
Untuk memeriksa data baru, selesaikan langkah-langkah berikut:
Di Konsol Google Cloud, buka halaman Logs Explorer.
Di panel kueri, masukkan kueri berikut:
resource.type="dns_managed_zone" protoPayload.request.change.additions.name="headless-svc-stateful.default.svc.cluster.local." protoPayload.methodName="dns.changes.create"
Klik Run query.
Tinjau output. Jika Anda menemukan perubahan yang sesuai dengan saat pertama kali melihat error, pertimbangkan untuk mengembalikannya.
Memverifikasi domain stub dan server nama kustom
Jika Anda menggunakan cluster GKE Standard dengan domain stub atau server nama upstream kustom, tinjau ConfigMap dan pastikan nilainya sudah benar.
Cloud DNS menerjemahkan nilai stubDomains
dan upstreamNameservers
menjadi zona penerusan Cloud DNS. Google mengelola resource
ini, jadi jika Anda melihat error,
hubungi Cloud Customer Care
untuk mendapatkan bantuan.
Menghubungi Cloud Customer Care
Jika Anda telah menyelesaikan bagian sebelumnya, tetapi masih tidak dapat mendiagnosis penyebab masalah, hubungi Cloud Customer Care.
Mengatasi error tertentu
Jika Anda mengalami error atau masalah tertentu, gunakan saran di bagian berikut.
Masalah: Tidak dapat me-resolve Layanan cluster GKE dari VM Compute Engine
Jika Anda tidak dapat me-resolve Layanan cluster GKE dari VM Compute Engine, verifikasi cakupan Cloud DNS cluster.
Cakupan yang Anda gunakan dengan Cloud DNS menentukan resource mana yang dapat di-resolve:
Cakupan cluster: Resolusi DNS dibatasi untuk resource dalam cluster Kubernetes (Pod dan Layanan). Ini adalah setelan default dan cocok jika Anda tidak perlu me-resolve resource eksternal di luar cluster Kubernetes atau Virtual Private Cloud (VPC) GKE.
Cakupan VPC: Resolusi DNS diperluas ke seluruh VPC, termasuk resource seperti VM Compute Engine. Hal ini memungkinkan cluster me-resolve data DNS internal untuk resource di luar cluster GKE, tetapi dalam VPC yang sama, seperti VM Google Cloud.
Untuk memverifikasi cakupan Cloud DNS cluster, selesaikan langkah-langkah berikut:
Di konsol Google Cloud, buka halaman Kubernetes clusters.
Klik nama cluster yang mengalami masalah dengan DNS.
Di bagian Cluster networking pada halaman detail cluster, tinjau informasi di baris DNS provider.
Jika Anda melihat Cloud DNS (cakupan cluster), berarti Anda menggunakan cakupan cluster. Untuk mengubah cakupan DNS, buat ulang cluster dengan cakupan DNS yang sesuai.
Masalah: Pod masih menggunakan kube-dns setelah Cloud DNS diaktifkan
Jika Pod Anda 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.
Masalah: 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.
Masalah: 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.
Masalah: Tidak dapat memperbarui atau membuat cluster dengan mengaktifkan cakupan VPC tambahan Cloud DNS
Pastikan Anda menggunakan versi yang benar. Cakupan VPC Tambahan Cloud DNS memerlukan GKE versi 1.28 atau yang lebih baru.
Error: Cloud DNS dinonaktifkan
Peristiwa berikut terjadi saat Cloud DNS API dinonaktifkan:
Warning FailedPrecondition service/default-http-backend
Failed to send requests to Cloud DNS: Cloud DNS API Disabled. Please enable the Cloud DNS API in your project PROJECT_NAME: Cloud DNS API has not been used in project PROJECT_NUMBER before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/dns.googleapis.com/overview?project=PROJECT_NUMBER then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.
Error ini terjadi karena Cloud DNS API tidak diaktifkan secara default. Anda harus mengaktifkan Cloud DNS API secara manual.
Untuk mengatasi masalah ini, aktifkan Cloud DNS API.
Error: Gagal mengirim permintaan ke Cloud DNS: Batas kapasitas API terlampaui.
Peristiwa berikut terjadi saat project telah melampaui kuota atau batas Cloud DNS:
kube-system 27s Warning InsufficientQuota
managedzone/gke-cluster-quota-ee1bd2ca-dns Failed to send requests to Cloud DNS: API rate limit exceeded. Contact Google Cloud support team to request a quota increase for your project PROJECT_NAME: Quota exceeded for quota metric 'Write requests' and limit 'Write limit for a minute for a region' of service 'dns.googleapis.com' for consumer 'project_number:PROJECT_NUMBER.
Untuk mengatasi masalah ini, tinjau kuota Cloud DNS serta kuota dan batasan Compute Engine. Anda dapat menambah kuota menggunakan Konsol Google Cloud.
Error: Gagal mengirim permintaan ke Cloud DNS karena error sebelumnya
Peristiwa berikut terjadi saat error menyebabkan kegagalan beruntun:
kube-system 27s Warning InsufficientQuota
managedzone/gke-cluster-quota-ee1bd2ca-dns Failed to send requests to Cloud DNS: API rate limit exceeded. Contact Google Cloud support team to request a quota increase for your project PROJECT_NAME: Quota exceeded for quota metric 'Write requests' and limit 'Write limit for a minute for a region' of service 'dns.googleapis.com' for consumer 'project_number:PROJECT_NUMBER.
kube-system 27s Warning FailedPrecondition service/default-http-backend Failed to send requests to Cloud DNS due to a previous error. Please check the cluster events.
Untuk mengatasi masalah ini, periksa peristiwa cluster untuk menemukan sumber error asli, lalu ikuti petunjuk untuk menyelesaikan masalah pokok tersebut.
Pada contoh sebelumnya, error InsufficientQuota
untuk zona terkelola
memicu kegagalan beruntun. Error kedua untuk FailedPrecondition
menunjukkan bahwa error sebelumnya terjadi, yaitu masalah kuota awal yang tidak memadai. Untuk mengatasi contoh masalah ini, Anda akan mengikuti panduan untuk error kuota Cloud DNS.
Error: Gagal mengikat kebijakan respons
Peristiwa berikut terjadi saat kebijakan respons terikat ke jaringan cluster dan Cloud DNS untuk GKE mencoba mengikat kebijakan respons ke jaringan:
kube-system 9s Warning FailedPrecondition responsepolicy/gke-2949673445-rp
Failed to bind response policy gke-2949673445-rp to test. Please verify that another Response Policy is not already associated with the network: Network 'https://www.googleapis.com/compute/v1/projects/PROJECT_NAME/global/networks/NETWORK_NAME' cannot be bound to this response policy because it is already bound to another response policy.
kube-system 9s Warning FailedPrecondition service/kube-dns
Failed to send requests to Cloud DNS due to a previous error. Please check the cluster events.
Untuk mengatasi masalah ini, selesaikan beberapa langkah berikut:
Dapatkan kebijakan respons yang terikat ke jaringan:
gcloud dns response-policies list --filter='networks.networkUrl: NETWORK_URL'
Ganti
NETWORK_URL
dengan URL jaringan dari error, sepertihttps://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/NETWORK_NAME
.Jika output kosong, kebijakan respons mungkin tidak berada dalam project yang sama. Lanjutkan ke langkah berikutnya untuk menelusuri kebijakan respons.
Jika output mirip dengan berikut ini, lanjutkan ke langkah 4 untuk menghapus kebijakan respons.
[ { "description": "Response Policy for GKE cluster \"CLUSTER_NAME\" with cluster suffix \"cluster.local.\" in project \"PROJECT_ID\" with scope \"CLUSTER_SCOPE\".", ... "kind": "dns#responsePolicy", "responsePolicyName": "gke-CLUSTER_NAME-POLICY_ID-rp" } ]
Dapatkan daftar project dengan izin
dns.networks.bindDNSResponsePolicy
menggunakan Penganalisis Kebijakan IAM.Periksa apakah setiap project memiliki kebijakan respons yang terikat ke jaringan:
gcloud dns response-policies list --filter='networks.networkUrl:NETWORK_URL' \ --project=PROJECT_NAME
Error: Konfigurasi yang tidak valid ditetapkan dalam kube-dns
Peristiwa berikut terjadi saat Anda menerapkan kube-dns ConfigMap kustom yang tidak valid untuk Cloud DNS untuk GKE:
kube-system 49s Warning FailedValidation configmap/kube-dns
Invalid configuration specified in kube-dns: error parsing stubDomains for ConfigMap kube-dns: dnsServer [8.8.8.256] validation: IP address "8.8.8.256" invalid
Untuk mengatasi masalah ini, tinjau detail dalam error untuk bagian ConfigMap yang tidak valid. Dalam contoh sebelumnya, 8.8.8.256
bukan alamat IP yang valid.
Langkah selanjutnya
Untuk mengetahui informasi umum tentang mendiagnosis masalah DNS Kubernetes, lihat Men-debug Resolusi DNS.
Tinjau pemecahan masalah Cloud DNS.
- Jika Anda memerlukan bantuan tambahan, hubungi Cloud Customer Care.