全部产品
Search
文档中心

Container Compute Service:Konfigurasi Resolusi DNS

更新时间:Jul 02, 2025

Topik ini menjelaskan cara kerja resolusi Sistem Nama Domain (DNS) di Alibaba Cloud Container Compute Service (ACS) kluster dan cara mengonfigurasi kebijakan DNS untuk memenuhi berbagai kebutuhan bisnis dalam skenario yang berbeda.

Informasi latar belakang

Secara default, kluster ACS tidak menyediakan layanan resolusi DNS. Untuk mengaktifkan resolusi DNS pada kluster ACS, Anda harus memilih CoreDNS saat membuat kluster. Layanan bernama kube-dns diterapkan di kluster ACS untuk menyediakan layanan resolusi DNS. Anda dapat menjalankan perintah berikut untuk menanyakan informasi tentang Layanan kube-dns: Untuk informasi lebih lanjut tentang cara membuat kluster ACS, lihat Buat Kluster ACS.

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

Cara kerja resolusi DNS di kluster ACS

Parameter startup kubelet di kluster ACS mencakup --cluster-dns=<dns-service-ip> dan --cluster-domain=<default-local-domain>. Parameter ini menentukan alamat IP server DNS untuk kluster dan akhiran nama domain dasar untuk server DNS.

Berkas konfigurasi DNS di pod adalah /etc/resolv.conf. Berkas tersebut berisi konten berikut:

nameserver xx.xx.0.10
search kube-system.svc.cluster.local svc.cluster.local cluster.local
options ndots:5

Parameter

Deskripsi

nameserver

Alamat IP server DNS.

search

Akhiran yang digunakan untuk kueri DNS. Semakin banyak akhiran, semakin banyak kueri DNS. Untuk kluster ACS, akhiran kube-system.svc.cluster.local, svc.cluster.local, dan cluster.local. Oleh karena itu, hingga empat kueri dihasilkan untuk permintaan yang dikirim ke kluster ACS.

options

Opsi untuk berkas konfigurasi DNS. Anda dapat menentukan beberapa pasangan nilai-kunci. Sebagai contoh, jika Anda menetapkan parameter menjadi ndots:5, nama domain adalah nama domain berkualifikasi penuh dan langsung diselesaikan jika jumlah titik dalam string nama domain lebih besar dari nilai ndots. Jika jumlah titik dalam string nama domain kurang dari nilai ndots, nama domain ditambahkan dengan akhiran yang ditentukan oleh parameter search sebelum diselesaikan.

Berdasarkan pengaturan sebelumnya, kueri DNS untuk nama domain internal dan eksternal dikirim ke server DNS kluster ACS untuk resolusi DNS.

Gunakan dnsPolicy untuk mengonfigurasi kebijakan DNS untuk kluster ACS dalam skenario berbeda

Anda dapat menggunakan parameter dnsPolicy untuk menentukan kebijakan DNS yang berbeda untuk pod. Kluster ACS mendukung kebijakan berikut:

  • ClusterFirst: Kebijakan ini menunjukkan bahwa pod menggunakan CoreDNS untuk menyelesaikan nama domain. Berkas /etc/resolv.conf berisi alamat server DNS yang disediakan oleh CoreDNS, yaitu kube-dns. Ini adalah kebijakan DNS default untuk beban kerja di kluster ACS.

  • None: Kebijakan ini menunjukkan bahwa pod mengabaikan pengaturan DNS kluster ACS. Anda harus menyesuaikan pengaturan DNS menggunakan bidang dnsConfig.

  • Default: Kebijakan ini menunjukkan bahwa pod mewarisi pengaturan resolusi DNS dari node tempat pod diterapkan. Di kluster ACS, node dibuat berdasarkan Instance Elastic Compute Service (ECS). Oleh karena itu, pod langsung menggunakan berkas /etc/resolv.conf dari node berbasis ECS tempat pod diterapkan. Berkas ini berisi alamat server DNS yang disediakan oleh Alibaba Cloud DNS.

Anda dapat menggunakan kebijakan DNS sebelumnya untuk memenuhi berbagai kebutuhan bisnis dalam skenario yang berbeda.

Skenario 1: Gunakan CoreDNS yang disediakan oleh kluster ACS untuk menyelesaikan nama domain

Dalam skenario ini, Anda harus menentukan dnsPolicy: ClusterFirst untuk pengaturan kebijakan DNS. Contoh:

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

Skenario 2: Sesuaikan pengaturan DNS untuk pod

Untuk menyesuaikan pengaturan DNS untuk Deployment, Anda harus menentukan dnsPolicy: None untuk pengaturan kebijakan DNS. Contoh:

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"

Tabel berikut menjelaskan parameter dalam bagian dnsConfig.

Parameter

Deskripsi

nameservers

Daftar alamat IP server DNS untuk pod. Anda dapat menentukan hingga tiga alamat IP. Jika Anda menetapkan dnsPolicy ke None untuk pod, Anda harus menentukan setidaknya satu alamat IP. Jika Anda tidak menetapkan dnsPolicy ke None untuk pod, parameter ini opsional. Daftar alamat IP server DNS ditambahkan ke parameter nameserver dari berkas konfigurasi DNS yang dihasilkan berdasarkan nilai dnsPolicy. Alamat IP duplikat dihapus.

searches

Daftar domain pencarian DNS untuk pencarian nama host di pod. Parameter ini opsional. Daftar domain pencarian DNS ditambahkan ke daftar domain pencarian dasar yang dihasilkan berdasarkan kebijakan DNS yang ditentukan. Nama domain duplikat dihapus. Anda dapat menentukan hingga enam domain pencarian.

options

Daftar item opsional. Setiap item dapat berisi name (wajib) dan value (opsional). Item yang ditentukan ditambahkan ke daftar item opsional yang dihasilkan berdasarkan kebijakan DNS yang ditentukan. Item duplikat dihapus.

Skenario 3: Gunakan pengaturan DNS instance ECS yang disediakan oleh Alibaba Cloud

Jika pod aplikasi Anda tidak perlu mengakses layanan lain yang diterapkan di kluster ACS, Anda dapat menentukan dnsPolicy: Default untuk pengaturan kebijakan DNS. Dalam skenario ini, resolusi DNS dilakukan oleh Alibaba Cloud DNS dan CoreDNS tidak diperlukan. Contoh:

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

Gunakan parameter hostAliases untuk mengonfigurasi berkas /etc/hosts di pod

Jika Anda ingin memetakan nama domain tertentu ke alamat IP statis untuk resolusi DNS di semua pod, Anda dapat mengaktifkan plugin hosts CoreDNS. Untuk informasi lebih lanjut, lihat Konfigurasi Ekstensi CoreDNS.

Jika Anda ingin memetakan nama domain tertentu ke alamat IP statis untuk resolusi DNS di pod tertentu, Anda dapat menambahkan parameter hostAliases ke berkas /etc/hosts pod tersebut. Contoh:

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"

Blok kode berikut menunjukkan isi berkas /etc/hosts yang diinisialisasi setelah Anda menambahkan parameter hostAliases ke bagian spec konfigurasi pod:

# Berkas hosts yang dikelola Kubernetes.
127.0.**.**	localhost
10.200.**.**	hostaliases-pod

# Entri yang ditambahkan oleh HostAliases.
127.0.**.**	foo.local	bar.local
10.1.**.**	foo.remote	bar.remote

Isi sebelumnya menunjukkan bahwa nama domain foo.local, bar.local, dan foo.remote dipetakan ke alamat IP statis.