All Products
Search
Document Center

Container Service for Kubernetes:Kebijakan resolusi dan caching DNS

Last Updated:Jun 18, 2026

Kueri DNS di ACK mengalir melalui CoreDNS dan NodeLocal DNSCache, dengan parameter yang dapat disesuaikan di setiap lapisan.

Arsitektur resolusi DNS

Resolusi DNS di ACK bergantung pada lokasi aplikasi berjalan dan apakah NodeLocal DNSCache diaktifkan.

Parameter timeout dan attempts dalam diagram didefinisikan di bagian Kebijakan resolusi dan Kebijakan caching.

Aplikasi berbasis host (non-containerized)

Aplikasi yang berjalan langsung pada instans Elastic Compute Service (ECS) menggunakan /etc/resolv.conf host, yang mengarah ke server DNS Virtual Private Cloud (VPC).

DNS resolution flow 1

Pod containerized standar (dnsPolicy: ClusterFirst)

Secara default, pod menggunakan kebijakan ClusterFirst. Semua kueri DNS dialihkan ke layanan CoreDNS dalam kluster.

DNS resolution flow 2

Pod dengan NodeLocal DNSCache diaktifkan

Saat NodeLocal DNSCache diaktifkan, pod mengirim kueri ke agen caching lokal pada node yang sama. Ini memberikan dua manfaat:

  • Latensi berkurang: Kueri DNS diselesaikan secara lokal, melewati hop jaringan ke CoreDNS.

  • Perlindungan tabel conntrack: Kueri menggunakan agen lokal tanpa membuat entri conntrack, sehingga mengurangi race condition conntrack dan mencegah UDP DNS menghabiskan tabel conntrack.

DNS resolution flow 3

Kebijakan resolusi

Sisi klien

Parameter /etc/resolv.conf ini diinterpretasikan oleh resolver glibc. Berikut adalah konfigurasi representatif untuk pod dengan ClusterFirst:

nameserver 10.x.x.x          # CoreDNS ClusterIP
search default.svc.cluster.local svc.cluster.local cluster.local
options ndots:5 timeout:5 attempts:2

Nilai default di berbagai lingkungan penerapan:

Parameter

Deskripsi

Nilai default di glibc

ECS

Pod dengan DNSPolicy diatur ke ClusterFirst

Pod dengan DNSPolicy diatur ke Default

Pod yang menggunakan NodeLocal DNSCache

Pod dengan DNSPolicy diatur ke Default dan menggunakan jaringan host

nameserver

Server DNS yang digunakan untuk menyelesaikan nama domain.

Tidak ada

Server DNS VPC

CoreDNS ClusterIP

Server DNS VPC

  • IP NodeLocal DNSCache

  • CoreDNS ClusterIP

Server DNS VPC

search

Nama domain non-FQDN ditambahkan dengan akhiran search untuk membentuk FQDN sebelum resolusi.

Tidak ada

Tidak ada

<ns>.svc.cluster.local svc.cluster.local cluster.local

Tidak ada

<ns>.svc.cluster.local svc.cluster.local cluster.local

Tidak ada

ndots:n

Jika nama domain berisi lebih banyak titik daripada nilai ndots, nama tersebut diselesaikan langsung sebagai FQDN. Jika tidak, akhiran search ditambahkan sebelum kueri.

1

1

5

1

3

1

timeout:n

Timeout untuk satu permintaan resolusi DNS. Satuan: detik.

5

2

5

5

1

2

attempts:n

Jumlah maksimum percobaan ulang saat resolusi gagal.

2

3

2

2

2

3

rotate

Menanyakan server DNS secara round-robin.

Nonaktif

Aktif

Nonaktif

Nonaktif

Nonaktif

Aktif

single-request-reopen

Jika diaktifkan, resolver membuka ulang socket antara permintaan berturut-turut pada socket yang sama.

Nonaktif

Aktif

Nonaktif

Nonaktif

Nonaktif

Aktif

^①^ Parameter attempts hanya berlaku ketika server mengembalikan SERVFAIL, NOTIMP, atau REFUSED, atau mengembalikan NOERROR tanpa hasil. Lihat Detail permintaan parameter attempts.

^②^ Server DNS VPC (100.100.2.136 dan 100.100.2.138) adalah server DNS default pada instans ECS. Server ini menyelesaikan nama domain PrivateZone dan nama domain otoritatif.

^③^ CoreDNS ClusterIP adalah IP layanan kube-dns di namespace kube-system. Layanan ini menyelesaikan nama layanan internal serta meneruskan kueri PrivateZone dan kueri otoritatif.

^④^ NodeLocal DNSCache mendengarkan pada 169.254.20.10 di setiap node saat add-on diterapkan.

Lihat resolv.conf untuk opsi tambahan /etc/resolv.conf.

Resolver non-standar

Nilai default glibc di atas hanya berlaku jika kontainer menggunakan glibc. Dua pengecualian umum:

  • Alpine (musl libc): Pustaka bawaan musl Alpine menggantikan glibc dan berperilaku berbeda (lihat musl libc):

    • Tidak menghormati opsi single-request dan single-request-reopen dalam /etc/resolv.conf.

    • Alpine 3.3 dan versi sebelumnya tidak mendukung parameter search atau domain pencarian, yang menyebabkan penemuan layanan gagal.

    • Permintaan konkuren ke beberapa server DNS membuat optimasi NodeLocal DNSCache tidak efektif.

    • Permintaan A dan AAAA konkuren pada socket yang sama memicu kondisi race conntrack pada kernel lama, menyebabkan kehilangan paket intermiten.

  • Bahasa dengan resolver bawaan (Go, Node.js): Waktu proses ini sering melewati /etc/resolv.conf dan melakukan resolusi berbeda dari resolver sistem.

Server DNS dalam kluster

Secara default, CoreDNS membaca upstream-nya dari /etc/resolv.conf ECS dan meneruskan permintaan DNS dengan plugin bawaan forward. NodeLocal DNSCache menjalankan instans CoreDNS tersemat dengan konfigurasi penerusan yang sama.

Parameter untuk plugin forward (referensi lengkap):

Parameter

Deskripsi

Nilai default CoreDNS

Nilai default NodeLocal DNSCache

prefer_udp

Menggunakan UDP untuk berkomunikasi dengan server upstream jika memungkinkan.

Aktif

Nonaktif

force_tcp

Memaksa TCP untuk semua komunikasi upstream.

Nonaktif

Aktif

max_fails

Jumlah kegagalan pemeriksaan kesehatan berturut-turut sebelum server upstream ditandai tidak sehat.

2

2

expire

Durasi koneksi ke server upstream tetap terbuka.

10s

10s

policy

Kebijakan pemilihan server upstream.

random

random

health_check

Interval pemeriksaan kesehatan.

0.5s

0.5s

max_concurrent

Jumlah maksimum koneksi upstream konkuren.

Tidak ada

Tidak ada

dial timeout

Timeout untuk menghubungkan ke server upstream. Menurun secara dinamis berdasarkan waktu koneksi aktual.

30s

30s

read timeout

Timeout untuk menerima data dari server upstream.

2s

2s

Kebijakan caching

Sisi klien

Caching sisi klien bervariasi tergantung gambar kontainer dan aplikasi.

Server DNS dalam kluster

Parameter cache untuk CoreDNS dan NodeLocal DNSCache di ACK:

Parameter

Deskripsi

Nilai default komunitas CoreDNS

Default NodeLocal DNSCache ACK

CoreDNS ACK default

success Max TTL

Waktu hidup maksimum (TTL) untuk hasil sukses yang di-cache.

3600s

30s

30s

success Min TTL

TTL minimum untuk hasil sukses yang di-cache.

5s

5s

5s

success Capacity

Jumlah hasil sukses yang di-cache.

9984

9984

9984

denial Max TTL

TTL maksimum untuk hasil gagal yang di-cache.

1800s

5s

30s

denial Min TTL

TTL minimum untuk hasil gagal yang di-cache.

5s

5s

5s

denial Capacity

Jumlah hasil gagal yang di-cache.

9984

9984

9984

ServerError TTL

TTL saat server upstream tidak tersedia.

5s

0s (default adalah 5s untuk Helm Chart NodeLocal DNSCache versi sebelum 1.5.0)

0s (default adalah 5s untuk versi CoreDNS sebelum 1.8.4.2)

serve_stale

Memungkinkan CoreDNS menyajikan entri cache kedaluwarsa saat upstream tidak dapat dijangkau.

Nonaktif

Aktif (nonaktif secara default untuk Helm Chart NodeLocal DNSCache versi sebelum 1.5.0)

Aktif (nonaktif secara default untuk versi CoreDNS sebelum 1.12.1)

Catatan

TTL efektif ditentukan oleh TTL hasil, Max TTL, dan Min TTL:

  • Jika TTL Hasil > Max TTL, TTL efektif adalah Max TTL.

  • Jika TTL Hasil < Min TTL, TTL efektif adalah Min TTL.

  • Jika Min TTL ≤ TTL Hasil ≤ Max TTL, TTL efektif adalah TTL Hasil.

Saran optimasi

Sesuaikan perilaku DNS dengan mengedit YAML pod, ConfigMap CoreDNS, atau ConfigMap NodeLocal DNSCache.

Tingkatkan toleransi kesalahan

Dengan dnsPolicy: Default, kontainer mewarisi pengaturan server DNS VPC dari /etc/resolv.conf ECS tetapi tidak mewarisi opsi rotate, single-request-reopen, timeout:2, dan attempts:3. Tanpa opsi ini, fluktuasi jaringan dapat menyebabkan kegagalan DNS intermiten.

Konfigurasi yang diwarisi:

apiVersion: v1
kind: Pod
metadata:
  name: example
  namespace: default
spec:
  containers:
  - image: registry.cn-hangzhou.aliyuncs.com/example-ns/example:v1
    name: example
  # Nilai dnsPolicy dalam YAML Pod adalah Default.
  dnsPolicy: Default

# File /etc/resolv.conf dalam kontainer saat ini.
# cat /etc/resolv.conf
nameserver 100.100.2.136
nameserver 100.100.2.138

Tambahkan dnsConfig untuk memulihkan opsi toleransi kesalahan yang hilang:

apiVersion: v1
kind: Pod
metadata:
  name: example
  namespace: default
spec:
  containers:
  - image: registry.cn-hangzhou.aliyuncs.com/example-ns/example:v1
    name: example
  # Nilai dnsPolicy dalam YAML pod adalah Default.
  dnsPolicy: Default
  # Tambahkan konfigurasi toleransi kesalahan berikut.
  dnsConfig:
    options:
    - name: timeout
      value: "2"
    - name: attempts
      value: "3"
    - name: rotate
    - name: single-request-reopen

# Setelah modifikasi, redeploy pod. Parameter options ditambahkan ke /etc/resolv.conf dalam kontainer.
# cat /etc/resolv.conf
nameserver 100.100.2.136
nameserver 100.100.2.138
options rotate single-request-reopen timeout:2 attempts:3

Ketersediaan tinggi dengan serve_stale

serve_stale memungkinkan CoreDNS mengembalikan entri cache kedaluwarsa saat server DNS upstream tidak dapat dijangkau, sehingga mencegah kegagalan resolusi akibat gangguan sementara.

serve_stale diaktifkan secara default di edisi unmanaged CoreDNS v1.12.1 dan versi selanjutnya. Lihat RFC-8767.

Format konfigurasi

serve_stale [DURATION] [REFRESH_MODE]
  • DURATION: Durasi entri kedaluwarsa tetap dapat disajikan setelah kedaluwarsa. Default: 1h. Entri yang kedaluwarsa lebih lama dari ini tanpa refresh sukses tidak lagi disajikan.

  • REFRESH_MODE: Mengontrol cara CoreDNS menangani entri kedaluwarsa:

    • verify: Memeriksa keterjangkauan upstream terlebih dahulu, mengembalikan entri segar jika tersedia, atau fallback ke entri kedaluwarsa. Latensi lebih tinggi pada respons kedaluwarsa tetapi menghindari penyajian data usang saat data segar tersedia.

    • immediate: Mengembalikan entri kedaluwarsa segera dan merefresh dari upstream di latar belakang. Lebih cepat tetapi mungkin menyajikan data usang.

Contoh

Konfigurasi default di edisi unmanaged CoreDNS v1.12.1.2 dan versi selanjutnya:

cache 30 {
  ...
  serve_stale 30s verify
}
Penting

Konfigurasi default untuk edisi unmanaged CoreDNS v1.12.1.1-4035d7a99-aliyun:

cache 30 {
  ...
  serve_stale 1h immediate
}

Dengan serve_stale 1h immediate, dalam skenario ekstrem — seperti resolusi DNS selama pembaruan layanan headless iteratif — CoreDNS mungkin mengembalikan entri kedaluwarsa. Jika hal ini sering terjadi, alihkan ke verify.