All Products
Search
Document Center

Container Service for Kubernetes:Ikhtisar DNS

Last Updated:Mar 27, 2026

Dalam kluster Kubernetes, Pod menggunakan nama domain untuk mengakses Service atau layanan eksternal. Nama domain tersebut harus diresolusi menjadi alamat IP agar dapat diakses. DNS menangani hal ini dengan memelihara pemetaan antara nama domain dan alamat IP. Topik ini menjelaskan dasar-dasar DNS, komponen DNS di ACK, serta konfigurasi DNS.

Cara kerja resolusi nama domain

Meskipun perangkat di internet berkomunikasi menggunakan alamat IP, nama domain lebih mudah diingat karena lebih semantis. Akibatnya, klien hampir selalu menggunakan nama domain untuk memulai permintaan. Gambar berikut menunjukkan proses ketika klien mengirim permintaan ke example.com.

image
  1. Server mendaftarkan alamat IP dan nama domain-nya ke server DNS, yang menyimpan catatan tersebut.

  2. Klien meminta server DNS untuk alamat IP yang sesuai dengan example.com.

  3. Server DNS mencari catatan tersebut dan mengembalikan alamat IP ke klien.

  4. Klien menggunakan alamat IP tersebut untuk mengakses server tujuan.

Jenis nama domain dalam kluster

  • Nama domain internal: Nama domain dari suatu Service, yang hanya berlaku di dalam kluster. Kami merekomendasikan Anda menggunakan format fully qualified domain name (FQDN), <service-name>.<namespace>.svc.<cluster-domain>, untuk mengakses Service tersebut. Penggunaan nama domain pendek (<service-name>) menyebabkan terlalu banyak kueri DNS tidak valid dan meningkatkan waktu resolusi.

    cluster-domain adalah pengaturan kustom yang dikonfigurasi saat pembuatan kluster, dengan nilai default cluster.local.
  • Nama domain eksternal: Meliputi nama domain internal VPC dan nama domain publik. Untuk meng-resolve nama domain ini, CoreDNS harus mendapatkan hasil dari server DNS hulu. Secara default, server DNS hulu adalah layanan PrivateZone, dengan alamat IP 100.100.2.136 dan 100.100.2.138.

    Penting

    PrivateZone tidak menyediakan Service Level Agreement (SLA) untuk resolusi rekursif nama domain publik. Untuk informasi tentang batasan resolusi rekursif, lihat Mengelola kueri rekursif.

Komponen DNS dalam kluster

Dalam kluster ACK yang dikelola, dua komponen menangani DNS: CoreDNS dan NodeLocal DNSCache.

CoreDNS

CoreDNS tersedia dalam dua mode: dikelola (managed) dan tidak dikelola (unmanaged).

Item perbandingan

CoreDNS Terkelola

CoreDNS Tidak Dikelola

Kluster yang didukung

  • Kluster ACK yang dikelola

  • Kluster khusus ACK

  • Kluster ACK Serverless

Mode penerapan

Diterapkan pada lapisan kontrol dan sepenuhnya dikelola oleh ACK.

Pada halaman Component Management di Konsol, kartu komponen hosted menampilkan Hosted.

Diterapkan sebagai workload (Deployment) di dalam kluster. Secara default, diinstal di namespace kube-system dan mengonsumsi sumber daya pada node pekerja.

Tanggung jawab O&M

Alibaba Cloud bertanggung jawab atas O&M komponen.

Mengikuti model tanggung jawab bersama:

  • Alibaba Cloud menyediakan versi perangkat lunak komponen, dukungan teknis, dan parameter yang dapat dikonfigurasi untuk membantu O&M.

  • Anda bertanggung jawab memastikan kluster memiliki sumber daya yang cukup untuk menerapkan CoreDNS, mengaktifkan logging dan peringatan pemantauan, serta mengelola spesifikasi sumber daya, peningkatan, dan penskalaan komponen. Untuk detail konfigurasi, lihat Rekomendasi untuk menerapkan CoreDNS Tidak Dikelola yang stabil dan berkinerja tinggi.

Fitur

  • Mendukung autoscaling secara default. Proses penskalaan membutuhkan waktu sekitar 5 hingga 10 menit.

  • Mendukung konfigurasi parameter kustom untuk kasus penggunaan umum melalui CRD.

  • Mendukung spesifikasi sumber daya kustom untuk komponen.

  • Autoscaling tidak dikonfigurasi secara default tetapi dapat dikonfigurasi secara manual.

  • Anda dapat menyesuaikan konfigurasi dengan mengubah ConfigMap bernama coredns di namespace kube-system.

Logging

Logging diaktifkan secara default.

Didukung, tetapi Anda harus mengaktifkan logging CoreDNS secara manual.

Pemantauan dan peringatan

Mendukung pemantauan Prometheus. Anda harus menyiapkan dan mengonfigurasi pemantauan untuk kluster.

Kinerja

Untuk informasi lebih lanjut, lihat Kinerja CoreDNS Terkelola.

Bergantung pada konfigurasi komponen.

CoreDNS Tidak Dikelola

CoreDNS adalah komponen dalam kluster Kubernetes yang menangani resolusi DNS. Komponen ini dapat meng-resolve nama domain layanan internal maupun eksternal. Proyek CoreDNS dihost oleh Cloud Native Computing Foundation (CNCF). Untuk informasi lebih lanjut, lihat CoreDNS: DNS and Service Discovery.

Mengikuti standar Kubernetes open-source, kluster ACK menginstal CoreDNS sebagai server DNS default. CoreDNS diterapkan sebagai Deployment di namespace kube-system. kube-dns adalah Service tipe ClusterIP untuk CoreDNS. Untuk informasi tentang cara mengonfigurasi CoreDNS, lihat Konfigurasi CoreDNS Tidak Dikelola.

Gunakan kubectl untuk melihat resource CoreDNS

  1. Lihat Penyebaran

    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. Lihat Service

    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

Pada contoh berikut, sebuah Pod di namespace default mencoba mengakses database-svc dan menjalani proses berikut:

image
  1. Pod memeriksa file konfigurasi /etc/resolv.conf dan menentukan bahwa alamat IP server DNS adalah 172.0.XX.XX. Ini adalah ClusterIP dari kube-dns. Contoh isi file konfigurasi sebagai berikut.

    nameserver 172.0.XX.XX                                              # Menentukan alamat IP server DNS.
    search default.svc.cluster.local svc.cluster.local cluster.local    # Mengatur aturan sufiks pencarian untuk nama domain. Semakin banyak jalur pencarian yang dikonfigurasi, semakin banyak upaya pencarian yang dilakukan.
    options ndots:5                                                     # Menentukan opsi untuk file konfigurasi resolusi nama domain. Mendukung beberapa pasangan kunci-nilai.
  2. Sebuah Pod mengirim kueri DNS ke kube-dns, menggunakan nilai pada bidang search sebagai sufiks untuk secara berurutan meng-resolve nama-nama berikut:

    1. database-svc.default.svc.cluster.local (Service dalam namespace yang sama dengan Pod)

    2. database-svc.svc.cluster.local (Service di namespace lain)

    3. database-svc.cluster.local (nama domain cakupan kluster)

    4. database-svc (nama domain eksternal)

  3. Pod CoreDNS mengembalikan hasilnya, yaitu alamat IP 172.4.XX.XX.

  4. Pod menggunakan IP ini untuk mengakses layanan tujuan database-svc.

  5. Jika permintaan ditujukan ke nama domain eksternal, seperti nama domain internal VPC atau nama domain publik, Pod CoreDNS meneruskan kueri tersebut ke server DNS hulu.

    Penting

    Jangan mengubah konfigurasi server DNS pada node karena CoreDNS mewarisi alamat server DNS hulu dari node tempatnya berjalan.

    Konfigurasi CoreDNS disimpan dalam ConfigMap coredns di namespace kube-system. Dalam konfigurasi default, plugin forward mengarah ke /etc/resolv.conf. Artinya, untuk kueri DNS hulu, CoreDNS menggunakan alamat server DNS dari file /etc/resolv.conf di kontainer-nya. File /etc/resolv.conf di kontainer CoreDNS secara default sama dengan file /etc/resolv.conf pada node host-nya, yang menggunakan alamat server DNS default 100.100.2.136 dan 100.100.2.138. Jika Anda mengubah konfigurasi server DNS pada node, CoreDNS akan menggunakan alamat DNS hulu yang salah, sehingga menyebabkan kegagalan resolusi atau hasil yang tidak terduga.

        .:53 {
            ...
            forward . /etc/resolv.conf {
              prefer_udp
            }
            ...
        }

CoreDNS Terkelola

CoreDNS Terkelola bekerja dengan prinsip yang sama seperti CoreDNS Tidak Dikelola tetapi sepenuhnya dikelola oleh ACK. Komponen ini tidak mengonsumsi sumber daya kluster dan tidak memerlukan O&M dari Anda. Komponen ini juga melakukan autoscaling berdasarkan beban. Untuk informasi lebih lanjut, lihat Kinerja CoreDNS Terkelola.

CoreDNS Terkelola didukung di kluster ACK yang dikelola dengan mode otomatis diaktifkan. Untuk menggunakan kluster ACK yang dikelola dengan mode otomatis diaktifkan, lihat Buat kluster ACK yang dikelola dengan mode otomatis diaktifkan.

NodeLocal DNSCache

NodeLocal DNSCache mengonfigurasi cache DNS pada setiap node pekerja untuk mengurangi beban pada CoreDNS dan meningkatkan stabilitas serta ketersediaan DNS kluster. Kami merekomendasikan Anda menginstal komponen ini dalam skenario dengan beban DNS tinggi atau persyaratan ketat terhadap kecepatan respons dan stabilitas DNS. Untuk menginstal dan menggunakan komponen ini, lihat Gunakan komponen NodeLocal DNSCache.

Pada contoh berikut, setelah NodeLocal DNSCache diinstal dan label node-local-dns-injection: "enabled" ditambahkan ke namespace default, sebuah Pod di namespace default mencoba mengakses database-svc dan menjalani proses berikut:

image
  1. Pod pertama-tama memeriksa cache DNS pada nodenya.

  2. Proses berlanjut dengan salah satu dari dua cara, tergantung apakah terjadi cache hit:

    1. Cache hit terjadi jika cache DNS node berisi catatan untuk database-svc. Cache mengembalikan hasilnya, dan Pod menggunakan hasil tersebut untuk mengakses layanan.

    2. Jika terjadi cache miss, artinya cache DNS node tidak memiliki catatan untuk database-svc, hasilnya diambil dari CoreDNS. Hasil dari CoreDNS kemudian di-cache di cache DNS node untuk penggunaan di masa mendatang.

Konfigurasi DNS kluster

DNS dalam kluster dapat dikonfigurasi pada tiga level berbeda, masing-masing dengan cakupan yang berbeda.

Konfigurasi kluster

ClusterDomain adalah konfigurasi kubelet pada setiap node. Konfigurasi ini harus konsisten di seluruh kubelet dalam kluster. Jika tidak, akan terjadi error jaringan.

  • ClusterDomain

    ClusterDomain adalah domain tingkat atas lokal kluster dan sufiks default untuk nama domain lengkap semua Service di dalam kluster. Nilai default-nya adalah cluster.local. Konfigurasi ClusterDomain biasanya digunakan untuk membedakan antara jaringan dalam kluster dan luar kluster. Saat membuat kluster, Anda dapat menyesuaikan ClusterDomain. Pastikan nama domain kustom tersebut tidak bentrok dengan nama domain eksternal yang umum digunakan.

    image.png

Konfigurasi node

  • resolveConf

    resolveConf menentukan path ke file konfigurasi DNS pada node. Ketika dnsPolicy Pod bernilai Default, kubelet menyalin file yang ditentukan oleh resolveConf (yang secara default adalah /etc/resolv.conf) ke /etc/resolv.conf Pod.

Konfigurasi Pod

  • Setiap Pod memiliki dua konfigurasi untuk menyesuaikan kebijakan DNS-nya: dnsPolicy menentukan kebijakan resolusi DNS, dan dnsConfig digunakan untuk menentukan server DNS kustom dan domain pencarian. Untuk informasi lebih lanjut tentang cara menggunakan dnsPolicy dan dnsConfig bersama dalam berbagai skenario, lihat Konfigurasi Kebijakan DNS dan Resolusi Nama Domain.