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-systemOutput 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 27dUntuk 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| Parameter | Deskripsi |
|---|---|
nameserver | Alamat IP server DNS. |
search | Akhiran 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. |
options | Opsi 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:
| Kebijakan | Server DNS yang digunakan | Kapan digunakan |
|---|---|---|
ClusterFirst | CoreDNS (kube-dns) | Pod yang perlu mengakses layanan lain di dalam kluster. Ini adalah nilai default. |
None | Ditetapkan oleh dnsConfig | Pod yang memerlukan pengaturan DNS sepenuhnya kustom. |
Default | /etc/resolv.conf node (Alibaba Cloud DNS) | Pod yang tidak mengakses layanan internal kluster apa pun. |
Defaultbukanlah kebijakan DNS default. JikadnsPolicytidak ditentukan,ClusterFirstyang 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: ClusterFirstKustomisasi 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:2Tabel berikut menjelaskan bidang-bidang dalam dnsConfig:
| Bidang | Deskripsi |
|---|---|
nameservers | Daftar alamat IP server DNS untuk Pod. Maksimal tiga alamat IP diperbolehkan. Saat dnsPolicy bernilai None, setidaknya satu alamat harus ditentukan. Alamat duplikat akan dihapus. |
searches | Daftar 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. |
options | Daftar 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: DefaultPetakan 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.
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