Kegagalan resolusi DNS di Kubernetes sulit didiagnosis karena pipeline resolusi mencakup beberapa komponen—CoreDNS, kube-proxy, Container Network Interface (CNI), dan server DNS upstream. Panduan ini memandu Anda melalui proses terstruktur untuk mengisolasi akar penyebab dan menerapkan perbaikan yang tepat.
Sebelum memulai diagnostik, tinjau Praktik terbaik untuk layanan DNS guna mengurangi risiko kegagalan DNS berulang.
Konsep utama
| Term | Definisi |
|---|---|
| Nama domain internal | Diresolusi oleh CoreDNS dari cache lokalnya. Selalu diakhiri dengan .cluster.local. |
| Nama domain eksternal | Diresolusi oleh server DNS upstream (Alibaba Cloud DNS, Alibaba Cloud DNS PrivateZone, atau penyedia pihak ketiga). CoreDNS hanya meneruskan kueri ini. |
| Pod aplikasi | Pod apa pun yang bukan merupakan pod komponen sistem di kluster Kubernetes. |
| NodeLocal DNSCache | Cache DNS lokal yang mencegat kueri DNS pod sebelum mencapai CoreDNS. Kueri yang tidak dapat diresolusi oleh NodeLocal DNSCache diteruskan ke Service kube-dns. |
Identifikasi kesalahan
Pesan kesalahan umum
Cocokkan pesan kesalahan Anda untuk mengidentifikasi kategori kegagalan:
| Klien | Pesan kesalahan | Kategori kegagalan |
|---|---|---|
ping | ping: xxx.yyy.zzz: Name or service not known | Domain tidak ditemukan, atau server DNS tidak dapat dijangkau (latensi > 5 detik mengindikasikan tidak dapat dijangkau) |
curl | curl: (6) Could not resolve host: xxx.yyy.zzz | Domain tidak ditemukan, atau server DNS tidak dapat dijangkau |
| Klien HTTP PHP | php_network_getaddresses: getaddrinfo failed: Name or service not known in xxx.php on line yyy | Domain tidak ditemukan, atau server DNS tidak dapat dijangkau |
| Klien HTTP Go | dial tcp: lookup xxx.yyy.zzz on 100.100.2.136:53: no such host | Domain tidak ada |
dig | ;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: xxxxx | Domain tidak ada |
| Klien HTTP Go | dial tcp: lookup xxx.yyy.zzz on 100.100.2.139:53: read udp 192.168.0.100:42922->100.100.2.139:53: i/o timeout | Server DNS tidak dapat dijangkau |
dig | ;; connection timed out; no servers could be reached | Server DNS tidak dapat dijangkau |
Siapkan pod debug
Sebelum menjalankan perintah diagnostik apa pun, siapkan lingkungan pengamatan yang bersih guna menghilangkan ambiguitas antara bug aplikasi dan bug DNS.
kubectl run -it --rm debug --image=nicolaka/netshoot -- digAnda juga dapat menjalankan perintah berikut:
nslookup <Nama domain>Prosedur diagnostik
Diagram berikut menunjukkan alur troubleshooting keseluruhan untuk kegagalan CoreDNS dan NodeLocal DNSCache.

Langkah 1: Periksa konfigurasi DNS pod aplikasi
# Dapatkan YAML pod untuk memeriksa field dnsPolicy-nya
kubectl get pod <pod-name> -o yaml
# Jika dnsPolicy tampak benar, periksa konfigurasi DNS dalam kontainer
kubectl exec -it <pod-name> -- cat /etc/resolv.confPeriksa apakah nameserver mengarah ke CoreDNS atau NodeLocal DNSCache:
CoreDNS (IP Service kube-dns, misalnya
172.21.0.10): lanjutkan ke Langkah 2.NodeLocal DNSCache (
169.254.20.10): lihat Masalah NodeLocal DNSCache.Bukan keduanya (tidak ada konfigurasi DNS kluster): pod mungkin berjalan pada node yang kelebihan beban atau tabel conntrack penuh. Lihat Kelebihan beban klien dan Tabel conntrack penuh.
Referensi kebijakan DNS
Tabel berikut menjelaskan nilai dnsPolicy yang tersedia dan kapan masing-masing harus digunakan:
dnsPolicy | Perilaku |
|---|---|
ClusterFirst (default) | Menggunakan IP Service kube-dns sebagai server DNS. Untuk pod jaringan-host, berperilaku sama seperti Default. |
Default | Menggunakan server DNS dari /etc/resolv.conf instans ECS. Gunakan ini hanya jika pod tidak memerlukan penemuan layanan internal kluster. |
ClusterFirstWithHostNet | Sama seperti ClusterFirst tetapi untuk pod jaringan-host. |
None | Memungkinkan Anda menentukan server DNS dan opsi kustom di dnsConfig. Digunakan saat NodeLocal DNSCache menyuntikkan konfigurasinya secara otomatis. |
Pod yang dikonfigurasi untuk NodeLocal DNSCache biasanya tampak seperti ini:
apiVersion: v1
kind: Pod
metadata:
name: <pod-name>
namespace: <pod-namespace>
spec:
containers:
- image: <container-image>
name: <container-name>
dnsPolicy: None
dnsConfig:
nameservers:
- 169.254.20.10
- 172.21.0.10
options:
- name: ndots
value: "3"
- name: timeout
value: "1"
- name: attempts
value: "2"
searches:
- default.svc.cluster.local
- svc.cluster.local
- cluster.localLangkah 2: Periksa status pod CoreDNS
kubectl -n kube-system get pod -o wide -l k8s-app=kube-dnsOutput yang diharapkan (semua pod dalam status Running):
NAME READY STATUS RESTARTS AGE IP NODE
coredns-xxxxxxxxx-xxxxx 1/1 Running 0 25h 172.20.6.53 cn-hangzhou.192.168.0.198Periksa penggunaan resource:
kubectl -n kube-system top pod -l k8s-app=kube-dnsOutput yang diharapkan:
NAME CPU(cores) MEMORY(bytes)
coredns-xxxxxxxxx-xxxxx 3m 18MiJika pod tidak dalam status Running, deskripsikan pod tersebut untuk menemukan penyebabnya:
kubectl -n kube-system describe pod <coredns-pod-name>Lihat Pod CoreDNS tidak berjalan sesuai harapan untuk log kesalahan umum dan solusinya.
Langkah 3: Periksa log operasional CoreDNS
kubectl -n kube-system logs -f --tail=500 --timestamps <coredns-pod-name>| Flag | Efek |
|---|---|
-f | Menampilkan output log secara langsung |
--tail=500 | Menampilkan 500 baris terakhir |
--timestamps | Menambahkan timestamp pada setiap baris log |
Cari respons NXDOMAIN, SERVFAIL, atau REFUSED dalam log. Jika salah satu respons ini muncul untuk nama domain eksternal, berarti server DNS upstream mengembalikan kesalahan. Lihat Nama domain eksternal tidak dapat diresolusi.
Langkah 4: Periksa apakah masalah dapat direproduksi
Selalu gagal: lanjutkan dengan Diagnosis log kueri DNS dan Diagnosis konektivitas jaringan antara pod aplikasi dan CoreDNS.
Intermiten: tangkap paket seperti yang dijelaskan di Tangkap paket.
Diagnosis log kueri DNS
CoreDNS menghasilkan entri log kueri untuk setiap permintaan DNS hanya jika plugin log diaktifkan. Untuk mengaktifkannya, lihat Konfigurasi CoreDNS.
Jalankan perintah yang sama seperti yang digunakan untuk mengkueri log operasional guna melihat log kueri DNS. Untuk informasi lebih lanjut, lihat Langkah 3: Periksa log operasional CoreDNS.
Setelah disimpan, CoreDNS secara otomatis memuat ulang. Konfirmasi dengan memeriksa log untuk kata kunci reload.
Format log kueri DNS
[INFO] 172.20.2.25:44525 - 36259 "A IN redis-master.default.svc.cluster.local. udp 56 false 512" NOERROR qr,aa,rd 110 0.000116946sKode respons DNS
Untuk spesifikasi lengkap, lihat RFC 1035.
| Kode respons | Makna | Penyebab umum |
|---|---|---|
NOERROR | Berhasil diresolusi | — |
NXDOMAIN | Domain tidak ada di server DNS upstream | Pod menambahkan sufiks domain pencarian; nama yang ditambahkan sufiks tetapi tidak ada akan memicu kode ini |
SERVFAIL | Terjadi kesalahan di server DNS upstream | Server DNS upstream tidak dapat dijangkau atau salah konfigurasi |
REFUSED | Kueri ditolak oleh server DNS upstream | Server DNS upstream (dalam konfigurasi CoreDNS atau /etc/resolv.conf node) tidak dapat meng-resolve domain tersebut |
Jika log menunjukkan NXDOMAIN, SERVFAIL, atau REFUSED untuk nama domain eksternal, maka server DNS upstream adalah akar penyebabnya. Secara default, CoreDNS menggunakan server DNS VPC 100.100.2.136 dan 100.100.2.138 sebagai resolver upstream. Kirim tiket ke tim ECS dan sertakan:
| Field | Deskripsi | Contoh |
|---|---|---|
| Nama domain | Nama domain eksternal dari log | www.aliyun.com |
| Kode respons DNS | Kode respons dalam log | NXDOMAIN |
| Waktu | Timestamp entri log (presisi detik) | 2022-12-22 20:00:03 |
| ID instans ECS | ID instans ECS yang menjalankan pod CoreDNS | i-xxxxx i-yyyyy |
Diagnosis konektivitas jaringan pod CoreDNS
Gunakan Konsol ACK atau CLI.
Konsol ACK
Masuk ke Konsol ACK. Di panel navigasi sebelah kiri, klik Clusters.
Di halaman Clusters, klik nama kluster. Di panel navigasi sebelah kiri, pilih Inspections and Diagnostics > Diagnostics.
Di halaman Diagnosis, klik Network diagnosis.
Di panel Network, konfigurasikan parameter berikut: Baca peringatan, pilih I know and agree, lalu klik Create diagnosis.
Source address: Alamat IP pod CoreDNS
Destination address: Alamat IP server DNS upstream (
100.100.2.136atau100.100.2.138)Destination port:
53Protocol:
udp
Di halaman Diagnosis result, bagian Packet paths menunjukkan semua node yang didiagnosis.

CLI
Masuk ke node yang menjalankan pod CoreDNS.
Dapatkan ID proses CoreDNS:
ps aux | grep corednsMasuk ke namespace jaringan CoreDNS:
nsenter -t <pid> -n -- <related commands>Ganti
<pid>dengan ID proses dari langkah sebelumnya.Uji konektivitas:
# Uji konektivitas ke server API Kubernetes telnet <apiserver_clusterip> 6443 # Uji konektivitas ke server DNS upstream dig <domain> @100.100.2.136 dig <domain> @100.100.2.138
| Masalah | Penyebab | Tindakan |
|---|---|---|
| CoreDNS tidak dapat terhubung ke server API Kubernetes | Kesalahan server API, kelebihan beban node, atau masalah kube-proxy | Kirim tiket |
| CoreDNS tidak dapat terhubung ke server DNS upstream | Kelebihan beban node, konfigurasi CoreDNS salah, atau masalah routing Express Connect | Kirim tiket |
Diagnosis konektivitas jaringan antara pod aplikasi dan CoreDNS
Konsol ACK
Masuk ke Konsol ACK. Di panel navigasi sebelah kiri, klik Clusters.
Di halaman Clusters, klik nama kluster. Di panel navigasi sebelah kiri, pilih Inspections and Diagnostics > Diagnostics.
Di halaman Diagnosis, klik Network diagnosis.
Di panel Network, konfigurasikan parameter berikut: Baca peringatan, pilih I know and agree, lalu klik Create diagnosis.
Source address: Alamat IP pod aplikasi
Destination address: Alamat IP pod CoreDNS atau kluster
Destination port:
53Protocol:
udp
Di halaman Diagnosis result, bagian Packet paths menunjukkan semua node yang didiagnosis.

CLI
Hubungkan ke namespace jaringan pod aplikasi menggunakan salah satu metode berikut:
Metode 1 —
kubectl exec:kubectl exec -it <pod-name> -- bashMetode 2 —
nsenter(ketikakubectl exectidak tersedia):ps aux | grep <application-process-name> nsenter -t <pid> -n bashMetode 3 — untuk pod yang sering restart:
Jangan tambahkan spasi antara
-ndan<netns-path>.docker ps -a | grep <application-container-name> docker inspect <sandboxed-container-id> | grep netns nsenter -n<netns-path> -n bash
Dari dalam namespace jaringan pod, uji konektivitas:
# Uji konektivitas ke Service kube-dns
dig <domain> @<kube_dns_svc_ip>
# Uji jangkauan ICMP ke pod CoreDNS
ping <coredns_pod_ip>
# Uji resolusi DNS langsung melalui pod CoreDNS
dig <domain> @<coredns_pod_ip>| Masalah | Penyebab | Tindakan |
|---|---|---|
| Tidak dapat terhubung ke Service kube-dns | Kelebihan beban node, masalah kube-proxy, atau port UDP 53 diblokir | Periksa apakah aturan security group mengizinkan port UDP 53. Jika ya, kirim tiket. |
| Tidak dapat ping pod CoreDNS | Kesalahan jaringan kontainer atau ICMP diblokir oleh aturan security group | Periksa apakah ICMP diizinkan. Jika ya, kirim tiket. |
dig ke pod CoreDNS gagal | Kelebihan beban node atau port UDP 53 diblokir oleh aturan security group | Periksa apakah aturan security group mengizinkan port UDP 53. Jika ya, kirim tiket. |
Tangkap paket
Jika Anda tidak dapat mengidentifikasi masalah melalui log dan pengujian konektivitas, tangkap paket untuk mempersempit lokasi paket yang di-drop.
Masuk ke node yang menjalankan pod aplikasi dan pod CoreDNS.
Tangkap paket pada setiap instans ECS:
Pengambilan paket tidak mengganggu layanan. Ini menyebabkan sedikit peningkatan penggunaan CPU dan I/O disk. Perintah ini melakukan rotasi file dan menghasilkan maksimal 200 file
.pcap, masing-masing hingga 20 MB.tcpdump -i any port 53 -C 20 -W 200 -w /tmp/client_dns.pcapAnalisis paket yang ditangkap dari periode waktu saat kesalahan terjadi.
Modul lain dalam pipeline resolusi DNS
Selain CoreDNS dan NodeLocal DNSCache, komponen berikut juga dapat menyebabkan kegagalan resolusi DNS.
| Komponen | Cara menyebabkan kegagalan |
|---|---|
| Resolver DNS (Go, glibc, musl) | Bug implementasi DNS tingkat bahasa atau library dapat menyebabkan kegagalan dalam kasus langka |
/etc/resolv.conf | IP server DNS atau domain pencarian yang salah konfigurasi dalam kontainer |
| kube-proxy | Setelah pembaruan CoreDNS, jika aturan kube-proxy tidak diperbarui, CoreDNS menjadi tidak dapat dijangkau |
| Server DNS upstream | CoreDNS meneruskan kueri domain eksternal ke server upstream (seperti VPC Private DNS). Salah konfigurasi pada server upstream menyebabkan kueri yang diteruskan gagal. |
FAQ
Apa yang harus dilakukan jika nama domain eksternal tidak dapat diresolusi
Nama domain internal diresolusi dengan benar, tetapi nama domain eksternal gagal.
Periksa log kueri CoreDNS untuk NXDOMAIN, SERVFAIL, atau REFUSED pada nama domain yang gagal. Kode-kode ini menunjukkan bahwa server DNS upstream (secara default, 100.100.2.136 dan 100.100.2.138) mengembalikan kesalahan. Kirim tiket ke tim ECS dengan nama domain, kode respons, timestamp, dan ID instans ECS dari node yang menjalankan CoreDNS.
Apa yang harus dilakukan jika nama domain Service headless tidak dapat diresolusi
CoreDNS tidak dapat meng-resolve nama domain Service headless.
Hal ini biasanya terjadi pada versi CoreDNS sebelum 1.7.0, yang dapat keluar secara tak terduga selama fluktuasi jaringan server API Kubernetes, sehingga menyebabkan rekaman DNS Service headless menjadi usang. Perbarui CoreDNS ke versi 1.7.0 atau lebih baru. Lihat [Pembaruan Komponen] Perbarui CoreDNS.
Jika dig menunjukkan flag tc dalam respons, berarti Service headless memiliki terlalu banyak alamat IP pendukung sehingga respons DNS melebihi batas ukuran paket UDP. Konfigurasikan klien untuk mengirim kueri DNS melalui TCP:
Untuk resolver berbasis glibc, tambahkan
use-vckednsConfig:dnsConfig: options: - name: use-vcIni dipetakan ke direktif
optionsdalam/etc/resolv.conf. Untuk detailnya, lihat halaman manual Linux untuk resolv.conf.Untuk aplikasi Go, konfigurasikan resolver untuk menggunakan TCP:
package main import ( "fmt" "net" "context" ) func main() { resolver := &net.Resolver{ PreferGo: true, Dial: func(ctx context.Context, network, address string) (net.Conn, error) { return net.Dial("tcp", address) }, } addrs, err := resolver.LookupHost(context.TODO(), "example.com") if err != nil { fmt.Println("Error:", err) return } fmt.Println("Addresses:", addrs) }
Apa yang harus dilakukan jika nama domain Service headless tidak dapat diresolusi setelah memperbarui CoreDNS
Setelah upgrade ke Kubernetes 1.20 atau lebih baru dengan CoreDNS 1.8.4 atau lebih baru, komponen open-source seperti etcd, Nacos, dan Kafka gagal menemukan layanan.
CoreDNS 1.8.4 beralih ke API EndpointSlice. Beberapa komponen open-source bergantung pada anotasi service.alpha.kubernetes.io/tolerate-unready-endpoints dari API Endpoint lama untuk memublikasikan Service yang belum siap selama inisialisasi. Anotasi ini tidak didukung di EndpointSlice—telah digantikan oleh publishNotReadyAddresses.
Periksa apakah YAML atau chart Helm untuk komponen yang terpengaruh menggunakan service.alpha.kubernetes.io/tolerate-unready-endpoints. Jika iya, perbarui komponen tersebut atau konsultasikan dengan komunitas komponen tersebut.
Apa yang harus dilakukan jika nama domain pod StatefulSet tidak dapat diresolusi
Nama domain pod StatefulSet (misalnya, pod.headless-svc.ns.svc.cluster.local) tidak dapat diresolusi, tetapi nama domain Service headless-nya sendiri diresolusi dengan benar.
Templat YAML pod StatefulSet memiliki nilai serviceName yang salah atau kosong. Atur serviceName dalam spesifikasi StatefulSet ke nama persis dari Service headless yang mengekspos StatefulSet tersebut.
Apa yang harus dilakukan jika aturan security group memblokir kueri DNS
Resolusi DNS gagal pada sebagian atau semua node, secara persisten.
Aturan security group atau daftar kontrol akses jaringan (ACL) pada instans ECS memblokir port UDP 53. Ubah aturan security group atau ACL jaringan agar mengizinkan port UDP 53.
Apa yang harus dilakukan jika terjadi kesalahan konektivitas jaringan kontainer
Resolusi DNS gagal pada sebagian atau semua node, secara persisten.
Kesalahan konektivitas jaringan kontainer atau masalah lain memblokir port UDP 53. Gunakan fitur diagnostik jaringan untuk mendiagnosis konektivitas jaringan antara pod aplikasi dan pod CoreDNS. Jika masalah berlanjut, kirim tiket.
Apa yang harus dilakukan jika pod CoreDNS kelebihan beban
Latensi resolusi DNS tinggi, atau kegagalan terjadi secara persisten atau intermiten. Penggunaan CPU atau memori pod CoreDNS mendekati batas atas.
Jumlah replika CoreDNS terlalu rendah untuk menangani volume kueri DNS. Lakukan satu atau kedua langkah berikut:
Aktifkan NodeLocal DNSCache untuk mengurangi beban pada CoreDNS. Lihat Konfigurasi NodeLocal DNSCache.
Skalakan pod CoreDNS sehingga pemanfaatan CPU puncak per pod tetap di bawah ruang CPU yang tersedia di node.
Apa yang harus dilakukan jika beban kueri DNS tidak seimbang
Latensi resolusi DNS tinggi atau kegagalan intermiten terjadi pada sebagian (bukan semua) node. Pemanfaatan CPU pod CoreDNS berbeda signifikan antar pod. Terdapat kurang dari dua replika CoreDNS yang berjalan, atau beberapa pod dijadwalkan pada node yang sama.
Kueri DNS didistribusikan secara tidak merata karena penjadwalan pod yang tidak seimbang atau pengaturan SessionAffinity pada Service kube-dns. Untuk memperbaikinya:
Skalakan pod CoreDNS dan jadwalkan pada node yang berbeda.
Hapus pengaturan
SessionAffinitydari Service kube-dns. Lihat Konfigurasi ACK untuk memperbarui CoreDNS secara otomatis.
Apa yang harus dilakukan jika pod CoreDNS tidak berjalan sesuai harapan
Latensi resolusi DNS tinggi, kegagalan terjadi pada beberapa node, pod CoreDNS tidak dalam status Running, jumlah restart terus meningkat, atau log CoreDNS menunjukkan kesalahan.
YAML yang salah konfigurasi atau ConfigMap CoreDNS yang salah mencegah pod berjalan. Periksa status dan log pod.
Pesan kesalahan umum:
| Kesalahan | Penyebab | Perbaikan |
|---|---|---|
/etc/coredns/Corefile:4 - Error during parsing: Unknown directive 'ready' | Plugin ready dalam Corefile tidak didukung oleh versi CoreDNS saat ini | Hapus ready (atau plugin yang tidak didukung) dari ConfigMap CoreDNS di kube-system |
Failed to watch *v1.Pod: Get "https://192.168.0.1:443/api/v1/": dial tcp 192.168.0.1:443: connect: connection refused | Koneksi server API terputus saat log dicatat | Jika resolusi DNS tidak terpengaruh selama periode ini, ini bukan akar penyebabnya. Jika terpengaruh, diagnosa konektivitas jaringan CoreDNS. |
[ERROR] plugin/errors: 2 www.aliyun.com. A: read udp 172.20.6.53:58814->100.100.2.136:53: i/o timeout | Server DNS upstream tidak dapat dijangkau saat log dicatat | Periksa konektivitas jaringan CoreDNS ke server DNS upstream |
Apa yang harus dilakukan jika DNS gagal karena klien kelebihan beban
Kesalahan DNS terjadi secara intermiten atau selama jam sibuk. Pemantauan instans ECS menunjukkan laju pengiriman ulang NIC yang tidak normal atau pemanfaatan CPU tinggi.
Instans ECS yang menjalankan pod pengirim kueri DNS sepenuhnya dimuat, menyebabkan kehilangan paket UDP. Kirim tiket. Secara paralel, aktifkan NodeLocal DNSCache untuk mengurangi beban DNS per node. Lihat Konfigurasi NodeLocal DNSCache.
Apa yang harus dilakukan jika tabel conntrack penuh
Resolusi DNS gagal secara sering pada sebagian atau semua node selama jam sibuk tetapi berfungsi selama jam sepi. Menjalankan dmesg -H pada instans menunjukkan conntrack full dalam log selama periode kegagalan.
Tabel conntrack kernel Linux penuh, sehingga paket UDP dan TCP tidak dapat diproses. Tingkatkan jumlah maksimum entri dalam tabel conntrack. Lihat Bagaimana cara meningkatkan jumlah maksimum koneksi yang dilacak dalam tabel conntrack kernel Linux?
Apa yang harus dilakukan jika plugin autopath tidak berfungsi sebagaimana mestinya
Nama domain eksternal kadang-kadang gagal diresolusi atau diresolusi ke alamat IP yang salah, sedangkan nama domain internal diresolusi dengan benar. Saat kluster membuat kontainer dengan laju tinggi, nama domain internal kadang-kadang diresolusi ke alamat IP yang salah.
Plugin autopath di CoreDNS memiliki cacat yang diketahui. Nonaktifkan plugin tersebut:
Edit ConfigMap CoreDNS:
kubectl -n kube-system edit configmap corednsHapus baris
autopath @kubernetes, simpan file, dan keluar.Verifikasi bahwa CoreDNS memuat konfigurasi baru dengan memeriksa log untuk kata kunci
reload.
Apa yang harus dilakukan jika DNS gagal karena kueri rekaman A dan AAAA konkuren
Resolusi DNS CoreDNS gagal secara intermiten. Tangkapan paket atau log kueri DNS menunjukkan kueri rekaman A dan AAAA dikirim secara simultan melalui port sumber yang sama.
Kueri rekaman A dan AAAA konkuren menyebabkan kesalahan tabel conntrack, yang mengakibatkan kehilangan paket UDP. Pada mesin ARM, versi libc sebelum 2.33 memiliki masalah ini (lihat GLIBC#26600).
Terapkan satu atau beberapa perbaikan berikut berdasarkan lingkungan Anda:
NodeLocal DNSCache: mengurangi dampak kehilangan paket. Lihat Konfigurasi NodeLocal DNSCache.
CentOS atau Ubuntu dengan libc: perbarui libc ke versi 2.33 atau lebih baru, atau tambahkan opsi resolver:
options timeout:2 attempts:3 rotate single-request-reopen.cURL PHP: tambahkan
CURL_IPRESOLVE_V4untuk menentukan bahwa nama domain hanya dapat diresolusi ke alamat IPv4. Lihat curl_setopt.Alpine Linux: ganti dengan image dasar non-Alpine. Lihat Catatan Alpine Linux.
Apa yang harus dilakukan jika DNS gagal karena kesalahan IPVS
Resolusi DNS gagal secara intermiten saat node ditambahkan atau dihapus dari kluster, saat node dimatikan, atau saat CoreDNS diskalakan turun. Kegagalan biasanya berlangsung sekitar 5 menit.
kube-proxy berjalan dalam mode IPVS. Saat pod backend UDP dihapus dari node CentOS atau Alibaba Cloud Linux 2 dengan versi kernel sebelum 4.19.91-25.1.al7.x86_64, konflik port sumber menyebabkan paket UDP di-drop.
Untuk memperbaikinya:
Aktifkan NodeLocal DNSCache untuk melewati IPVS untuk trafik DNS. Lihat Konfigurasi NodeLocal DNSCache.
Persingkat timeout sesi UDP dalam mode IPVS. Lihat Ubah periode timeout UDP dalam mode IPVS.
Masalah NodeLocal DNSCache
Apa yang harus dilakukan jika NodeLocal DNSCache tidak berfungsi
Semua kueri DNS mencapai CoreDNS alih-alih NodeLocal DNSCache.
Salah satu dari dua hal berikut terjadi:
Injeksi DNSConfig tidak dikonfigurasi, sehingga pod masih menggunakan IP Service kube-dns.
Pod menggunakan image dasar Alpine Linux, yang mengirim kueri DNS secara konkuren ke semua nameserver yang dikonfigurasi (termasuk NodeLocal DNSCache dan CoreDNS).
Untuk memperbaiki penyebab pertama, konfigurasikan injeksi DNSConfig otomatis. Untuk memperbaiki yang kedua, ganti image berbasis Alpine dengan image non-Alpine. Lihat Konfigurasi NodeLocal DNSCache dan Catatan Alpine Linux.
Apa yang harus dilakukan jika nama domain Alibaba Cloud DNS PrivateZone tidak dapat diresolusi
Saat NodeLocal DNSCache digunakan, nama domain yang ditambahkan ke Alibaba Cloud DNS PrivateZone tidak dapat diresolusi, endpoint API layanan Alibaba Cloud yang mengandung vpc-proxy gagal diresolusi, atau nama domain diresolusi ke alamat IP yang salah.
Alibaba Cloud DNS PrivateZone tidak mendukung TCP. NodeLocal DNSCache harus meneruskan kueri ini melalui UDP. Tambahkan pengaturan prefer_udp ke konfigurasi CoreDNS. Lihat Konfigurasi CoreDNS.
Jika langkah-langkah di atas tidak menyelesaikan masalah, kirim tiket.