All Products
Search
Document Center

Container Service for Kubernetes:Troubleshoot kesalahan resolusi DNS

Last Updated:Mar 26, 2026

Kegagalan resolusi DNS di Kubernetes sulit didiagnosis karena pipeline resolusi mencakup beberapa komponen—CoreDNS, kube-proxy, Container Network Interface (CNI), dan server DNS upstream. Panduan ini memandu Anda melalui proses terstruktur untuk mengisolasi akar penyebab dan menerapkan perbaikan yang tepat.

Sebelum memulai diagnostik, tinjau Praktik terbaik untuk layanan DNS guna mengurangi risiko kegagalan DNS berulang.

Konsep utama

TermDefinisi
Nama domain internalDiresolusi oleh CoreDNS dari cache lokalnya. Selalu diakhiri dengan .cluster.local.
Nama domain eksternalDiresolusi oleh server DNS upstream (Alibaba Cloud DNS, Alibaba Cloud DNS PrivateZone, atau penyedia pihak ketiga). CoreDNS hanya meneruskan kueri ini.
Pod aplikasiPod apa pun yang bukan merupakan pod komponen sistem di kluster Kubernetes.
NodeLocal DNSCacheCache DNS lokal yang mencegat kueri DNS pod sebelum mencapai CoreDNS. Kueri yang tidak dapat diresolusi oleh NodeLocal DNSCache diteruskan ke Service kube-dns.

Identifikasi kesalahan

Pesan kesalahan umum

Cocokkan pesan kesalahan Anda untuk mengidentifikasi kategori kegagalan:

KlienPesan kesalahanKategori kegagalan
pingping: xxx.yyy.zzz: Name or service not knownDomain tidak ditemukan, atau server DNS tidak dapat dijangkau (latensi > 5 detik mengindikasikan tidak dapat dijangkau)
curlcurl: (6) Could not resolve host: xxx.yyy.zzzDomain tidak ditemukan, atau server DNS tidak dapat dijangkau
Klien HTTP PHPphp_network_getaddresses: getaddrinfo failed: Name or service not known in xxx.php on line yyyDomain tidak ditemukan, atau server DNS tidak dapat dijangkau
Klien HTTP Godial tcp: lookup xxx.yyy.zzz on 100.100.2.136:53: no such hostDomain tidak ada
dig;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: xxxxxDomain tidak ada
Klien HTTP Godial 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 timeoutServer DNS tidak dapat dijangkau
dig;; connection timed out; no servers could be reachedServer DNS tidak dapat dijangkau

Siapkan pod debug

Sebelum menjalankan perintah diagnostik apa pun, siapkan lingkungan pengamatan yang bersih guna menghilangkan ambiguitas antara bug aplikasi dan bug DNS.

kubectl run -it --rm debug --image=nicolaka/netshoot -- dig

Anda juga dapat menjalankan perintah berikut:

nslookup <Nama domain>

Prosedur diagnostik

Diagram berikut menunjukkan alur troubleshooting keseluruhan untuk kegagalan CoreDNS dan NodeLocal DNSCache.

Troubleshooting flow

Langkah 1: Periksa konfigurasi DNS pod aplikasi

# Dapatkan YAML pod untuk memeriksa field dnsPolicy-nya
kubectl get pod <pod-name> -o yaml

# Jika dnsPolicy tampak benar, periksa konfigurasi DNS dalam kontainer
kubectl exec -it <pod-name> -- cat /etc/resolv.conf

Periksa apakah nameserver mengarah ke CoreDNS atau NodeLocal DNSCache:

Referensi kebijakan DNS

Tabel berikut menjelaskan nilai dnsPolicy yang tersedia dan kapan masing-masing harus digunakan:

dnsPolicyPerilaku
ClusterFirst (default)Menggunakan IP Service kube-dns sebagai server DNS. Untuk pod jaringan-host, berperilaku sama seperti Default.
DefaultMenggunakan server DNS dari /etc/resolv.conf instans ECS. Gunakan ini hanya jika pod tidak memerlukan penemuan layanan internal kluster.
ClusterFirstWithHostNetSama seperti ClusterFirst tetapi untuk pod jaringan-host.
NoneMemungkinkan Anda menentukan server DNS dan opsi kustom di dnsConfig. Digunakan saat NodeLocal DNSCache menyuntikkan konfigurasinya secara otomatis.

Pod yang dikonfigurasi untuk NodeLocal DNSCache biasanya tampak seperti ini:

apiVersion: v1
kind: Pod
metadata:
  name: <pod-name>
  namespace: <pod-namespace>
spec:
  containers:
  - image: <container-image>
    name: <container-name>
  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

Langkah 2: Periksa status pod CoreDNS

kubectl -n kube-system get pod -o wide -l k8s-app=kube-dns

Output yang diharapkan (semua pod dalam status Running):

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

Periksa penggunaan resource:

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 tidak dalam status Running, deskripsikan pod tersebut untuk menemukan penyebabnya:

kubectl -n kube-system describe pod <coredns-pod-name>

Lihat Pod CoreDNS tidak berjalan sesuai harapan untuk log kesalahan umum dan solusinya.

Langkah 3: Periksa log operasional CoreDNS

kubectl -n kube-system logs -f --tail=500 --timestamps <coredns-pod-name>
FlagEfek
-fMenampilkan output log secara langsung
--tail=500Menampilkan 500 baris terakhir
--timestampsMenambahkan timestamp pada setiap baris log

Cari respons NXDOMAIN, SERVFAIL, atau REFUSED dalam log. Jika salah satu respons ini muncul untuk nama domain eksternal, berarti server DNS upstream mengembalikan kesalahan. Lihat Nama domain eksternal tidak dapat diresolusi.

Langkah 4: Periksa apakah masalah dapat direproduksi

Diagnosis log kueri DNS

CoreDNS menghasilkan entri log kueri untuk setiap permintaan DNS hanya jika plugin log diaktifkan. Untuk mengaktifkannya, lihat Konfigurasi CoreDNS.

Jalankan perintah yang sama seperti yang digunakan untuk mengkueri log operasional guna melihat log kueri DNS. Untuk informasi lebih lanjut, lihat Langkah 3: Periksa log operasional CoreDNS.

Setelah disimpan, CoreDNS secara otomatis memuat ulang. Konfirmasi dengan memeriksa log untuk kata kunci reload.

Format log kueri DNS

[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

Kode respons DNS

Untuk spesifikasi lengkap, lihat RFC 1035.

Kode responsMaknaPenyebab umum
NOERRORBerhasil diresolusi
NXDOMAINDomain tidak ada di server DNS upstreamPod menambahkan sufiks domain pencarian; nama yang ditambahkan sufiks tetapi tidak ada akan memicu kode ini
SERVFAILTerjadi kesalahan di server DNS upstreamServer DNS upstream tidak dapat dijangkau atau salah konfigurasi
REFUSEDKueri ditolak oleh server DNS upstreamServer DNS upstream (dalam konfigurasi CoreDNS atau /etc/resolv.conf node) tidak dapat meng-resolve domain tersebut

Jika log menunjukkan NXDOMAIN, SERVFAIL, atau REFUSED untuk nama domain eksternal, maka server DNS upstream adalah akar penyebabnya. Secara default, CoreDNS menggunakan server DNS VPC 100.100.2.136 dan 100.100.2.138 sebagai resolver upstream. Kirim tiket ke tim ECS dan sertakan:

FieldDeskripsiContoh
Nama domainNama domain eksternal dari logwww.aliyun.com
Kode respons DNSKode respons dalam logNXDOMAIN
WaktuTimestamp entri log (presisi detik)2022-12-22 20:00:03
ID instans ECSID instans ECS yang menjalankan pod CoreDNSi-xxxxx i-yyyyy

Diagnosis konektivitas jaringan pod CoreDNS

Gunakan Konsol ACK atau CLI.

Konsol ACK

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

  2. Di halaman Clusters, klik nama kluster. Di panel navigasi sebelah kiri, pilih Inspections and Diagnostics > Diagnostics.

  3. Di halaman Diagnosis, klik Network diagnosis.

  4. Di panel Network, konfigurasikan parameter berikut: Baca peringatan, pilih I know and agree, lalu klik Create diagnosis.

    • Source address: Alamat IP pod CoreDNS

    • Destination address: Alamat IP server DNS upstream (100.100.2.136 atau 100.100.2.138)

    • Destination port: 53

    • Protocol: udp

  5. Di halaman Diagnosis result, bagian Packet paths menunjukkan semua node yang didiagnosis.

    Diagnosis result

CLI

  1. Masuk ke node yang menjalankan pod CoreDNS.

  2. Dapatkan ID proses CoreDNS:

    ps aux | grep coredns
  3. Masuk ke namespace jaringan CoreDNS:

    nsenter -t <pid> -n -- <related commands>

    Ganti <pid> dengan ID proses dari langkah sebelumnya.

  4. Uji konektivitas:

    # Uji konektivitas ke server API Kubernetes
    telnet <apiserver_clusterip> 6443
    
    # Uji konektivitas ke server DNS upstream
    dig <domain> @100.100.2.136
    dig <domain> @100.100.2.138
MasalahPenyebabTindakan
CoreDNS tidak dapat terhubung ke server API KubernetesKesalahan server API, kelebihan beban node, atau masalah kube-proxyKirim tiket
CoreDNS tidak dapat terhubung ke server DNS upstreamKelebihan beban node, konfigurasi CoreDNS salah, atau masalah routing Express ConnectKirim tiket

Diagnosis konektivitas jaringan antara pod aplikasi dan CoreDNS

Konsol ACK

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

  2. Di halaman Clusters, klik nama kluster. Di panel navigasi sebelah kiri, pilih Inspections and Diagnostics > Diagnostics.

  3. Di halaman Diagnosis, klik Network diagnosis.

  4. Di panel Network, konfigurasikan parameter berikut: Baca peringatan, pilih I know and agree, lalu klik Create diagnosis.

    • Source address: Alamat IP pod aplikasi

    • Destination address: Alamat IP pod CoreDNS atau kluster

    • Destination port: 53

    • Protocol: udp

  5. Di halaman Diagnosis result, bagian Packet paths menunjukkan semua node yang didiagnosis.

    Diagnosis result

CLI

Hubungkan ke namespace jaringan pod aplikasi menggunakan salah satu metode berikut:

  • Metode 1kubectl exec:

    kubectl exec -it <pod-name> -- bash
  • Metode 2nsenter (ketika kubectl exec tidak tersedia):

    ps aux | grep <application-process-name>
    nsenter -t <pid> -n bash
  • Metode 3 — untuk pod yang sering restart:

    Jangan tambahkan spasi antara -n dan <netns-path>.
    docker ps -a | grep <application-container-name>
    docker inspect <sandboxed-container-id> | grep netns
    nsenter -n<netns-path> -n bash

Dari dalam namespace jaringan pod, uji konektivitas:

# Uji konektivitas ke Service kube-dns
dig <domain> @<kube_dns_svc_ip>

# Uji jangkauan ICMP ke pod CoreDNS
ping <coredns_pod_ip>

# Uji resolusi DNS langsung melalui pod CoreDNS
dig <domain> @<coredns_pod_ip>
MasalahPenyebabTindakan
Tidak dapat terhubung ke Service kube-dnsKelebihan beban node, masalah kube-proxy, atau port UDP 53 diblokirPeriksa apakah aturan security group mengizinkan port UDP 53. Jika ya, kirim tiket.
Tidak dapat ping pod CoreDNSKesalahan jaringan kontainer atau ICMP diblokir oleh aturan security groupPeriksa apakah ICMP diizinkan. Jika ya, kirim tiket.
dig ke pod CoreDNS gagalKelebihan beban node atau port UDP 53 diblokir oleh aturan security groupPeriksa apakah aturan security group mengizinkan port UDP 53. Jika ya, kirim tiket.

Tangkap paket

Jika Anda tidak dapat mengidentifikasi masalah melalui log dan pengujian konektivitas, tangkap paket untuk mempersempit lokasi paket yang di-drop.

  1. Masuk ke node yang menjalankan pod aplikasi dan pod CoreDNS.

  2. Tangkap paket pada setiap instans ECS:

    Pengambilan paket tidak mengganggu layanan. Ini menyebabkan sedikit peningkatan penggunaan CPU dan I/O disk. Perintah ini melakukan rotasi file dan menghasilkan maksimal 200 file .pcap, masing-masing hingga 20 MB.
    tcpdump -i any port 53 -C 20 -W 200 -w /tmp/client_dns.pcap
  3. Analisis paket yang ditangkap dari periode waktu saat kesalahan terjadi.

Modul lain dalam pipeline resolusi DNS

Selain CoreDNS dan NodeLocal DNSCache, komponen berikut juga dapat menyebabkan kegagalan resolusi DNS.

DNS resolution pipeline
KomponenCara menyebabkan kegagalan
Resolver DNS (Go, glibc, musl)Bug implementasi DNS tingkat bahasa atau library dapat menyebabkan kegagalan dalam kasus langka
/etc/resolv.confIP server DNS atau domain pencarian yang salah konfigurasi dalam kontainer
kube-proxySetelah pembaruan CoreDNS, jika aturan kube-proxy tidak diperbarui, CoreDNS menjadi tidak dapat dijangkau
Server DNS upstreamCoreDNS meneruskan kueri domain eksternal ke server upstream (seperti VPC Private DNS). Salah konfigurasi pada server upstream menyebabkan kueri yang diteruskan gagal.

FAQ

Apa yang harus dilakukan jika nama domain eksternal tidak dapat diresolusi

Nama domain internal diresolusi dengan benar, tetapi nama domain eksternal gagal.

Periksa log kueri CoreDNS untuk NXDOMAIN, SERVFAIL, atau REFUSED pada nama domain yang gagal. Kode-kode ini menunjukkan bahwa server DNS upstream (secara default, 100.100.2.136 dan 100.100.2.138) mengembalikan kesalahan. Kirim tiket ke tim ECS dengan nama domain, kode respons, timestamp, dan ID instans ECS dari node yang menjalankan CoreDNS.

Apa yang harus dilakukan jika nama domain Service headless tidak dapat diresolusi

CoreDNS tidak dapat meng-resolve nama domain Service headless.

Hal ini biasanya terjadi pada versi CoreDNS sebelum 1.7.0, yang dapat keluar secara tak terduga selama fluktuasi jaringan server API Kubernetes, sehingga menyebabkan rekaman DNS Service headless menjadi usang. Perbarui CoreDNS ke versi 1.7.0 atau lebih baru. Lihat [Pembaruan Komponen] Perbarui CoreDNS.

Jika dig menunjukkan flag tc dalam respons, berarti Service headless memiliki terlalu banyak alamat IP pendukung sehingga respons DNS melebihi batas ukuran paket UDP. Konfigurasikan klien untuk mengirim kueri DNS melalui TCP:

  • Untuk resolver berbasis glibc, tambahkan use-vc ke dnsConfig:

    dnsConfig:
      options:
      - name: use-vc

    Ini dipetakan ke direktif options dalam /etc/resolv.conf. Untuk detailnya, lihat halaman manual Linux untuk resolv.conf.

  • Untuk aplikasi Go, konfigurasikan resolver untuk menggunakan TCP:

    package main
    
    import (
      "fmt"
      "net"
      "context"
    )
    
    func main() {
      resolver := &net.Resolver{
        PreferGo: true,
        Dial: func(ctx context.Context, network, address string) (net.Conn, error) {
          return net.Dial("tcp", address)
        },
      }
    
      addrs, err := resolver.LookupHost(context.TODO(), "example.com")
      if err != nil {
        fmt.Println("Error:", err)
        return
      }
      fmt.Println("Addresses:", addrs)
    }

Apa yang harus dilakukan jika nama domain Service headless tidak dapat diresolusi setelah memperbarui CoreDNS

Setelah upgrade ke Kubernetes 1.20 atau lebih baru dengan CoreDNS 1.8.4 atau lebih baru, komponen open-source seperti etcd, Nacos, dan Kafka gagal menemukan layanan.

CoreDNS 1.8.4 beralih ke API EndpointSlice. Beberapa komponen open-source bergantung pada anotasi service.alpha.kubernetes.io/tolerate-unready-endpoints dari API Endpoint lama untuk memublikasikan Service yang belum siap selama inisialisasi. Anotasi ini tidak didukung di EndpointSlice—telah digantikan oleh publishNotReadyAddresses.

Periksa apakah YAML atau chart Helm untuk komponen yang terpengaruh menggunakan service.alpha.kubernetes.io/tolerate-unready-endpoints. Jika iya, perbarui komponen tersebut atau konsultasikan dengan komunitas komponen tersebut.

Apa yang harus dilakukan jika nama domain pod StatefulSet tidak dapat diresolusi

Nama domain pod StatefulSet (misalnya, pod.headless-svc.ns.svc.cluster.local) tidak dapat diresolusi, tetapi nama domain Service headless-nya sendiri diresolusi dengan benar.

Templat YAML pod StatefulSet memiliki nilai serviceName yang salah atau kosong. Atur serviceName dalam spesifikasi StatefulSet ke nama persis dari Service headless yang mengekspos StatefulSet tersebut.

Apa yang harus dilakukan jika aturan security group memblokir kueri DNS

Resolusi DNS gagal pada sebagian atau semua node, secara persisten.

Aturan security group atau daftar kontrol akses jaringan (ACL) pada instans ECS memblokir port UDP 53. Ubah aturan security group atau ACL jaringan agar mengizinkan port UDP 53.

Apa yang harus dilakukan jika terjadi kesalahan konektivitas jaringan kontainer

Resolusi DNS gagal pada sebagian atau semua node, secara persisten.

Kesalahan konektivitas jaringan kontainer atau masalah lain memblokir port UDP 53. Gunakan fitur diagnostik jaringan untuk mendiagnosis konektivitas jaringan antara pod aplikasi dan pod CoreDNS. Jika masalah berlanjut, kirim tiket.

Apa yang harus dilakukan jika pod CoreDNS kelebihan beban

Latensi resolusi DNS tinggi, atau kegagalan terjadi secara persisten atau intermiten. Penggunaan CPU atau memori pod CoreDNS mendekati batas atas.

Jumlah replika CoreDNS terlalu rendah untuk menangani volume kueri DNS. Lakukan satu atau kedua langkah berikut:

  • Aktifkan NodeLocal DNSCache untuk mengurangi beban pada CoreDNS. Lihat Konfigurasi NodeLocal DNSCache.

  • Skalakan pod CoreDNS sehingga pemanfaatan CPU puncak per pod tetap di bawah ruang CPU yang tersedia di node.

Apa yang harus dilakukan jika beban kueri DNS tidak seimbang

Latensi resolusi DNS tinggi atau kegagalan intermiten terjadi pada sebagian (bukan semua) node. Pemanfaatan CPU pod CoreDNS berbeda signifikan antar pod. Terdapat kurang dari dua replika CoreDNS yang berjalan, atau beberapa pod dijadwalkan pada node yang sama.

Kueri DNS didistribusikan secara tidak merata karena penjadwalan pod yang tidak seimbang atau pengaturan SessionAffinity pada Service kube-dns. Untuk memperbaikinya:

Apa yang harus dilakukan jika pod CoreDNS tidak berjalan sesuai harapan

Latensi resolusi DNS tinggi, kegagalan terjadi pada beberapa node, pod CoreDNS tidak dalam status Running, jumlah restart terus meningkat, atau log CoreDNS menunjukkan kesalahan.

YAML yang salah konfigurasi atau ConfigMap CoreDNS yang salah mencegah pod berjalan. Periksa status dan log pod.

Pesan kesalahan umum:

KesalahanPenyebabPerbaikan
/etc/coredns/Corefile:4 - Error during parsing: Unknown directive 'ready'Plugin ready dalam Corefile tidak didukung oleh versi CoreDNS saat iniHapus ready (atau plugin yang tidak didukung) dari ConfigMap CoreDNS di kube-system
Failed to watch *v1.Pod: Get "https://192.168.0.1:443/api/v1/": dial tcp 192.168.0.1:443: connect: connection refusedKoneksi server API terputus saat log dicatatJika resolusi DNS tidak terpengaruh selama periode ini, ini bukan akar penyebabnya. Jika terpengaruh, diagnosa konektivitas jaringan CoreDNS.
[ERROR] plugin/errors: 2 www.aliyun.com. A: read udp 172.20.6.53:58814->100.100.2.136:53: i/o timeoutServer DNS upstream tidak dapat dijangkau saat log dicatatPeriksa konektivitas jaringan CoreDNS ke server DNS upstream

Apa yang harus dilakukan jika DNS gagal karena klien kelebihan beban

Kesalahan DNS terjadi secara intermiten atau selama jam sibuk. Pemantauan instans ECS menunjukkan laju pengiriman ulang NIC yang tidak normal atau pemanfaatan CPU tinggi.

Instans ECS yang menjalankan pod pengirim kueri DNS sepenuhnya dimuat, menyebabkan kehilangan paket UDP. Kirim tiket. Secara paralel, aktifkan NodeLocal DNSCache untuk mengurangi beban DNS per node. Lihat Konfigurasi NodeLocal DNSCache.

Apa yang harus dilakukan jika tabel conntrack penuh

Resolusi DNS gagal secara sering pada sebagian atau semua node selama jam sibuk tetapi berfungsi selama jam sepi. Menjalankan dmesg -H pada instans menunjukkan conntrack full dalam log selama periode kegagalan.

Tabel conntrack kernel Linux penuh, sehingga paket UDP dan TCP tidak dapat diproses. Tingkatkan jumlah maksimum entri dalam tabel conntrack. Lihat Bagaimana cara meningkatkan jumlah maksimum koneksi yang dilacak dalam tabel conntrack kernel Linux?

Apa yang harus dilakukan jika plugin autopath tidak berfungsi sebagaimana mestinya

Nama domain eksternal kadang-kadang gagal diresolusi atau diresolusi ke alamat IP yang salah, sedangkan nama domain internal diresolusi dengan benar. Saat kluster membuat kontainer dengan laju tinggi, nama domain internal kadang-kadang diresolusi ke alamat IP yang salah.

Plugin autopath di CoreDNS memiliki cacat yang diketahui. Nonaktifkan plugin tersebut:

  1. Edit ConfigMap CoreDNS:

    kubectl -n kube-system edit configmap coredns
  2. Hapus baris autopath @kubernetes, simpan file, dan keluar.

  3. Verifikasi bahwa CoreDNS memuat konfigurasi baru dengan memeriksa log untuk kata kunci reload.

Apa yang harus dilakukan jika DNS gagal karena kueri rekaman A dan AAAA konkuren

Resolusi DNS CoreDNS gagal secara intermiten. Tangkapan paket atau log kueri DNS menunjukkan kueri rekaman A dan AAAA dikirim secara simultan melalui port sumber yang sama.

Kueri rekaman A dan AAAA konkuren menyebabkan kesalahan tabel conntrack, yang mengakibatkan kehilangan paket UDP. Pada mesin ARM, versi libc sebelum 2.33 memiliki masalah ini (lihat GLIBC#26600).

Terapkan satu atau beberapa perbaikan berikut berdasarkan lingkungan Anda:

  • NodeLocal DNSCache: mengurangi dampak kehilangan paket. Lihat Konfigurasi NodeLocal DNSCache.

  • CentOS atau Ubuntu dengan libc: perbarui libc ke versi 2.33 atau lebih baru, atau tambahkan opsi resolver: options timeout:2 attempts:3 rotate single-request-reopen.

  • cURL PHP: tambahkan CURL_IPRESOLVE_V4 untuk menentukan bahwa nama domain hanya dapat diresolusi ke alamat IPv4. Lihat curl_setopt.

  • Alpine Linux: ganti dengan image dasar non-Alpine. Lihat Catatan Alpine Linux.

Apa yang harus dilakukan jika DNS gagal karena kesalahan IPVS

Resolusi DNS gagal secara intermiten saat node ditambahkan atau dihapus dari kluster, saat node dimatikan, atau saat CoreDNS diskalakan turun. Kegagalan biasanya berlangsung sekitar 5 menit.

kube-proxy berjalan dalam mode IPVS. Saat pod backend UDP dihapus dari node CentOS atau Alibaba Cloud Linux 2 dengan versi kernel sebelum 4.19.91-25.1.al7.x86_64, konflik port sumber menyebabkan paket UDP di-drop.

Untuk memperbaikinya:

Masalah NodeLocal DNSCache

Apa yang harus dilakukan jika NodeLocal DNSCache tidak berfungsi

Semua kueri DNS mencapai CoreDNS alih-alih NodeLocal DNSCache.

Salah satu dari dua hal berikut terjadi:

  • Injeksi DNSConfig tidak dikonfigurasi, sehingga pod masih menggunakan IP Service kube-dns.

  • Pod menggunakan image dasar Alpine Linux, yang mengirim kueri DNS secara konkuren ke semua nameserver yang dikonfigurasi (termasuk NodeLocal DNSCache dan CoreDNS).

Untuk memperbaiki penyebab pertama, konfigurasikan injeksi DNSConfig otomatis. Untuk memperbaiki yang kedua, ganti image berbasis Alpine dengan image non-Alpine. Lihat Konfigurasi NodeLocal DNSCache dan Catatan Alpine Linux.

Apa yang harus dilakukan jika nama domain Alibaba Cloud DNS PrivateZone tidak dapat diresolusi

Saat NodeLocal DNSCache digunakan, nama domain yang ditambahkan ke Alibaba Cloud DNS PrivateZone tidak dapat diresolusi, endpoint API layanan Alibaba Cloud yang mengandung vpc-proxy gagal diresolusi, atau nama domain diresolusi ke alamat IP yang salah.

Alibaba Cloud DNS PrivateZone tidak mendukung TCP. NodeLocal DNSCache harus meneruskan kueri ini melalui UDP. Tambahkan pengaturan prefer_udp ke konfigurasi CoreDNS. Lihat Konfigurasi CoreDNS.

Jika langkah-langkah di atas tidak menyelesaikan masalah, kirim tiket.

Langkah selanjutnya