Topik ini menjawab pertanyaan umum mengenai Domain Name System (DNS) di kluster Container Service for Kubernetes (ACK).
Mengapa exec gagal untuk Pod CoreDNS
Gejala
Anda tidak dapat menggunakan perintah kubectl -n kube-system exec -it {coredns-pod-name} bash atau perintah serupa untuk masuk ke pod CoreDNS.
Penyebab
Gambar kontainer CoreDNS dibuat berdasarkan Scratch dan tidak menyertakan lingkungan shell.
Resolusi
Anda dapat menggunakan nsenter untuk mengakses lingkungan jaringan kontainer dari pod CoreDNS. Untuk informasi lebih lanjut, lihat Periksa konektivitas jaringan pod CoreDNS. Jika Anda perlu melihat log CoreDNS, aktifkan fitur analisis log dan pemantauan CoreDNS. Untuk informasi lebih lanjut, lihat Analisis dan pantau log CoreDNS.
Mengapa CoreDNS menggunakan API yang sudah ditinggalkan?
Gejala
Saat melakukan pemeriksaan awal peningkatan kluster, Anda menemukan bahwa klien dengan user agent coredns mengakses API Kubernetes yang sudah ditinggalkan discovery.k8s.io/v1beta1. Jalur API-nya adalah /apis/discovery.k8s.io/v1beta1.
Penyebab
CoreDNS menggunakan API discovery.k8s.io/v1beta1 untuk terhubung ke server API, tetapi API ini sudah ditinggalkan atau akan segera ditinggalkan pada versi kluster Anda. Masalah ini memiliki dua kemungkinan penyebab:
-
Versi CoreDNS terlalu lama: Versi CoreDNS yang terinstal tidak mendukung API
discovery.k8s.io/v1, sehingga menggunakan APIdiscovery.k8s.io/v1beta1. -
CoreDNS dijalankan pada versi Kubernetes yang lebih lama: CoreDNS diluncurkan pada versi Kubernetes lama (misalnya, v1.20) dan memilih API
discovery.k8s.io/v1beta1saat startup. Setelah kluster ditingkatkan dan API tersebut menjadi usang, CoreDNS tetap menggunakannya.
Resolusi
Masuk ke Konsol ACK. Di panel navigasi kiri, klik Clusters.
Pada halaman Clusters, klik nama kluster Anda. Di panel navigasi kiri, klik Add-ons.
-
Pada halaman Add-ons, tingkatkan komponen CoreDNS.
Jika halaman menunjukkan bahwa peningkatan tidak dimungkinkan, lanjutkan ke langkah berikutnya. Jika tidak, buka Langkah 3. Untuk informasi lebih lanjut tentang cara meningkatkan komponen, lihat Mengelola komponen.
-
Jalankan perintah berikut untuk me-restart CoreDNS:
kubectl -n kube-system rollout restart deployment corednsPentingKesalahan resolusi DNS kadang-kadang dapat terjadi selama proses restart. Untuk informasi lebih lanjut, lihat Mitigasi timeout DNS intermiten yang disebabkan oleh cacat IPVS.
-
Setelah CoreDNS ditingkatkan atau di-restart, jalankan perintah berikut untuk memeriksa status pod CoreDNS:
kubectl -n kube-system get pod -l k8s-app=kube-dnsJika pod CoreDNS baru saja dibuat ulang dan berada dalam status Running, Anda dapat mengabaikan catatan panggilan API yang sudah ditinggalkan dari CoreDNS pada halaman pemeriksaan awal peningkatan kluster dan melanjutkan peningkatan kluster.
Kesalahan log CoreDNS: dns: buffer size too small
Gejala
Saat Anda menjalankan perintah kubectl -n kube-system logs {coredns pod} untuk melihat log pod CoreDNS, muncul pesan kesalahan dns: buffer size too small.
Penyebab
Ukuran buffer default (bufsize) untuk CoreDNS adalah 1.232 byte. Hal ini membatasi ukuran maksimum paket UDP untuk kueri DNS dari pod Kubernetes hingga 1.232 byte. Jika tanggapan DNS melebihi batas ini, resolusi nama domain akan gagal. Hal ini terutama memengaruhi kueri DNS di dalam pod yang memiliki tanggapan besar. Untuk informasi lebih lanjut, lihat isu GitHub ini.
Resolusi
Tingkatkan CoreDNS ke v1.7.1 atau versi yang lebih baru. Untuk versi sebelum v1.7.1, Anda dapat menjalankan perintah kubectl edit cm -n kube-system coredns untuk mengonfigurasi bufsize. Nilainya harus berada dalam rentang [512, 4.096]. Untuk informasi lebih lanjut, lihat dokumentasi CoreDNS.
. {
bufsize 1220
log
}
Permintaan mengembalikan NXDOMAIN dan NOERR setelah pembuatan layanan
Komponen CoreDNS diterapkan dengan beberapa instance pod. Jika salah satu pod tidak segera mengambil informasi terbaru dari API server setelah Service baru dibuat, beberapa permintaan dapat mengembalikan hasil yang tidak konsisten. Hasil permintaan DNS akan menjadi konsisten setelah pod CoreDNS mengambil informasi Service terbaru.
Resolusi DNS pada node Windows
-
Pod yang berjalan di node Windows tidak mendukung
ClusterFirstWithHostNet. Windows memperlakukan setiap nama yang mengandung titik (.) sebagai fully qualified domain name (FQDN) dan tidak menambahkan akhiran pencarian DNS selama proses resolusi. -
Windows mendukung beberapa resolver DNS, masing-masing dengan sedikit perbedaan perilaku. Kami merekomendasikan penggunaan cmdlet PowerShell Resolve-DnsName untuk kueri resolusi nama.
-
Berbeda dengan Linux yang dapat mencari daftar akhiran DNS untuk meresolusi nama, Windows hanya menggunakan satu akhiran DNS, yaitu akhiran DNS yang terkait dengan namespace pod tersebut. Misalnya, pod yang dibuat di namespace
defaultmenerima akhiran DNSdefault.svc.cluster.local. Di pod pada node Windows, Anda dapat meresolusikubernetes.default.svc.cluster.localdankubernetes, tetapi tidak dapat meresolusi nama yang hanya sebagian sepertikubernetes.defaultataukubernetes.default.svc.
Untuk informasi lebih lanjut, lihat DNS untuk Layanan dan Pod.