All Products
Search
Document Center

Container Service for Kubernetes:Kebijakan resolusi dan caching DNS

Last Updated:Mar 26, 2026

Topik ini menjelaskan alur kerja resolusi DNS, perilaku sisi klien, dan kebijakan caching sisi server di kluster Alibaba Cloud Container Service for Kubernetes (ACK).

Arsitektur resolusi DNS

Perilaku resolusi DNS di ACK bergantung pada lokasi aplikasi berjalan dan apakah add-on NodeLocal DNSCache aktif.

Untuk detail tentang parameter seperti timeout dan attempts yang dirujuk dalam diagram, lihat Kebijakan resolusi dan Kebijakan caching.

Skenario 1: Aplikasi berbasis host (non-kontainer)

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

DNS解析链路1.png

Skenario 2: Pod kontainer standar (dnsPolicy: ClusterFirst)

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

DNS解析链路2.png

Skenario 3: Pod dengan NodeLocal DNSCache diaktifkan

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

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

  • Perlindungan tabel conntrack: Kueri dikirim ke agen lokal tanpa membuat entri baru pada tabel conntrack, sehingga mengurangi kondisi balapan conntrack dan mencegah entri DNS UDP menghabiskan kapasitas tabel conntrack.

DNS解析链路3.png

Kebijakan resolusi

Sisi klien

Parameter berikut berasal dari /etc/resolv.conf dan diinterpretasikan oleh resolver glibc. Berikut adalah konfigurasi representatif untuk pod standar yang menggunakan 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

Tabel berikut mencantumkan nilai default di semua 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

Untuk permintaan yang melibatkan nama domain yang bukan fully qualified domain name (FQDN), nama domain tersebut ditambahkan dengan sufiks search untuk membentuk FQDN sebelum permintaan dikirim.

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 jumlah titik dalam string nama domain lebih besar daripada nilai ndots, nama domain tersebut dianggap sebagai FQDN dan diselesaikan secara langsung. Jika tidak, nama domain tersebut ditambahkan dengan sufiks pencarian sebelum kueri dilakukan.

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 jika resolusi DNS 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 dan dua permintaan dikirim menggunakan socket yang sama, resolver menutup socket setelah permintaan pertama dan membuka socket baru sebelum permintaan kedua.

Nonaktif

Aktif

Nonaktif

Nonaktif

Nonaktif

Aktif

^①^ Parameter attempts hanya berlaku dalam skenario tertentu: ketika server mengembalikan SERVFAIL, NOTIMP, atau REFUSED, atau ketika server mengembalikan NOERROR tetapi tanpa hasil resolusi. Untuk detailnya, lihat Detail permintaan parameter Attempts.

^②^ Server DNS VPC adalah server DNS default yang dikonfigurasi pada instans ECS. Alamat IP-nya adalah 100.100.2.136 dan 100.100.2.138. Server ini menyelesaikan nama domain di PrivateZone dan nama domain otoritatif.

^③^ CoreDNS ClusterIP adalah alamat IP layanan kube-dns di namespace kube-system. Layanan ini menyelesaikan nama domain layanan internal dan meneruskan permintaan resolusi untuk PrivateZone dan nama domain otoritatif.

^④^ IP NodeLocal DNSCache adalah 169.254.20.10. Saat add-on NodeLocal DNSCache diterapkan, layanan ini mendengarkan pada alamat IP ini di setiap node.

Untuk opsi tambahan /etc/resolv.conf, lihat resolv.conf.

Resolver non-standar

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

  • Alpine (musl libc): Pustaka bawaan musl Alpine menggantikan glibc dan berperilaku berbeda dalam beberapa hal: Untuk detail perilaku resolusi musl, lihat musl libc.

    • Tidak mematuhi opsi single-request dan single-request-reopen di /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.

    • Menggunakan socket yang sama untuk meminta rekaman A dan AAAA secara konkuren memicu kondisi balapan conntrack pada versi kernel lama, menyebabkan kehilangan paket secara intermiten.

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

Server DNS dalam kluster

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

Tabel berikut mencantumkan parameter yang mengontrol kebijakan resolusi Plugin forward. Untuk referensi lengkap, lihat Forward.

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 pemeriksaan kesehatan gagal 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. Nilainya berkurang secara dinamis berdasarkan waktu koneksi aktual.

30s

30s

read timeout

Timeout untuk menunggu data dari server upstream.

2s

2s

Kebijakan caching

Sisi klien

Caching sisi klien bervariasi tergantung pada gambar kontainer dan aplikasi. Kebijakan efektif bergantung pada konfigurasi spesifik Anda.

Server DNS dalam kluster

Tabel berikut mencantumkan parameter cache untuk CoreDNS dan NodeLocal DNSCache di ACK.

Parameter

Deskripsi

Nilai default komunitas CoreDNS

NodeLocal DNSCache default ACK

CoreDNS ACK default

success Max TTL

Waktu hidup maksimum (TTL) untuk hasil resolusi DNS sukses yang dicache.

3600s

30s

30s

success Min TTL

TTL minimum untuk hasil resolusi DNS sukses yang dicache.

5s

5s

5s

success Capacity

Jumlah hasil resolusi DNS sukses yang dicache.

9984

9984

9984

denial Max TTL

TTL maksimum untuk hasil resolusi DNS gagal yang dicache.

1800s

5s

30s

denial Min TTL

TTL minimum untuk hasil resolusi DNS gagal yang dicache.

5s

5s

5s

denial Capacity

Jumlah hasil resolusi DNS gagal yang dicache.

9984

9984

9984

ServerError TTL

TTL yang diterapkan saat server DNS 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 yang telah kadaluarsa saat server DNS 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 resolusi, Max TTL, dan Min TTL sebagai berikut:

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

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

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

Saran optimasi

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

Tingkatkan toleransi kesalahan

Saat dnsPolicy: Default diatur pada pod, kontainer mewarisi pengaturan server DNS VPC dari /etc/resolv.conf instans ECS. Namun, kontainer tersebut tidak mewarisi opsi rotate, single-request-reopen, timeout:2, dan attempts:3. Tanpa opsi ini, fluktuasi jaringan dapat menyebabkan kegagalan resolusi DNS secara intermiten.

Berikut adalah konfigurasi yang diwariskan:

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

Fitur serve_stale memungkinkan CoreDNS mengembalikan entri cache yang telah kadaluarsa saat server DNS upstream tidak dapat dijangkau. Hal ini mencegah kegagalan resolusi akibat gangguan sementara pada upstream.

serve_stale diaktifkan secara default di edisi unmanaged CoreDNS v1.12.1 dan versi selanjutnya. Untuk spesifikasi RFC, lihat RFC-8767.

Format konfigurasi

serve_stale [DURATION] [REFRESH_MODE]
  • DURATION: Durasi entri yang telah kadaluarsa tetap memenuhi syarat untuk disajikan setelah masa berlakunya habis. Nilai default adalah 1h. Jika entri telah kadaluarsa lebih lama dari durasi ini tanpa refresh yang berhasil, CoreDNS berhenti menyajikannya.

  • REFRESH_MODE: Mengontrol cara CoreDNS menangani entri yang telah kadaluarsa:

    • verify: Pertama-tama memverifikasi bahwa layanan DNS upstream dapat dijangkau, lalu mengembalikan hasil ke klien — menggunakan entri segar jika upstream merespons, atau kembali ke entri yang telah kadaluarsa jika tidak. Hal ini meningkatkan latensi pada respons kadaluarsa tetapi mencegah penyajian entri usang saat entri segar tersedia.

    • immediate: Mengembalikan entri yang telah kadaluarsa ke klien segera, lalu memeriksa upstream di latar belakang. Hal ini memberikan respons lebih cepat tetapi mungkin menyajikan data usang jika upstream telah diperbarui.

Contoh

Konfigurasi berikut adalah 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 adalah:

cache 30 {
  ...
  serve_stale 1h immediate
}

Dengan serve_stale 1h immediate, dalam skenario ekstrem — seperti saat klien melakukan resolusi DNS selama pembaruan iteratif layanan headless — CoreDNS mungkin mengembalikan entri yang telah kadaluarsa. Jika hal ini terjadi secara sering, ubah kebijakan menjadi verify.