All Products
Search
Document Center

Container Compute Service:Prinsip dan deskripsi konfigurasi DNS

Last Updated:Mar 26, 2026

Kluster Alibaba Cloud Container Compute Service (ACS) menggunakan CoreDNS untuk resolusi DNS. Topik ini menjelaskan cara kerja DNS di dalam kluster dan cara mengonfigurasi dnsPolicy sesuai kebutuhan workload Anda.

Aktifkan resolusi DNS di kluster Anda

Kluster ACS tidak mengaktifkan resolusi DNS secara default. Untuk mengaktifkannya, pilih CoreDNS saat membuat kluster. CoreDNS diekspos di dalam kluster sebagai layanan bernama kube-dns di namespace kube-system.

Jalankan perintah berikut untuk memeriksa layanan kube-dns:

kubectl get svc kube-dns -n kube-system

Output yang diharapkan:

NAME       TYPE        CLUSTER-IP    EXTERNAL-IP   PORT(S)                  AGE
kube-dns   ClusterIP   172.24.0.10   <none>        53/UDP,53/TCP,9153/TCP   27d

Untuk informasi lebih lanjut tentang pembuatan kluster ACS dengan CoreDNS yang diaktifkan, lihat Create an ACS cluster.

Cara kerja resolusi DNS di kluster ACS

Saat sebuah Pod dimulai, kubelet mengonfigurasi pengaturan DNS-nya menggunakan dua parameter:

  • --cluster-dns=<dns-service-ip>: alamat IP server DNS kluster

  • --cluster-domain=<default-local-domain>: akhiran nama domain dasar

Parameter-parameter ini menentukan isi file /etc/resolv.conf di dalam setiap Pod:

nameserver xx.xx.0.10
search kube-system.svc.cluster.local svc.cluster.local cluster.local
options ndots:5
ParameterDeskripsi
nameserverAlamat IP server DNS.
searchAkhiran domain yang ditambahkan ke nama pendek selama pencarian DNS. Kluster ACS menyertakan tiga akhiran (kube-system.svc.cluster.local, svc.cluster.local, cluster.local), sehingga satu permintaan pencarian dapat menghasilkan hingga empat kueri DNS.
optionsOpsi resolver tambahan dalam bentuk pasangan kunci-nilai. Nilai default ndots:5 berarti: jika nama domain berisi lebih banyak titik daripada nilai ndots, maka nama tersebut dianggap sebagai fully qualified domain name (FQDN) dan langsung diselesaikan; jika jumlah titiknya lebih sedikit, akhiran dari search akan ditambahkan terlebih dahulu.

Pilih kebijakan DNS

Tetapkan dnsPolicy dalam spesifikasi Pod untuk mengontrol cara Pod menyelesaikan nama domain. Kluster ACS mendukung kebijakan berikut:

KebijakanServer DNS yang digunakanKapan digunakan
ClusterFirstCoreDNS (kube-dns)Pod yang perlu mengakses layanan lain di dalam kluster. Ini adalah nilai default.
NoneDitetapkan oleh dnsConfigPod yang memerlukan pengaturan DNS sepenuhnya kustom.
Default/etc/resolv.conf node (Alibaba Cloud DNS)Pod yang tidak mengakses layanan internal kluster apa pun.
Default bukanlah kebijakan DNS default. Jika dnsPolicy tidak ditentukan, ClusterFirst yang digunakan.

Gunakan CoreDNS untuk menyelesaikan nama domain internal kluster

Tetapkan dnsPolicy: ClusterFirst untuk Pod yang berkomunikasi dengan layanan lain di dalam kluster. Ini adalah perilaku default untuk workload ACS.

apiVersion: v1
kind: Pod
metadata:
  name: alpine
  namespace: default
spec:
  containers:
  - image: alpine
    command:
      - sleep
      - "10000"
    imagePullPolicy: Always
    name: alpine
  dnsPolicy: ClusterFirst

Kustomisasi pengaturan DNS untuk sebuah Pod

Tetapkan dnsPolicy: None dan sertakan blok dnsConfig untuk mengontrol sepenuhnya pengaturan DNS Pod. Saat dnsPolicy bernilai None, setidaknya satu nameserver harus ditentukan dalam dnsConfig.

dnsConfig bersifat opsional dan dapat dikombinasikan dengan dnsPolicy apa pun, tidak hanya None. Gunakan bersama kebijakan lain untuk menambahkan nameserver atau domain pencarian tambahan di atas pengaturan yang sudah ada.

apiVersion: v1
kind: Pod
metadata:
  name: alpine
  namespace: default
spec:
  containers:
  - image: alpine
    command:
      - sleep
      - "10000"
    imagePullPolicy: Always
    name: alpine
  dnsPolicy: None
  dnsConfig:
    nameservers: ["169.254.xx.xx"]
    searches:
    - default.svc.cluster.local
    - svc.cluster.local
    - cluster.local
    options:
    - name: ndots
      value: "2"

Saat Pod dimulai, konfigurasi di atas menghasilkan /etc/resolv.conf berikut:

nameserver 169.254.xx.xx
search default.svc.cluster.local svc.cluster.local cluster.local
options ndots:2

Tabel berikut menjelaskan bidang-bidang dalam dnsConfig:

BidangDeskripsi
nameserversDaftar alamat IP server DNS untuk Pod. Maksimal tiga alamat IP diperbolehkan. Saat dnsPolicy bernilai None, setidaknya satu alamat harus ditentukan. Alamat duplikat akan dihapus.
searchesDaftar domain pencarian DNS untuk pencarian hostname. Maksimal enam domain diperbolehkan. Domain-domain ini ditambahkan ke daftar dasar yang berasal dari kebijakan DNS. Domain duplikat akan dihapus.
optionsDaftar opsi resolver, masing-masing memiliki name (wajib) dan value (opsional). Opsi ini digabungkan ke dalam opsi yang dihasilkan oleh kebijakan DNS. Item duplikat akan dihapus.

Gunakan DNS tingkat node tanpa CoreDNS

Jika Pod Anda tidak mengakses layanan apa pun di kluster ACS, tetapkan dnsPolicy: Default. Resolusi DNS ditangani oleh Alibaba Cloud DNS menggunakan /etc/resolv.conf node, dan CoreDNS tidak terlibat.

apiVersion: v1
kind: Pod
metadata:
  name: alpine
  namespace: default
spec:
  containers:
  - image: alpine
    command:
      - sleep
      - "10000"
    imagePullPolicy: Always
    name: alpine
  dnsPolicy: Default

Petakan hostname statis ke alamat IP

Untuk menambahkan pemetaan hostname-ke-IP statis untuk Pod tertentu, tambahkan bidang hostAliases ke spesifikasi Pod. Kubelet mengelola file /etc/hosts Pod dan menulis entri tersebut saat startup.

Peringatan

Jangan mengedit secara manual file /etc/hosts di dalam kontainer yang sedang berjalan. Kubelet akan menimpa file tersebut saat kontainer direstart, sehingga perubahan manual akan hilang.

Untuk menerapkan pemetaan statis ke semua Pod di kluster—bukan hanya satu Pod—aktifkan Plugin hosts CoreDNS. Lihat Configure CoreDNS extensions.

Contoh berikut memetakan foo.local, bar.local, dan foo.remote ke alamat IP statis:

apiVersion: v1
kind: Pod
metadata:
  name: hostaliases-pod
spec:
  hostAliases:
  - ip: "127.0.**.**"
    hostnames:
    - "foo.local"
    - "bar.local"
  - ip: "10.1.**.**"
    hostnames:
    - "foo.remote"
  containers:
  - name: cat-hosts
    image: busybox:1.28
    command:
    - cat
    args:
    - "/etc/hosts"

Setelah Pod dimulai, file /etc/hosts berisi:

# Kubernetes-managed hosts file.
127.0.**.**	localhost
10.200.**.**	hostaliases-pod

# Entries added by HostAliases.
127.0.**.**	foo.local	bar.local
10.1.**.**	foo.remote	bar.remote

Langkah berikutnya