全部产品
Search
文档中心

Container Service for Kubernetes:FAQ DNS

更新时间:Jul 02, 2025

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/v1beta1 karena versi saat ini tidak mendukung API discovery.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/v1beta1 dipilih ketika ACK meluncurkan pod CoreDNS. Kemudian, kluster diperbarui ke versi Kubernetes di mana API discovery.k8s.io/v1beta1 sudah ditinggalkan tetapi CoreDNS masih menggunakan API yang sudah ditinggalkan.

Solusi

  1. Masuk ke Konsol ACK. Di panel navigasi sebelah kiri, klik Clusters.

  2. Di halaman Clusters, temukan kluster yang ingin Anda kelola dan klik namanya. Di panel navigasi sebelah kiri, klik Add-ons.

  3. 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.

  4. Gunakan kubectl untuk menjalankan perintah berikut guna me-restart CoreDNS:

    kubectl -n kube-system rollout restart deployment coredns
    Penting

    Kesalahan 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.

  5. 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-dns

    Jika 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 default menerima sufiks DNS default.svc.cluster.local. Di pod pada Node Windows, Anda dapat menyelesaikan kubernetes.default.svc.cluster.local dan kubernetes, tetapi Anda tidak dapat menyelesaikan nama yang sebagian memenuhi syarat, seperti kubernetes.default dan kubernetes.default.svc.

Untuk informasi lebih lanjut, lihat DNS untuk Layanan dan Pod.