全部产品
Search
文档中心

Container Compute Service:Kebijakan resolusi DNS dan kebijakan caching

更新时间:Jun 28, 2025

Topik ini menjelaskan kebijakan resolusi Sistem Nama Domain (DNS) dan kebijakan caching yang didukung oleh klaster Container Compute Service (ACS) dari Alibaba Cloud.

Pipeline resolusi DNS

Berikut adalah pipeline resolusi DNS dalam beberapa skenario:

Catatan

Untuk informasi lebih lanjut tentang istilah dalam gambar berikut, seperti timeout dan attempts, lihat bagian "Kebijakan Resolusi" dan "Kebijakan Caching" dalam topik ini.

  • Aplikasi non-container berjalan pada Instance Elastic Compute Service (ECS).

    Sebagai contoh, aplikasi bernama App berjalan pada instance ECS, seperti ditunjukkan pada gambar berikut.

    DNS解析链路1.png

  • Aplikasi container berjalan di pod dalam klaster Kubernetes. Pod menggunakan kebijakan DNS ClusterFirst.

    Sebagai contoh, aplikasi bernama App berjalan di pod dalam klaster Kubernetes, seperti ditunjukkan pada gambar berikut.

    DNS解析链路2.png

Kebijakan resolusi

Client side

Dalam sebagian besar kasus, query DNS pod ditangani melalui antarmuka yang disediakan oleh glibc. Tabel berikut menggambarkan parameter yang dapat dikonfigurasi dalam file /etc/resolv.conf beserta nilai defaultnya dalam lingkungan yang berbeda. Parameter ini menentukan cara glibc melakukan resolusi DNS.

Parameter

Deskripsi

Nilai default di glibc

ECS

Nilai default untuk pod yang menggunakan kebijakan DNS ClusterFirst

Nilai default untuk pod yang menggunakan kebijakan DNS Default

Nilai default untuk pod yang menggunakan jaringan host dan kebijakan DNS Default

nameserver

Server DNS yang menyelesaikan nama domain.

Tidak ada

Server DNS yang ditempatkan di virtual private cloud (VPC)

Alamat IP klaster CoreDNS

Server DNS yang ditempatkan di VPC

Server DNS yang ditempatkan di VPC

search

Nama domain selain fully qualified domain names (FQDN) akan ditambahkan dengan akhiran yang ditentukan oleh parameter search sebelum nama domain diselesaikan.

Tidak ada

Tidak ada

<ns>.svc.cluster.localsvc.cluster.localcluster.local

Tidak ada

Tidak ada

ndots:n

Jika jumlah titik dalam string nama domain lebih besar dari nilai parameter ndots, nama domain tersebut adalah FQDN dan langsung diselesaikan. Jika jumlah titik dalam string nama domain kurang dari nilai parameter ndots, nama domain tersebut akan ditambahkan dengan akhiran yang ditentukan oleh parameter search sebelum nama domain diselesaikan.

1

1

5

1

1

timeout:n

Periode timeout setiap resolusi DNS. Unit: detik.

5

2

5

5

2

attempts:n

Jumlah maksimum percobaan ulang yang dapat dilakukan jika resolusi DNS gagal.

2

3

2

2

3

rotate

Mengirim query DNS ke server DNS secara bergantian.

Nonaktif

Aktif

Nonaktif

Nonaktif

Aktif

single-request-reopen

Setelah Anda menentukan parameter ini, jika dua permintaan DNS dikirim menggunakan socket yang sama, klien menutup socket setelah mengirim yang pertama dan membuka socket baru untuk mengirim yang kedua.

Nonaktif

Aktif

Nonaktif

Nonaktif

Aktif

Parameter attempts hanya berlaku dalam skenario tertentu, misalnya ketika SERVFAIL, NOTIMP, atau REFUSED dikembalikan, atau ketika NOERROR dikembalikan tanpa hasil resolusi. Untuk informasi lebih lanjut, lihat Pengenalan Parameter Attempts.

Server DNS yang ditempatkan di VPC adalah server DNS default untuk instance ECS di VPC. Alamat IP server DNS adalah 100.100.2.136 dan 100.100.2.138. Server DNS menyelesaikan nama domain otoritatif dan nama domain yang ditambahkan ke Alibaba Cloud DNS PrivateZone.

Alamat IP klaster CoreDNS adalah alamat IP layanan kube-dns di namespace kube-system. Layanan kube-dns meneruskan query DNS ke CoreDNS untuk nama domain internal, nama domain otoritatif, dan nama domain yang ditambahkan ke Alibaba Cloud DNS PrivateZone.

Catatan

Untuk informasi lebih lanjut tentang cara mengonfigurasi resolv.conf, lihat resolv.conf.

Dalam kasus tertentu, konfigurasi resolusi DNS di sisi klien mungkin berbeda dari deskripsi sebelumnya.

  • Jika Anda menggunakan image Alpine Linux untuk menyebarkan container, konfigurasi resolusi DNS mungkin sangat berbeda karena Alpine Linux mengganti glibc dengan musl libc. Berikut beberapa perbedaan utama:

    • Alpine Linux tidak mendukung parameter single-request dan single-request-reopen dalam file /etc/resolv.conf.

    • Versi Alpine 3.3 dan sebelumnya tidak mendukung parameter search yang memungkinkan Anda menentukan domain pencarian. Akibatnya, penemuan layanan gagal diimplementasikan.

    • musl libc memproses query yang dikirim ke server DNS yang ditentukan dalam file /etc/resolv.conf secara paralel. Hal ini menyebabkan NodeLocal DNSCache gagal mengoptimalkan resolusi DNS.

    • musl libc memproses query A dan AAAA yang menggunakan socket yang sama secara paralel, yang dapat menyebabkan kehilangan paket pada port conntrack di versi kernel sebelumnya.

    Catatan

    Untuk informasi lebih lanjut, lihat musl libc.

  • Jika Anda menggunakan Golang atau Node.js untuk mengembangkan aplikasi, aplikasi tersebut mungkin menggunakan resolver DNS bawaan, yang juga menyebabkan perbedaan signifikan dalam resolusi DNS.

Internal DNS servers in the cluster

Secara default, file /etc/resolv.conf CoreDNS diwarisi dari file /etc/resolv.conf pada instance ECS yang menjadi host CoreDNS. Namun, CoreDNS menggunakan plugin forward bawaan untuk meneruskan query DNS.

Tabel berikut menggambarkan parameter plugin forward. Untuk informasi lebih lanjut, lihat forward.

Parameter

Deskripsi

Nilai default di CoreDNS

Nilai default di NodeLocal DNSCache

prefer_udp

Lebih memilih menggunakan UDP untuk berkomunikasi dengan server upstream.

Aktif

Nonaktif

force_tcp

Memaksa menggunakan TCP untuk berkomunikasi dengan server upstream.

Nonaktif

Aktif

max_fails

Jumlah pemeriksaan kesehatan berturut-turut yang gagal sebelum server upstream dianggap tidak sehat.

2

2

expire

Periode waktu koneksi ke server upstream tetap aktif. Periode waktu default adalah 10 detik.

10s

10s

policy

Kebijakan yang digunakan untuk memilih server upstream.

random

random

health_check

Interval pemeriksaan kesehatan dilakukan.

0.5s

0.5s

max_concurrent

Jumlah maksimum query bersamaan yang dapat dikirim ke server upstream.

Tidak ada

Tidak ada

dial timeout

Periode timeout koneksi ke server upstream.

30s. Periode timeout berkurang secara dinamis berdasarkan durasi koneksi aktual.

30s. Periode timeout berkurang secara dinamis berdasarkan durasi koneksi aktual.

read timeout

Periode timeout permintaan yang dikirim ke server upstream.

2s

2s

Kebijakan caching

Client side

Kebijakan caching DNS di sisi klien bervariasi berdasarkan konfigurasi container dan aplikasi. Anda dapat mengonfigurasi kebijakan caching DNS di sisi klien sesuai dengan kebutuhan Anda.

Internal DNS servers in the cluster

Parameter

Deskripsi

Nilai default CoreDNS

Nilai default CoreDNS di ACS

success Max TTL

Waktu hidup maksimum (TTL) untuk cache resolusi DNS yang berhasil.

3600s

30s

success Min TTL

Waktu hidup minimum (TTL) untuk cache resolusi DNS yang berhasil.

5s

5s

success Capacity

Jumlah maksimum hasil resolusi DNS yang berhasil yang dapat di-cache.

9984

9984

denial Max TTL

Waktu hidup maksimum (TTL) untuk cache resolusi DNS yang gagal.

1800s

30s

denial Min TTL

Waktu hidup minimum (TTL) untuk cache resolusi DNS yang gagal.

5s

5s

denial Capacity

Jumlah maksimum hasil resolusi DNS yang gagal yang dapat di-cache.

9984

9984

ServerError TTL

Waktu hidup maksimum untuk hasil resolusi DNS yang dikembalikan dari server DNS upstream yang tidak sehat.

5s

0s. Jika versi CoreDNS yang terpasang lebih awal dari 1.8.4.2, nilai default adalah 5s.

serve_stale

Menggunakan cache DNS lokal yang sudah kadaluarsa jika klien tidak dapat terhubung ke server DNS upstream.

Nonaktif

Nonaktif

Catatan

TTL aktual untuk cache DNS ditentukan oleh TTL catatan DNS yang dikembalikan, TTL maksimum, dan TTL minimum:

  • Jika TTL catatan DNS yang dikembalikan lebih besar dari TTL maksimum, TTL maksimum digunakan sebagai TTL aktual untuk cache DNS.

  • Jika TTL catatan DNS yang dikembalikan lebih kecil dari TTL minimum, TTL minimum digunakan sebagai TTL aktual untuk cache DNS.

  • Jika TTL catatan DNS yang dikembalikan lebih besar dari TTL minimum dan lebih kecil dari TTL maksimum, TTL catatan DNS yang dikembalikan digunakan sebagai TTL aktual untuk cache DNS.

Optimalkan resolusi DNS

Topik ini menjelaskan jalur resolusi DNS dalam klaster Kubernetes dan parameter terkait. Anda dapat mengubah pengaturan parameter dalam file YAML pod atau ConfigMap CoreDNS. Contohnya:

Jika Anda menentukan dnsPolicy:Default dalam file YAML pod klien, pod akan mewarisi pengaturan DNS dari instance ECS yang menjadi host pod. Oleh karena itu, alamat IP server DNS di VPC secara otomatis ditentukan dalam file /etc/resolv.conf di pod.

apiVersion: v1
kind: Pod
metadata:
  name: example
  namespace: default
spec:
  containers:
  - image: registry.cn-hangzhou.aliyuncs.com/example-ns/example:v1
    name: example
  # Setel parameter dnsPolicy ke Default.
  dnsPolicy: Default

# File /etc/resolv.conf di pod.
# cat /etc/resolv.conf
nameserver 100.100.2.136
nameserver 100.100.2.138

Dibandingkan dengan file /etc/resolv.conf dari instance ECS, file /etc/resolv.conf di pod tidak berisi opsi berikut: rotate single-request-reopen timeout:2 attempts:3. Hal ini dapat menyebabkan kesalahan resolusi ketika terjadi jitter jaringan. Anda harus menambahkan opsi-opsi ini untuk meningkatkan kemampuan toleransi kesalahan. Ubah file YAML pod berdasarkan konten berikut:

apiVersion: v1
kind: Pod
metadata:
  name: example
  namespace: default
spec:
  containers:
  - image: registry.cn-hangzhou.aliyuncs.com/example-ns/example:v1
    name: example
  # Setel parameter dnsPolicy ke Default.
  dnsPolicy: Default
  # Tambahkan opsi berikut.
  dnsConfig:
    options:
    - name: timeout
      value: "2"
    - name: attempts
      value: "3"
    - name: rotate
    - name: single-request-reopen

# Setelah Anda menambahkan opsi ke /etc/resolv.conf, redeploy pod untuk menerapkan modifikasi.
# cat /etc/resolv.conf
nameserver 100.100.2.136
nameserver 100.100.2.138
options rotate single-request-reopen timeout:2 attempts:3