全部产品
Search
文档中心

Container Service for Kubernetes:Pemecahan Masalah DNS

更新时间:Jan 14, 2026

Topik ini menjelaskan prosedur diagnostik dan solusi untuk kegagalan resolusi DNS. Topik ini juga mencakup metode pemecahan masalah terkait kegagalan tersebut.

Daftar isi

Item

Deskripsi

Diagnostic procedure

Troubleshooting

Pemecahan Masalah

Diagnostic methods

FAQ

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.

Troubleshooting flowchart.png

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

  2. Jika kesalahan masih terjadi, lakukan pemeriksaan berikut:

  3. Jika kesalahan masih ada,submit a ticket.

Klien

Pesan Kesalahan

Penyebab Mungkin

ping

ping: xxx.yyy.zzz: Nama atau layanan tidak dikenal

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

curl: (6) Tidak dapat menyelesaikan host: xxx.yyy.zzz

Klien HTTP PHP

php_network_getaddresses: getaddrinfo failed: Nama atau layanan tidak dikenal di xxx.php pada baris yyy

Klien HTTP Golang

dial tcp: lookup xxx.yyy.zzz on 100.100.2.136:53: no such host

Nama domain tidak ada.

dig

;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: xxxxx

Klien HTTP Golang

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

dig

;; connection timed out; no servers could be reached

Pemecahan Masalah

Pemecahan Masalah

Gejala

Referensi untuk perbaikan

Periksa nama domain

Kesalahan resolusi terjadi pada nama domain internal dan eksternal.

Kesalahan resolusi hanya terjadi pada nama domain eksternal.

Apa yang harus saya lakukan jika nama domain eksternal kluster saya tidak dapat diselesaikan?

Kesalahan resolusi hanya terjadi pada nama domain yang ditambahkan ke Alibaba Cloud DNS PrivateZone dan nama domain yang mengandung vpc-proxy.

Apa yang harus saya lakukan jika nama domain yang ditambahkan ke Alibaba Cloud DNS PrivateZone tidak dapat diselesaikan?

Kesalahan resolusi hanya terjadi pada nama domain Layanan tanpa kepala.

Periksa frekuensi kesalahan

Kesalahan resolusi terjadi setiap kali.

Kesalahan resolusi hanya terjadi selama jam sibuk.

Kesalahan resolusi terjadi dengan frekuensi tinggi.

Kesalahan resolusi terjadi dengan frekuensi rendah.

Kesalahan resolusi hanya terjadi selama peristiwa penskalaan node atau peristiwa penskalaan CoreDNS.

Apa yang harus saya lakukan jika resolusi DNS gagal karena kesalahan IP Virtual Server (IPVS)?

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.conf
  • DNS 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: 30

    Nilai 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-dns

    Output 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.198
  • Jalankan perintah berikut untuk menanyakan penggunaan sumber daya real-time dari pod CoreDNS:

    kubectl -n kube-system top pod -l k8s-app=kube-dns

    Output yang diharapkan:

    NAME                      CPU(cores)   MEMORY(bytes)
    coredns-xxxxxxxxx-xxxxx   3m           18Mi
  • Jika 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-xxxxx

Parameter

Deskripsi

f

Log dialirkan.

tail=500

500 baris terakhir log dicetak.

timestamps

Timestamp termasuk dalam setiap baris dalam output log.

coredns-xxxxxxxxx-xxxxx

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

  1. Masuk ke node tempat pod CoreDNS beroperasi.

  2. Jalankan perintah ps aux | grep coredns untuk mendapatkan ID proses CoreDNS.

  3. Jalankan perintah nsenter -t <pid> -n bash untuk masuk ke dalam ruang nama jaringan yang digunakan oleh CoreDNS. Ganti pid dengan ID proses yang diperoleh pada langkah sebelumnya.

  4. Uji konektivitas jaringan.

    1. Jalankan perintah telnet <apiserver_slb_ip> 443 untuk menguji konektivitas ke server API Kubernetes dari kluster.

      Ganti apiserver_slb_ip dengan alamat IP Layanan yang digunakan untuk mengekspos server API Kubernetes dari kluster.

    2. Jalankan perintah dig <domain> @<upstream_dns_server_ip> untuk menguji konektivitas antara pod CoreDNS dan server DNS hulu.

      Ganti domain dengan nama domain uji dan upstream_dns_server_ip dengan 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

  1. Gunakan salah satu metode berikut untuk terhubung ke jaringan kontainer pod aplikasi:

    • Metode 1: Jalankan perintah kubectl exec.

    • Metode 2:

      1. Masuk ke node tempat pod aplikasi berjalan.

      2. Jalankan perintah ps aux | grep <application process name> untuk memeriksa ID proses aplikasi.

      3. Jalankan perintah nsenter -t <pid> -n bash untuk masuk ke dalam ruang nama jaringan yang digunakan oleh pod aplikasi.

        Ganti pid dengan ID proses yang diperoleh pada langkah sebelumnya.

    • Metode 3: Jika pod aplikasi sering memulai ulang, lakukan langkah-langkah berikut:

      1. Masuk ke node tempat pod aplikasi berjalan.

      2. Jalankan perintah docker ps -a | grep <application container names> untuk memeriksa kontainer yang namanya dimulai dengan k8s_POD_. Catat ID dari kontainer sandbox yang dikembalikan.

      3. Jalankan perintah docker inspect <sandboxed container ID> | grep netns untuk mendapatkan jalur ruang nama jaringan yang dimiliki oleh kontainer di file /var/run/docker/netns/xxxx.

      4. Jalankan perintah nsenter -n<netns path> -n bash untuk masuk ke dalam namespace jaringan.

        Ganti netns path dengan jalur yang diperoleh pada langkah sebelumnya.

        Catatan

        Jangan tambahkan spasi antara -n dan <netns path>.

  2. Uji konektivitas jaringan.

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

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

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

  1. Masuk ke Konsol ACK atau .

  2. Di halaman Clusters, cari kluster yang ingin dikelola, lalu klik nama kluster atau pilih Details di kolom Actions. Halaman detail kluster akan ditampilkan.

  3. Di panel navigasi kiri Konsol ACK, klik Clusters.

  4. Di panel navigasi kiri halaman detail, pilih Operations > Cluster Check.

  5. Di panel navigasi kiri halaman Container Intelligence Service, pilih Cluster Check > Diagnosis.

  6. Di halaman Diagnosis, klik tab Network Diagnosis.

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

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

  1. Masuk ke node tempat pod aplikasi dan pod CoreDNS dijalankan.

  2. 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.pcap
  3. Diagnosis paket yang ditransfer selama periode waktu saat terjadi kesalahan resolusi DNS. Periode waktu tersebut dapat diperoleh dari log aplikasi.

    Catatan
    • Pengambilan 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.000116946s

Common 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

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

/etc/coredns/Corefile:4 - Kesalahan saat penguraian: Direktif 'ready' tidak dikenal

Konfigurasi dalam ConfigMap CoreDNS tidak kompatibel dengan versi CoreDNS saat ini. Pesan kesalahan Unknown directive menunjukkan bahwa versi CoreDNS yang digunakan tidak mendukung plugin ready yang ditentukan dalam Corefile.

Hapus plugin ready dari ConfigMap CoreDNS dalam namespace kube-system. Jika plugin lain muncul dalam log kesalahan, hapus plugin tersebut dari ConfigMap.

pkg/mod/k8s.io/client-go@v0.18.3/tools/cache/reflector.go:125: Gagal mengamati *v1.Pod: Get "https://192.168.0.1:443/api/v1/": dial tcp 192.168.0.1:443: connect: koneksi ditolak

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.

[ERROR] plugin/errors: 2 www.aliyun.com. A: read udp 172.20.6.53:58814->100.100.2.136:53: i/o timeout

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 -H pada instance dan periksa log yang dihasilkan selama periode waktu ketika resolusi gagal. Log tersebut mencakup kata kunci conntrack 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:

  1. Jalankan perintah kubectl -n kube-system edit configmap coredns untuk memodifikasi ConfigMap CoreDNS.

  2. Hapus autopath @kubernetes, lalu simpan perubahan dan keluar.

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

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.