Topik ini menjelaskan prosedur diagnostik dan solusi untuk kegagalan resolusi DNS. Topik ini juga mencakup metode pemecahan masalah terkait kegagalan tersebut.
Daftar isi
Prosedur Diagnostik
Internal domain name: CoreDNS mengekspos layanan yang diterapkan dalam kluster melalui nama domain internal dengan akhiran
.cluster.local. Kueri DNS untuk nama domain internal diselesaikan menggunakan cache DNS CoreDNS, bukan server DNS hulu.External domain name: Nama domain selain nama domain internal kluster. Kueri DNS untuk nama domain eksternal dapat diselesaikan oleh CoreDNS atau oleh server DNS hulu yang ditentukan dalam DNSConfig. Secara default, 100.100.2.136 dan 100.100.2.138 diatur sebagai server DNS hulu. Server DNS hulu default diterapkan di dalam virtual private cloud (VPC). Anda juga dapat menentukan server DNS yang dikelola sendiri.
Application pod: Pod yang bukan merupakan bagian dari pod komponen sistem dalam kluster Kubernetes.
Application pods that use CoreDNS for DNS resolutions: Pod aplikasi yang menggunakan CoreDNS untuk menangani kueri DNS.
Application pods that use NodeLocal DNSCache for DNS resolutions: Setelah menginstal NodeLocal DNSCache di kluster Anda, Anda dapat mengonfigurasi pengaturan DNS dengan menyuntikkan DNSConfig ke pod aplikasi. Dengan metode ini, kueri DNS dari pod tersebut pertama-tama dikirim ke NodeLocal DNSCache. Jika NodeLocal DNSCache gagal memproses kueri, kueri akan diteruskan ke Layanan kube-dns CoreDNS.

Periksa nama domain dan server DNS. Untuk informasi lebih lanjut, lihat Pemecahan Masalah DNS.
Jika pesan kesalahan menunjukkan bahwa nama domain tidak ditemukan, lihat Periksa nama domain di bagian Pemecahan Masalah.
Jika pesan kesalahan menunjukkan bahwa koneksi ke server DNS tidak dapat dibuat, lihat Periksa frekuensi kesalahan di bagian Pemecahan Masalah.
Jika kesalahan masih terjadi, lakukan pemeriksaan berikut:
Periksa apakah CoreDNS ditentukan dalam konfigurasi DNS pod aplikasi. Untuk informasi lebih lanjut, lihat Pemecahan Masalah DNS.
Jika CoreDNS tidak ditentukan dalam konfigurasi DNS, kemungkinan penyebabnya adalah klien kelebihan beban atau tabel conntrack penuh. Untuk informasi lebih lanjut, lihat Apa yang harus saya lakukan jika resolusi DNS gagal karena klien kelebihan beban? dan Apa yang harus saya lakukan jika tabel conntrack penuh?.
Jika CoreDNS ditentukan dalam konfigurasi DNS, lakukan pemeriksaan berikut:
Periksa status pod CoreDNS. Untuk informasi lebih lanjut, lihat Pemecahan Masalah DNS dan Apa yang harus saya lakukan jika pod CoreDNS tidak berjalan normal?.
Periksa log operasional pod CoreDNS. Untuk informasi lebih lanjut, lihat Pemecahan Masalah DNS dan Apa yang harus saya lakukan jika nama domain eksternal kluster saya tidak dapat diselesaikan?.
Periksa apakah kesalahan dapat direproduksi secara stabil.
Jika kesalahan dapat direproduksi secara stabil, lihat Pemecahan Masalah DNS, Pemecahan Masalah DNS, dan Pemecahan Masalah DNS.
Jika kesalahan tidak dapat direproduksi secara stabil, lihat Pemecahan Masalah DNS.
Jika NodeLocal DNSCache ditentukan dalam konfigurasi DNS, lihat Apa yang harus saya lakukan jika NodeLocal DNSCache tidak berfungsi? dan Apa yang harus saya lakukan jika nama domain yang ditambahkan ke Alibaba Cloud DNS PrivateZone tidak dapat diselesaikan?.
Jika kesalahan masih ada,submit a ticket.
Klien | Pesan Kesalahan | Penyebab Mungkin |
ping |
| Nama domain tidak ada atau server DNS tidak dapat diakses. Jika latensi resolusi lebih dari 5 detik, kemungkinan penyebabnya adalah server DNS tidak dapat diakses. |
curl |
| |
Klien HTTP PHP |
| |
Klien HTTP Golang |
| Nama domain tidak ada. |
dig |
| |
Klien HTTP Golang |
| Server DNS tidak dapat diakses. |
dig |
|
Pemecahan Masalah
Metode diagnostik yang sering digunakan
Commands
# Jalankan perintah berikut untuk menanyakan file YAML dari pod foo. Kemudian, periksa apakah bidang dnsPolicy dalam file YAML disetel ke nilai yang sesuai. kubectl get pod foo -o yaml # Jika bidang dnsPolicy disetel ke nilai yang sesuai, periksa file konfigurasi DNS dari pod. # Jalankan perintah berikut untuk masuk ke kontainer pod foo menggunakan bash. Jika bash tidak ada, gunakan sh. kubectl exec -it foo bash # Jalankan perintah berikut untuk menanyakan file konfigurasi DNS. Kemudian, periksa alamat server DNS di bidang nameserver. cat /etc/resolv.confDNS policy settings
Berikut ini adalah contoh kode template pod yang dikonfigurasi dengan pengaturan kebijakan DNS:
apiVersion: v1 kind: Pod metadata: name: <pod-name> namespace: <pod-namespace> spec: containers: - image: <container-image> name: <container-name> # Nilai default dari dnsPolicy adalah ClusterFirst. dnsPolicy: ClusterFirst # Berikut ini adalah pengaturan kebijakan DNS yang diterapkan saat menggunakan NodeLocal DNSCache. 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.local securityContext: {} serviceAccount: default serviceAccountName: default terminationGracePeriodSeconds: 30Nilai dnsPolicy
Deskripsi
Default
Anda dapat menggunakan nilai ini jika akses internal dari dalam kluster tidak diperlukan. Pod menggunakan server DNS yang ditentukan dalam file /etc/resolv.conf dari instance Elastic Compute Service (ECS).
ClusterFirst
Ini adalah nilai default. Alamat IP Layanan kube-dns digunakan sebagai alamat server DNS yang digunakan oleh pod. Untuk pod yang menggunakan jaringan host, nilai ClusterFirst memiliki efek yang sama dengan nilai Default.
ClusterFirstWithHostNet
Untuk pod yang menggunakan jaringan host, nilai ClusterFirstWithHostNet memiliki efek yang sama dengan nilai ClusterFirst.
None
Jika Anda menggunakan nilai ini, Anda dapat mengonfigurasi server DNS yang dikelola sendiri dan parameter kustom dalam bagian DNSConfig. Jika Anda mengaktifkan injeksi otomatis DNSConfig untuk NodeLocal DNSCache, alamat cache DNS lokal dan alamat Layanan kube-dns disetel sebagai alamat server DNS.
Commands
Jalankan perintah berikut untuk menanyakan informasi tentang pod CoreDNS:
kubectl -n kube-system get pod -o wide -l k8s-app=kube-dnsOutput yang diharapkan:
NAME READY STATUS RESTARTS AGE IP NODE coredns-xxxxxxxxx-xxxxx 1/1 Running 0 25h 172.20.6.53 cn-hangzhou.192.168.0.198Jalankan perintah berikut untuk menanyakan penggunaan sumber daya real-time dari pod CoreDNS:
kubectl -n kube-system top pod -l k8s-app=kube-dnsOutput yang diharapkan:
NAME CPU(cores) MEMORY(bytes) coredns-xxxxxxxxx-xxxxx 3m 18MiJika pod CoreDNS tidak berstatus Running, jalankan perintah
kubectl -n kube-system describe pod <CoreDNS pod name>guna mengidentifikasi penyebabnya.
Commands
Jalankan perintah berikut untuk menanyakan log operasional CoreDNS:
kubectl -n kube-system logs -f --tail=500 --timestamps coredns-xxxxxxxxx-xxxxxParameter | Deskripsi |
| Log dialirkan. |
| 500 baris terakhir log dicetak. |
| Timestamp termasuk dalam setiap baris dalam output log. |
| Nama pod CoreDNS. |
Commands
Log kueri DNS CoreDNS hanya dihasilkan ketika plugin log CoreDNS diaktifkan. Untuk informasi lebih lanjut tentang cara mengaktifkan plugin log, lihat Konfigurasi CoreDNS.
Jalankan perintah yang Anda gunakan untuk menanyakan log operasional CoreDNS. Untuk informasi lebih lanjut, lihat Pemecahan Masalah DNS.
Procedure
Masuk ke node tempat pod CoreDNS beroperasi.
Jalankan perintah
ps aux | grep corednsuntuk mendapatkan ID proses CoreDNS.Jalankan perintah
nsenter -t <pid> -n bashuntuk masuk ke dalam ruang nama jaringan yang digunakan oleh CoreDNS. Gantipiddengan ID proses yang diperoleh pada langkah sebelumnya.Uji konektivitas jaringan.
Jalankan perintah
telnet <apiserver_slb_ip> 443untuk menguji konektivitas ke server API Kubernetes dari kluster.Ganti
apiserver_slb_ipdengan alamat IP Layanan yang digunakan untuk mengekspos server API Kubernetes dari kluster.Jalankan perintah
dig <domain> @<upstream_dns_server_ip>untuk menguji konektivitas antara pod CoreDNS dan server DNS hulu.Ganti
domaindengan nama domain uji danupstream_dns_server_ipdengan alamat IP server DNS hulu, yaitu 100.100.2.136 dan 100.100.2.138 secara default.
FAQ
Gejala | Penyebab | Solusi |
CoreDNS tidak dapat terhubung ke server API Kubernetes dari kluster. | Kesalahan terjadi pada server API Kubernetes dari kluster, node kelebihan beban, atau kube-proxy tidak berjalan normal. | Submit a ticket untuk mendapatkan bantuan pemecahan masalah. |
CoreDNS tidak dapat terhubung ke server DNS hulu. | Node kelebihan beban, konfigurasi CoreDNS salah, atau konfigurasi routing dari sirkuit Express Connect salah. | Submit a ticket untuk mendapatkan bantuan pemecahan masalah. |
Procedure
Gunakan salah satu metode berikut untuk terhubung ke jaringan kontainer pod aplikasi:
Metode 1: Jalankan perintah
kubectl exec.Metode 2:
Masuk ke node tempat pod aplikasi berjalan.
Jalankan perintah
ps aux | grep <application process name>untuk memeriksa ID proses aplikasi.Jalankan perintah
nsenter -t <pid> -n bashuntuk masuk ke dalam ruang nama jaringan yang digunakan oleh pod aplikasi.Ganti
piddengan ID proses yang diperoleh pada langkah sebelumnya.
Metode 3: Jika pod aplikasi sering memulai ulang, lakukan langkah-langkah berikut:
Masuk ke node tempat pod aplikasi berjalan.
Jalankan perintah
docker ps -a | grep <application container names>untuk memeriksa kontainer yang namanya dimulai dengank8s_POD_. Catat ID dari kontainer sandbox yang dikembalikan.Jalankan perintah
docker inspect <sandboxed container ID> | grep netnsuntuk mendapatkan jalur ruang nama jaringan yang dimiliki oleh kontainer di file /var/run/docker/netns/xxxx.Jalankan perintah
nsenter -n<netns path> -n bashuntuk masuk ke dalam namespace jaringan.Ganti
netns pathdengan jalur yang diperoleh pada langkah sebelumnya.CatatanJangan tambahkan spasi antara
-ndan<netns path>.
Uji konektivitas jaringan.
Jalankan perintah
dig <domain> @<kube_dns_svc_ip>guna menguji konektivitas antara pod aplikasi dan Layanan kube-dns.Ganti
<domain>dengan nama domain uji dan<kube_dns_svc_ip>dengan alamat IP Layanan kube-dns di namespace kube-system.Jalankan perintah
ping <coredns_pod_ip>untuk menguji konektivitas antara pod aplikasi dan pod CoreDNS.Ganti
<coredns_pod_ip>dengan alamat IP pod CoreDNS di namespace kube-system.Jalankan perintah
dig <domain> @<coredns_pod_ip>untuk menguji konektivitas antara pod aplikasi dan pod CoreDNS.Ganti
<domain>dengan nama domain uji dan<coredns_pod_ip>dengan alamat IP pod CoreDNS di namespace kube-system.
FAQ
Gejala | Penyebab | Solusi |
Pod aplikasi tidak dapat terhubung ke Layanan kube-dns. | Node kelebihan beban, kube-proxy tidak berjalan normal, atau aturan grup keamanan memblokir port UDP 53. | Periksa apakah aturan grup keamanan membuka port UDP 53. Jika aturan grup keamanan membuka port UDP 53, submit a ticket untuk pemecahan masalah lebih lanjut. |
Pod aplikasi tidak dapat terhubung ke pod CoreDNS. | Kesalahan terkait jaringan kontainer terjadi atau aturan grup keamanan memblokir Internet Control Message Protocol (ICMP). | Diagnosis jaringan kontainer. |
Pod aplikasi tidak dapat terhubung ke pod CoreDNS. | Node kelebihan beban atau aturan grup keamanan memblokir port UDP 53. | Periksa apakah aturan grup keamanan membuka port UDP 53. Jika aturan grup keamanan membuka port UDP 53, submit a ticket untuk pemecahan masalah lebih lanjut. |
Masuk ke Konsol ACK atau .
Di halaman Clusters, cari kluster yang ingin dikelola, lalu klik nama kluster atau pilih Details di kolom Actions. Halaman detail kluster akan ditampilkan.
Di panel navigasi kiri Konsol ACK, klik Clusters.
Di panel navigasi kiri halaman detail, pilih .
Di panel navigasi kiri halaman Container Intelligence Service, pilih .
Di halaman Diagnosis, klik tab Network Diagnosis.
Atur Source address ke alamat IP pod aplikasi, Destination address ke alamat IP Layanan kube-dns, dan Destination port ke 53. Pilih opsi Enable packet tracing serta I know and agree. Selanjutnya, klik Create diagnosis.
Di daftar catatan diagnosis, cari catatan yang ingin dikelola dan klik Diagnosis details pada kolom operation.
Hasil diagnosis dapat dilihat di bagian Diagnosis result, Packet paths, dan All possible paths. Penyebab kesalahan juga disertakan. Untuk informasi lebih lanjut, lihat Bekerja dengan diagnosis kluster.
Jika Anda tidak dapat mengidentifikasi masalah, tangkap dan diagnosis paket.
Masuk ke node tempat pod aplikasi dan pod CoreDNS dijalankan.
Jalankan perintah berikut pada setiap instance ECS untuk menangkap semua paket terbaru yang diterima di port 53:
tcpdump -i any port 53 -C 20 -W 200 -w /tmp/client_dns.pcapDiagnosis paket yang ditransfer selama periode waktu saat terjadi kesalahan resolusi DNS. Periode waktu tersebut dapat diperoleh dari log aplikasi.
CatatanPengambilan paket tidak memengaruhi layanan Anda dan hanya menyebabkan peningkatan kecil dalam utilisasi CPU dan I/O disk.
Perintah sebelumnya merotasi paket yang ditangkap dan dapat menghasilkan hingga 200 file .pcap yang masing-masing memiliki ukuran 20 MB.
Apa yang harus saya lakukan jika nama domain eksternal kluster saya tidak dapat diselesaikan?
Causes
Server DNS hulu mengembalikan kode kesalahan, yang menunjukkan bahwa kesalahan resolusi nama domain terjadi.
Symptom
Nama domain internal kluster dapat diselesaikan, tetapi nama domain eksternal tidak dapat diselesaikan.
Solutions
Periksa log kueri DNS CoreDNS.
Example of DNS query record
Setelah CoreDNS merespons kueri DNS klien, CoreDNS menghasilkan entri log untuk mencatat kueri DNS:
# Jika kode respons adalah NOERROR, itu menunjukkan bahwa nama domain diselesaikan tanpa kesalahan.
[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.000116946sCommon DNS response codes
Untuk informasi lebih lanjut tentang kode respons DNS, lihat Spesifikasi.
Kode Respons | Deskripsi | Penyebab |
NXDOMAIN | Nama domain tidak ada di server DNS hulu. | Nama domain dalam permintaan pod dilampirkan dengan akhiran domain pencarian. Jika nama domain dengan akhiran tidak ada di server DNS, kode respons ini dikembalikan. Jika Anda menemukan kode respons ini dalam log kueri DNS, itu menunjukkan bahwa kesalahan resolusi nama domain terjadi. |
SERVFAIL | Kesalahan terjadi pada server DNS hulu. | Kesalahan terjadi pada server DNS hulu. Misalnya, koneksi ke server DNS hulu tidak dapat dibuat. |
REFUSED | Kueri DNS ditolak oleh server DNS hulu. | Server DNS hulu yang ditentukan dalam konfigurasi CoreDNS atau file /etc/resolv.conf node tidak dapat menyelesaikan nama domain. Anda dapat memeriksa file konfigurasi CoreDNS. |
Apa yang harus saya lakukan jika nama domain Layanan tanpa kepala tidak dapat diselesaikan?
Causes
Pada versi CoreDNS sebelum 1.7.0, CoreDNS mungkin keluar secara tak terduga jika gangguan jaringan terjadi pada server API Kubernetes dari kluster. Akibatnya, nama domain Layanan tanpa kepala tidak diperbarui saat CoreDNS mati.
Symptom
CoreDNS tidak dapat menyelesaikan nama domain Layanan tanpa kepala.
Solutions
Perbarui CoreDNS ke versi 1.7.0 atau yang lebih baru. Untuk informasi lebih lanjut, lihat [Pembaruan Komponen] Perbarui CoreDNS.
Apa yang harus saya lakukan jika nama domain Pod StatefulSet tidak dapat diselesaikan?
Causes
Jika StatefulSet diekspos menggunakan Layanan tanpa kepala, parameter ServiceName dalam template YAML pod harus disetel ke nama Layanan tanpa kepala. Jika tidak, Anda tidak dapat mengakses nama domain Pod StatefulSet, seperti pod.headless-svc.ns.svc.cluster.local. Namun, Anda dapat mengakses nama domain Layanan tanpa kepala, seperti headless-svc.ns.svc.cluster.local.
Symptom
Nama domain Pod StatefulSet tidak dapat diselesaikan.
Solutions
Setel parameter ServiceName dalam template YAML pod ke nama Layanan tanpa kepala yang digunakan untuk mengekspos Pod StatefulSet.
Apa yang harus saya lakukan jika kueri DNS diblokir oleh aturan grup keamanan atau daftar kontrol akses jaringan (ACL) yang terkait dengan vSwitches?
Causes
Aturan grup keamanan atau ACL jaringan yang mengontrol komunikasi jaringan instance ECS memblokir port UDP 53.
Symptom
Kegagalan resolusi DNS CoreDNS terus berlanjut pada beberapa atau semua node.
Solutions
Ubah aturan grup keamanan atau ACL jaringan untuk membuka port UDP 53.
Apa yang harus saya lakukan jika kesalahan konektivitas jaringan kontainer terjadi?
Causes
Port UDP 53 diblokir karena kesalahan konektivitas jaringan kontainer atau penyebab lainnya.
Symptom
Kegagalan resolusi DNS CoreDNS terus berlanjut pada beberapa atau semua node.
Solutions
Diagnosis jaringan kontainer. Untuk informasi lebih lanjut, lihat Bekerja dengan diagnosis kluster.
Apa yang harus saya lakukan jika pod CoreDNS kelebihan beban?
Causes
Jumlah pod replika yang dikonfigurasikan untuk CoreDNS tidak cukup untuk menangani kueri DNS.
Symptom
Latensi resolusi DNS CoreDNS tinggi, atau kegagalan resolusi DNS CoreDNS terus berlanjut atau kadang-kadang terjadi pada beberapa atau semua node.
Periksa status pod CoreDNS dan periksa apakah utilisasi CPU dan memori mendekati batas atas.
Solutions
Gunakan NodeLocal DNSCache untuk meningkatkan efisiensi resolusi DNS dan mengurangi beban pada CoreDNS. Untuk informasi lebih lanjut, lihat Konfigurasi NodeLocal DNSCache.
Tambahkan jumlah pod CoreDNS dan pastikan bahwa utilisasi CPU puncak setiap pod kurang dari jumlah sumber daya CPU idle dari node.
Apa yang harus saya lakukan jika kueri DNS tidak didistribusikan secara merata di antara pod CoreDNS?
Causes
Kueri DNS tidak didistribusikan secara merata di antara pod CoreDNS karena penjadwalan pod yang tidak seimbang atau pengaturan SessionAffinity Layanan kube-dns yang tidak tepat.
Symptom
Latensi resolusi DNS CoreDNS tinggi, atau kegagalan resolusi DNS CoreDNS terus berlanjut atau kadang-kadang terjadi pada beberapa atau semua node.
Status pod CoreDNS menunjukkan bahwa utilisasi CPU berbeda di antara pod.
Jumlah pod replika yang dikonfigurasikan untuk CoreDNS kurang dari dua atau beberapa pod CoreDNS diterapkan pada node yang sama.
Solutions
Tambahkan jumlah pod CoreDNS dan jadwalkan pod ke node yang berbeda.
Anda dapat menghapus parameter SessionAffinity dari konfigurasi Layanan kube-dns. Untuk informasi lebih lanjut, lihat Konfigurasi ACK untuk memperbarui CoreDNS secara otomatis.
Apa yang harus saya lakukan jika pod CoreDNS tidak berjalan normal?
Causes
Pod CoreDNS tidak berjalan normal karena pengaturan yang tidak tepat dalam file YAML atau ConfigMap CoreDNS.
Symptom
Latensi resolusi DNS CoreDNS tinggi, atau kegagalan resolusi DNS CoreDNS terus berlanjut atau kadang-kadang terjadi pada beberapa atau semua node.
Pod CoreDNS tidak dalam status Running atau jumlah restart pod terus bertambah.
Data log CoreDNS menunjukkan bahwa kesalahan terjadi.
Solutions
Periksa status dan log operasional pod CoreDNS.
CoreDNS errors and solutions
Kesalahan | Penyebab | Solusi |
| Konfigurasi dalam ConfigMap CoreDNS tidak kompatibel dengan versi CoreDNS saat ini. Pesan kesalahan | Hapus plugin ready dari ConfigMap CoreDNS dalam namespace kube-system. Jika plugin lain muncul dalam log kesalahan, hapus plugin tersebut dari ConfigMap. |
| Koneksi ke server API Kubernetes terputus selama periode log tersebut dibuat. | Jika tidak ada kesalahan resolusi DNS yang terjadi selama periode ini, kesalahan tersebut bukan disebabkan oleh masalah konektivitas jaringan. Jika tidak, periksa konektivitas jaringan pod CoreDNS. Untuk informasi lebih lanjut, lihat Pemecahan Masalah DNS. |
| Koneksi ke server DNS hulu tidak dapat dibuat selama periode log tersebut dibuat. |
Apa yang harus saya lakukan jika resolusi DNS gagal karena klien kelebihan beban?
Causes
Instance ECS yang menjadi host pod yang mengirim kueri DNS ke CoreDNS sepenuhnya dimuat, yang menyebabkan kehilangan paket UDP.
Symptom
Kesalahan resolusi DNS terjadi sesekali atau selama jam sibuk. Informasi pemantauan tentang instance ECS menunjukkan laju retransmisi abnormal dari pengontrol antarmuka jaringan (NIC) dan utilisasi CPU yang abnormal.
Solutions
Submit a ticket untuk mendapatkan bantuan pemecahan masalah.
Gunakan NodeLocal DNSCache untuk meningkatkan efisiensi resolusi DNS dan mengurangi beban pada CoreDNS. Untuk informasi lebih lanjut, lihat Konfigurasi NodeLocal DNSCache.
Apa yang harus saya lakukan jika tabel conntrack penuh?
Causes
Tabel conntrack kernel Linux penuh. Akibatnya, permintaan yang dikirim melalui UDP atau TCP tidak dapat diproses.
Symptom
CoreDNS sering gagal menyelesaikan nama domain di beberapa atau semua node selama jam sibuk, tetapi dapat menyelesaikan nama domain seperti yang diharapkan di luar jam sibuk.
Jalankan perintah
dmesg -Hpada instance dan periksa log yang dihasilkan selama periode waktu ketika resolusi gagal. Log tersebut mencakup kata kunciconntrack full.
Solutions
Tingkatkan jumlah maksimum entri dalam tabel conntrack kernel Linux. Untuk informasi lebih lanjut, lihat Bagaimana cara meningkatkan jumlah maksimum entri conntrack kernel Linux?.
Apa yang harus saya lakukan jika plugin autopath tidak berfungsi normal?
Causes
Plugin autopath tidak berfungsi normal karena cacat pada CoreDNS.
Symptom
Nama domain eksternal kadang-kadang gagal diselesaikan atau kadang-kadang diselesaikan ke alamat IP yang salah. Namun, nama domain internal diselesaikan secara normal.
Saat kluster membuat kontainer dengan frekuensi tinggi, nama domain internal diselesaikan ke alamat IP yang salah.
Solutions
Lakukan operasi berikut untuk menonaktifkan plugin autopath:
Jalankan perintah
kubectl -n kube-system edit configmap corednsuntuk memodifikasi ConfigMap CoreDNS.Hapus
autopath @kubernetes, lalu simpan perubahan dan keluar.Periksa status dan log operasional pod CoreDNS. Jika log berisi kata kunci
reload, konfigurasi baru telah dimuat.
Apa yang harus saya lakukan jika resolusi DNS gagal karena kueri bersamaan untuk rekaman A dan AAAA?
Causes
Kueri DNS bersamaan untuk rekaman A dan AAAA menyebabkan kesalahan pada tabel conntrack kernel Linux, yang mengakibatkan kehilangan paket UDP.
Symptom
Resolusi DNS CoreDNS gagal sesekali.
Paket yang ditangkap atau log kueri DNS ke CoreDNS menunjukkan bahwa kueri untuk rekaman A dan AAAA diinisiasi secara bersamaan melalui port yang sama.
Solutions
Gunakan NodeLocal DNSCache untuk meningkatkan efisiensi resolusi DNS dan mengurangi beban pada CoreDNS. Untuk informasi lebih lanjut, lihat Konfigurasi NodeLocal DNSCache.
Jika gambar yang Anda gunakan berbasis CentOS atau Ubuntu, tambahkan konfigurasi
options timeout:2 attempts:3 rotate single-request-reopen.Jika image yang Anda gunakan berbasis Alpine Linux, kami menyarankan Anda untuk mengganti image tersebut dengan image yang berbasis sistem operasi lain. Untuk informasi lebih lanjut, lihat Alpine.
Berbagai kesalahan resolusi dapat terjadi ketika aplikasi berbasis PHP mengirim kueri DNS melalui koneksi singkat. Jika menggunakan PHP cURL, Anda perlu menambahkan
CURL_IPRESOLVE_V4untuk menentukan bahwa nama domain hanya dapat diresolusi ke alamat IPv4. Untuk informasi lebih lanjut, lihat Fungsi cURL.
Apa yang harus saya lakukan jika resolusi DNS gagal karena kesalahan IP Virtual Server (IPVS)?
Causes
Mode penyeimbangan beban kube-proxy disetel ke IPVS dalam kluster Anda. Jika Anda menghapus backend UDP IPVS dari node yang menjalankan CentOS atau Alibaba Cloud Linux 2 dengan versi kernel lebih awal dari 4.19.91-25.1.al7.x86_64, konflik port sumber terjadi saat paket UDP dikirim. Akibatnya, paket UDP dijatuhkan.
Symptom
Resolusi DNS gagal sesekali saat node ditambahkan ke atau dihapus dari kluster, node dimatikan, atau CoreDNS diperkecil. Dalam banyak kasus, situasi ini berlangsung sekitar 5 menit.
Solutions
Gunakan NodeLocal DNSCache untuk mengurangi kehilangan paket dalam mode IPVS. Untuk informasi lebih lanjut, lihat Konfigurasi NodeLocal DNSCache.
Perpendek periode timeout sesi UDP dalam mode IPVS. Untuk informasi lebih lanjut, lihat Ubah periode timeout UDP dalam mode IPVS.
Apa yang harus saya lakukan jika NodeLocal DNSCache tidak berfungsi?
Causes
DNSConfig tidak disuntikkan ke pod aplikasi. Alamat IP Layanan kube-dns dikonfigurasikan sebagai alamat server DNS untuk pod aplikasi.
Pod aplikasi diterapkan menggunakan gambar berbasis Alpine Linux. Akibatnya, kueri DNS dikirim secara bersamaan ke semua nameserver, termasuk cache DNS lokal dan pod CoreDNS.
Symptom
Semua kueri DNS dikirim ke CoreDNS bukan NodeLocal DNSCache.
Solutions
Konfigurasikan injeksi otomatis untuk DNSConfig. Untuk informasi lebih lanjut, lihat Konfigurasi NodeLocal DNSCache.
Jika gambar yang Anda gunakan berbasis Alpine Linux, kami sarankan Anda mengganti gambar dengan gambar yang berbasis pada sistem operasi lain. Untuk informasi lebih lanjut, lihat Alpine.
Apa yang harus saya lakukan jika nama domain yang ditambahkan ke Alibaba Cloud DNS PrivateZone tidak dapat diselesaikan?
Causes
Alibaba Cloud DNS PrivateZone tidak mendukung TCP. Anda harus menggunakan UDP.
Symptom
Saat menggunakan NodeLocal DNSCache, nama domain yang ditambahkan ke Alibaba Cloud DNS PrivateZone tidak dapat diselesaikan, titik akhir API layanan Alibaba Cloud yang mengandung vpc-proxy tidak dapat diselesaikan, atau nama domain diselesaikan ke alamat IP yang salah.
Solutions
Tambahkan konfigurasi prefer_udp ke CoreDNS. Untuk detail lebih lanjut, lihat Konfigurasi CoreDNS.