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-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 27dCara 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:5Parameter | Deskripsi |
nameserver | Alamat IP server DNS. |
search | Akhiran yang digunakan untuk kueri DNS. Semakin banyak akhiran, semakin banyak kueri DNS. Untuk kluster ACS, akhiran |
options | Opsi untuk berkas konfigurasi DNS. Anda dapat menentukan beberapa pasangan nilai-kunci. Sebagai contoh, jika Anda menetapkan parameter menjadi |
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: ClusterFirstSkenario 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 |
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: DefaultGunakan 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.remoteIsi sebelumnya menunjukkan bahwa nama domain foo.local, bar.local, dan foo.remote dipetakan ke alamat IP statis.