全部产品
Search
文档中心

Container Service for Kubernetes:Ikhtisar DNS

更新时间:Jul 02, 2025

Pod dalam kluster Kubernetes menggunakan nama domain untuk mengakses Layanan di dalam atau luar kluster. Nama domain diubah menjadi alamat IP melalui Sistem Nama Domain (DNS), yang memelihara pemetaan antara nama domain dan alamat IP. Topik ini menjelaskan dasar-dasar DNS, memperkenalkan komponen yang disediakan oleh Container Service for Kubernetes (ACK) untuk mengimplementasikan DNS, serta cara mengonfigurasi resolusi DNS untuk kluster ACK.

Cara kerja resolusi DNS di kluster ACK

Perangkat yang terhubung ke internet menggunakan alamat IP untuk berkomunikasi satu sama lain. Namun, alamat IP sulit diingat. Nama domain lebih mudah diingat karena mengandung informasi semantik. Dalam kebanyakan kasus, klien mengirim permintaan ke nama domain. Gambar berikut menunjukkan prosedur resolusi DNS untuk nama domain example.com ketika menerima permintaan dari klien.

  1. Server tujuan mendaftarkan nama domain dan alamat IP-nya dengan server DNS.

  2. Klien meminta server DNS untuk alamat IP dari nama domain example.com.

  3. Server DNS memeriksa catatan DNS pada server dan mengembalikan alamat IP ke klien.

  4. Klien terhubung ke alamat IP untuk berkomunikasi dengan server tujuan.

Komponen yang disediakan oleh ACK untuk mengimplementasikan DNS

CoreDNS dan NodeLocal DNSCache digunakan untuk mengimplementasikan DNS di kluster ACK dikelola. Sebelum menggunakan CoreDNS dan NodeLocal DNSCache, kami sarankan Anda membaca konten berikut untuk mempelajari dasar-dasar DNS di Kubernetes.

Dalam kebanyakan kasus, Layanan memiliki nama pendek. Selama pencarian DNS, Layanan direpresentasikan oleh nama domain lengkap dalam format <servicename>.<namespace>.svc.<ClusterDomain>. <ClusterDomain> merujuk ke nama domain kluster. Nama domain default kluster Kubernetes adalah cluster.local. Anda dapat menentukan nama domain kustom. Misalnya, nama domain lengkap Layanan database-svc di namespace default adalah database-svc.default.svc.cluster.local.

Selama pembuatan pod, kubelet pada node mengonfigurasi file /etc/resolv.conf untuk pod. Pod mengirim permintaan DNS berdasarkan konfigurasi dalam file ini.

CoreDNS Tidak Dikelola

CoreDNS adalah penyelesai DNS yang disediakan oleh Kubernetes. CoreDNS dapat menyelesaikan nama domain internal kustom dan nama domain eksternal. CoreDNS dihosting oleh Cloud Native Computing Foundation (CNCF). Untuk informasi lebih lanjut tentang CoreDNS, lihat CoreDNS: DNS dan Penemuan Layanan.

ACK menggunakan CoreDNS sebagai server DNS default untuk kluster ACK. CoreDNS diterapkan sebagai Deployment di namespace kube-system. CoreDNS diekspos dalam kluster menggunakan Layanan kube-dns, yang merupakan Layanan ClusterIP. Untuk informasi lebih lanjut tentang cara mengonfigurasi CoreDNS, lihat Konfigurasikan CoreDNS.

Gunakan kubectl untuk Menanyakan Sumber Daya yang Diterapkan untuk CoreDNS

  1. Jalankan perintah berikut untuk menanyakan Deployment CoreDNS:

    kubectl get deployment -l k8s-app=kube-dns -n kube-system 

    Output yang Diharapkan:

    NAME      READY   UP-TO-DATE   AVAILABLE   AGE
    coredns   2/2     2            2           1h
  2. Jalankan perintah berikut untuk menanyakan Layanan CoreDNS:

    kubectl get service -n kube-system kube-dns

    Output yang Diharapkan:

    NAME       TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)                  AGE
    kube-dns   ClusterIP   172.**.**.**   <none>        53/UDP,53/TCP,9153/TCP   1h

Gambar berikut menunjukkan prosedur resolusi DNS ketika pod di namespace default mencoba mengakses Layanan database-svc.

  1. Pod memeriksa file /etc/resolv.conf untuk mendapatkan alamat IP server DNS (172.0.XX.XX), yang merupakan alamat IP kluster dari Layanan kube-dns. Contoh file konfigurasi:

    nameserver 172.0.XX.XX                                              # Mendefinisikan alamat IP server DNS.
    search default.svc.cluster.local svc.cluster.local cluster.local    # Mengonfigurasi aturan pencarian akhiran domain. Semakin banyak akhiran meningkatkan upaya kueri DNS.
    options ndots:5                                                     # Menetapkan opsi resolusi domain (pasangan nilai-kunci). Beberapa pasangan nilai-kunci didukung.
  2. Pod mengirim kueri DNS ke Layanan kube-dns. Nama domain ditambahkan dengan akhiran yang ditentukan oleh parameter search secara berurutan sebelum nama domain diselesaikan.

    1. database-svc.default.svc.cluster.local: Layanan di namespace yang sama dengan pod.

    2. database-svc.svc.cluster.local: Layanan di namespace lain.

    3. database-svc.cluster.local: Nama domain internal di kluster.

    4. database-svc: Nama domain eksternal.

  3. Pod CoreDNS mengembalikan 172.4.XX.XX.

  4. Pod terhubung ke alamat IP untuk berkomunikasi dengan Layanan database-svc.

CoreDNS Dikelola

CoreDNS Dikelola beroperasi identik dengan CoreDNS tidak dikelola tetapi sepenuhnya dikelola oleh ACK. Ini mengonsumsi nol sumber daya kluster, menghilangkan persyaratan O&M pengguna, dan secara otomatis diskalakan berdasarkan beban kerja.

CoreDNS Dikelola juga didukung di kluster ACK dikelola dengan mode otomatis diaktifkan.

NodeLocal DNSCache

NodeLocal DNSCache menjalankan agen caching DNS pada setiap node pekerja untuk mengurangi beban kerja CoreDNS. Ini membantu meningkatkan stabilitas dan ketersediaan resolusi DNS di kluster. Untuk meningkatkan stabilitas resolusi DNS, kami sarankan Anda menginstal NodeLocal DNSCache di kluster Anda. Untuk informasi lebih lanjut tentang cara menginstal dan menggunakan NodeLocal DNSCache, lihat Konfigurasikan NodeLocal DNSCache.

Gambar berikut menunjukkan prosedur resolusi DNS di kluster ketika pod di namespace default mencoba mengakses Layanan database-svc. NodeLocal DNSCache diinstal di kluster dan label node-local-dns-injection: "enabled" ditambahkan ke namespace default.

  1. Pod pertama kali menanyakan cache DNS di node.

  2. Resolusi dilanjutkan berdasarkan apakah terjadi cache hit:

    1. Jika catatan untuk Layanan database-svc ditemukan di cache, terjadi cache hit. Dalam hal ini, alamat IP yang dicatat di cache dikembalikan. Pod terhubung ke alamat IP.

    2. Jika tidak ada catatan untuk Layanan database-svc ditemukan di cache, terjadi cache miss. Dalam hal ini, pod mengirim kueri DNS ke CoreDNS. Hasil yang dikembalikan oleh CoreDNS akan disinkronkan ke cache DNS di node.

Konfigurasikan resolusi DNS untuk kluster ACK

Anda dapat mengonfigurasi resolusi DNS untuk kluster ACK dari perspektif berikut:

Konfigurasikan resolusi DNS dari perspektif kluster

Konfigurasi kubelet sebuah node berisi parameter ClusterDomain. Anda harus memastikan bahwa parameter ClusterDomain dalam konfigurasi kubelet setiap node di kluster disetel ke nilai yang sama. Jika tidak, kesalahan jaringan mungkin terjadi di kluster.

  • ClusterDomain

    Parameter ClusterDomain menentukan nama domain tingkat atas yang digunakan oleh semua Layanan di kluster. Nilai default: cluster.local. Jika nama domain diakhiri dengan nilai parameter ClusterDomain, itu adalah nama domain internal. Jika nama domain tidak diakhiri dengan nilai parameter ClusterDomain, itu adalah nama domain eksternal. Anda dapat menentukan parameter ClusterDomain selama pembuatan kluster. Pastikan nilai parameter ClusterDomain tidak tumpang tindih dengan nama domain eksternal yang Anda gunakan.

    image.png

Konfigurasikan resolusi DNS dari perspektif node

  • resolveConf

    Parameter resolveConf dalam konfigurasi kubelet sebuah node menentukan jalur file konfigurasi DNS di node. Jika Anda menyetel parameter dnsPolicy dalam konfigurasi pod ke Default, kubelet menyalin isi file (/etc/resolv.conf secara default) yang ditentukan oleh parameter resolveConf kubelet ke file /etc/resolv.conf di pod.

Konfigurasikan resolusi DNS dari perspektif pod

  • Konfigurasi pod berisi parameter dnsPolicy dan dnsConfig, yang dapat digunakan untuk mengonfigurasi kebijakan DNS kustom untuk pod. dnsPolicy menentukan kebijakan resolusi DNS pod. Parameter dnsConfig menentukan server DNS dan domain pencarian DNS untuk resolusi DNS di pod. Untuk informasi lebih lanjut tentang cara mengonfigurasi parameter dnsPolicy dan dnsConfig dalam skenario berbeda, lihat Kebijakan DNS dan Resolusi Nama Domain.