Topik ini menjawab beberapa pertanyaan umum (FAQ) terkait resolusi Sistem Nama Domain (DNS) di kluster Container Service for Kubernetes (ACK).
Apa yang harus saya lakukan jika tidak dapat mengakses pod CoreDNS dengan menjalankan perintah exec?
Masalah
Anda tidak dapat mengakses pod CoreDNS menggunakan perintah kubectl -n kube-system exec -it {coredns pod} bash atau perintah serupa.
Penyebab
Gambar kontainer yang digunakan oleh pod CoreDNS dibangun menggunakan Scratch dan tidak memiliki shell.
Solusi
Gunakan perintah nsenter untuk masuk ke namespace tempat pod CoreDNS berada. Untuk informasi lebih lanjut, lihat Diagnosis konektivitas jaringan pod CoreDNS. Anda juga dapat memantau CoreDNS dengan mengumpulkan dan menganalisis log CoreDNS. Untuk detail lebih lanjut, lihat Kumpulkan dan analisis log CoreDNS.
Mengapa CoreDNS menggunakan API yang sudah ditinggalkan?
Masalah
Hasil pra-pemeriksaan pembaruan kluster menunjukkan bahwa klien dengan user agent coredns menggunakan Kubernetes API yang sudah ditinggalkan discovery.k8s.io/v1beta1. Titik akhir dari API tersebut adalah /apis/discovery.k8s.io/v1beta1.
Penyebab
CoreDNS menggunakan API discovery.k8s.io/v1beta1 untuk terhubung ke server API. Namun, API tersebut sudah ditinggalkan atau akan ditinggalkan dalam versi kluster yang Anda gunakan. Masalah ini terjadi dalam skenario berikut:
Versi CoreDNS yang lebih lama dipasang di kluster. CoreDNS menggunakan API
discovery.k8s.io/v1beta1karena versi saat ini tidak mendukung APIdiscovery.k8s.io/v1.Versi CoreDNS dan Kubernetes telah diperbarui. Namun, CoreDNS diluncurkan di versi Kubernetes yang lebih lama, seperti 1.20, dan API
discovery.k8s.io/v1beta1dipilih ketika ACK meluncurkan pod CoreDNS. Kemudian, kluster diperbarui ke versi Kubernetes di mana APIdiscovery.k8s.io/v1beta1sudah ditinggalkan tetapi CoreDNS masih menggunakan API yang sudah ditinggalkan.
Solusi
Masuk ke Konsol ACK. Di panel navigasi sebelah kiri, klik Clusters.
Di halaman Clusters, temukan kluster yang ingin Anda kelola dan klik namanya. Di panel navigasi sebelah kiri, klik Add-ons.
Perbarui komponen CoreDNS dari halaman Add-ons.
Jika halaman menunjukkan bahwa tidak ada pembaruan yang tersedia, lanjutkan ke langkah berikutnya. Jika tidak, lakukan Langkah 3. Untuk informasi lebih lanjut tentang cara memperbarui komponen CoreDNS, lihat Kelola komponen.
Gunakan kubectl untuk menjalankan perintah berikut guna me-restart CoreDNS:
kubectl -n kube-system rollout restart deployment corednsPentingKesalahan resolusi DNS mungkin kadang-kadang terjadi selama proses restart. Untuk informasi lebih lanjut, lihat Kurangi dampak buruk timeout resolusi DNS sesekali yang disebabkan oleh cacat IPVS.
Setelah CoreDNS diperbarui atau direstart, gunakan kubectl untuk menjalankan perintah berikut guna menanyakan status pod CoreDNS:
kubectl -n kube-system get pod -l k8s-app=kube-dnsJika pod CoreDNS dibuat ulang dan dalam keadaan Running, Anda dapat mengabaikan item pemeriksaan terkait penggunaan API yang sudah ditinggalkan di halaman pra-pemeriksaan dan melanjutkan pembaruan kluster.
Apa yang harus saya lakukan jika pesan kesalahan dns: buffer size too small muncul di log CoreDNS?
Masalah
Ketika Anda menjalankan perintah kubectl -n kube-system logs {coredns pod} untuk menanyakan log pod CoreDNS, pesan kesalahan dns: buffer size too small ditampilkan.
Penyebab
Ukuran buffer default (bufsize) untuk CoreDNS adalah 1232 byte, yang membatasi ukuran maksimum paket UDP untuk kueri DNS di pod Kubernetes menjadi 1232 byte. Jika respons kueri DNS melebihi batas ini, resolusi DNS akan gagal dan hasil kueri tidak akan diterima, terutama jika data respons besar. Untuk detail lebih lanjut, lihat masalah.
Solusi
Tingkatkan CoreDNS ke v1.7.1 atau yang lebih baru. Jika versi CoreDNS lebih lama dari v1.7.1, Anda dapat mengonfigurasi ukuran buffer menggunakan perintah kubectl edit cm -n kube-system coredns. Bufsize harus berada dalam rentang [512, 4096]. Untuk informasi lebih lanjut, lihat Dokumentasi CoreDNS.
. {
bufsize 1220
log
}Apa yang harus saya lakukan jika NXDOMAIN dan NOERR dikembalikan setelah saya mengirim dua permintaan berturut-turut setelah pembuatan Layanan?
Komponen CoreDNS diterapkan di beberapa pod. Jika salah satu pod tidak segera mengambil informasi terbaru dari server API setelah Layanan baru dibuat, ini dapat menghasilkan respons yang tidak konsisten untuk beberapa permintaan. Setelah pod CoreDNS mendapatkan informasi Layanan terbaru, hasil permintaan DNS menjadi konsisten.
Fitur resolusi DNS pada Node Windows
Pod yang berjalan pada Node Windows tidak mendukung
ClusterFirstWithHostNet. Windows memperlakukan semua nama yang mengandung titik (.) sebagai nama domain lengkap (FQDN) dan melewati resolusi FQDN.Windows mendukung berbagai resolver DNS, tetapi resolver ini mungkin menunjukkan sedikit perbedaan perilaku. Kami merekomendasikan Anda menggunakan cmdlet PowerShell Resolve-DnsName untuk resolusi kueri nama DNS.
Di Linux, ketika resolusi nama domain gagal, sistem secara berurutan mencoba melakukan re-resolusi menggunakan daftar sufiks DNS yang telah ditentukan. Sebaliknya, Windows hanya mendukung satu sufiks DNS, yang terkait dengan namespace pod. Misalnya, pod yang dibuat di namespace
defaultmenerima sufiks DNSdefault.svc.cluster.local. Di pod pada Node Windows, Anda dapat menyelesaikankubernetes.default.svc.cluster.localdankubernetes, tetapi Anda tidak dapat menyelesaikan nama yang sebagian memenuhi syarat, sepertikubernetes.defaultdankubernetes.default.svc.
Untuk informasi lebih lanjut, lihat DNS untuk Layanan dan Pod.