Topik ini menjelaskan cara menyetel parameter dnsPolicy untuk mengonfigurasi kebijakan DNS pada setiap pod dalam kluster Container Service for Kubernetes (ACK). Topik ini juga menjelaskan cara menggunakan parameter HostAliases untuk mengonfigurasi pod agar menyelesaikan nama domain ke alamat IP tertentu.
Prasyarat
Sebuah kluster ACK managed cluster atau ACK Serverless cluster telah dibuat. Untuk informasi lebih lanjut, lihat Buat sebuah ACK Managed Cluster dan Pengenalan Cepat ACK Serverless.
File kubeconfig dari kluster Anda diperoleh dan klien kubectl terhubung ke kluster Anda.
Informasi latar belakang
Untuk informasi lebih lanjut tentang cara kerja resolusi DNS di kluster ACK, lihat Ikhtisar DNS.
Secara default, ACK menyebarkan satu set beban kerja di kluster untuk menjalankan CoreDNS. Sebuah Service bernama kube-dns disebarkan untuk mengekspos beban kerja tersebut ke permintaan DNS di kluster. Dua pod backend bernama coredns disebarkan untuk CoreDNS. Permintaan DNS di kluster dikirim ke server DNS yang ditentukan dalam konfigurasi pod coredns.
Anda dapat menjalankan perintah berikut untuk memeriksa informasi tentang Service kube-dns:
kubectl get svc kube-dns -n kube-systemAnda dapat menjalankan perintah berikut untuk memeriksa informasi tentang pod coredns:
kubectl get deployment coredns -n kube-system
Setel parameter dnsPolicy untuk mengonfigurasi kebijakan DNS untuk pod
Anda dapat menggunakan parameter dnsPolicy untuk menentukan kebijakan DNS untuk pod. Kluster ACK mendukung kebijakan DNS berikut:
ClusterFirst: Kebijakan ini menunjukkan bahwa pod menggunakan CoreDNS untuk menyelesaikan nama domain. Ini adalah kebijakan DNS default. File /etc/resolv.conf berisi alamat server DNS yang disediakan oleh CoreDNS, yaitu kube-dns.
None: Kebijakan ini menunjukkan bahwa pod mengabaikan pengaturan DNS dari kluster ACK. Anda harus menyesuaikan pengaturan DNS dengan menggunakan parameter dnsConfig. Jika tidak, pod tidak dapat menyelesaikan nama domain apa pun.
Default: Kebijakan ini menunjukkan bahwa pod mewarisi pengaturan resolusi DNS dari node tempat pod ditempatkan. Di kluster ACK, node dibuat berdasarkan instance Elastic Compute Service (ECS). Oleh karena itu, pod langsung menggunakan file /etc/resolv.conf dari node berbasis ECS tempat pod ditempatkan. File ini berisi alamat server DNS yang disediakan oleh Alibaba Cloud DNS.
ClusterFirstWithHostNet: Kebijakan ini menunjukkan bahwa pod dalam mode HostNetwork menggunakan kebijakan ClusterFirst. Jika Anda tidak menentukan kebijakan untuk pod, pod akan menggunakan kebijakan Default.
Anda dapat menggunakan kebijakan DNS di atas untuk memenuhi persyaratan bisnis dalam berbagai skenario.
Skenario 1: Gunakan CoreDNS yang disediakan oleh kluster ACK 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 menyetel dnsPolicy ke |
searches | Daftar domain pencarian DNS untuk pencarian nama host di pod. Parameter ini bersifat opsional. Daftar domain pencarian DNS akan ditambahkan ke daftar nama dasar yang dihasilkan berdasarkan kebijakan DNS yang ditentukan. Nama domain duplikat dihapus. Anda dapat menentukan hingga enam domain pencarian. Catatan Jika Server DNS tidak dapat dijangkau, hanya domain pencarian pertama yang dicoba. |
options | Daftar item opsional. Setiap item dapat berisi name (wajib) dan value (opsional). Item yang ditentukan akan ditambahkan ke daftar item opsional yang dihasilkan berdasarkan kebijakan DNS yang ditentukan. Item duplikat dihapus. Untuk informasi lebih lanjut tentang options, lihat Kebijakan resolusi dan caching DNS. |
Untuk informasi lebih lanjut, lihat DNS untuk Layanan dan Pod.
Skenario 3: Gunakan pengaturan DNS dari instance ECS
Jika pod aplikasi Anda tidak perlu mengakses Layanan lain yang diterapkan di kluster ACK, 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: DefaultSkenario 4: Aktifkan pod dalam mode HostNetwork untuk mengakses Layanan di kluster ACK
Jika Anda menentukan hostNetwork:true untuk pengaturan jaringan pod aplikasi Anda, pod aplikasi Anda dapat langsung menggunakan jaringan host. Dalam hal ini, kebijakan DNS default untuk pod adalah Default. Akibatnya, pod aplikasi Anda tidak dapat mengakses Layanan yang diterapkan di kluster ACK. Jika Anda ingin mengaktifkan pod dalam mode HostNetwork untuk mengakses Layanan yang diterapkan di kluster ACK, Anda harus menentukan dnsPolicy: ClusterFirstWithHostNet untuk pengaturan kebijakan DNS. Contoh:
apiVersion: v1
kind: Pod
metadata:
name: alpine
namespace: default
spec:
hostNetwork: true
dnsPolicy: ClusterFirstWithHostNet
containers:
- image: alpine
command:
- sleep
- "10000"
imagePullPolicy: Always
name: alpineGunakan parameter hostAliases untuk mengonfigurasi pod agar menyelesaikan nama domain ke alamat IP yang ditentukan
Anda dapat menggunakan salah satu metode berikut untuk menyelesaikan nama domain ke alamat IP tertentu:
Konfigurasi global (semua pod menyelesaikan nama domain ke alamat IP yang ditentukan): Untuk mengonfigurasi semua pod agar menyelesaikan nama domain ke alamat IP yang ditentukan, aktifkan plug-in hosts untuk CoreDNS. Untuk informasi lebih lanjut, lihat Konfigurasikan fitur tambahan berdasarkan CoreDNS.
Konfigurasi Pod Individu: Untuk mengonfigurasi pod agar menyelesaikan nama domain ke alamat IP tertentu, gunakan parameter HostAliases untuk memodifikasi file /etc/hosts dari pod. 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 file /etc/hosts yang diinisialisasi setelah Anda menambahkan parameter
hostAliaseske bagian spec dari pod:# Kubernetes-managed hosts file. 127.0.**.** localhost ::1 localhost ip6-localhost ip6-loopback fe00::0 ip6-localnet fe00::0 ip6-mcastprefix fe00::1 ip6-allnodes fe00::2 ip6-allrouters 10.200.**.** hostaliases-pod # Entri yang ditambahkan oleh HostAliases. 127.0.**.** foo.local bar.local 10.1.**.** foo.remote bar.remoteNama domain foo.local, bar.local, dan foo.remote dipetakan ke alamat IP tertentu.
Referensi
Untuk informasi lebih lanjut tentang cara mengoptimalkan pengaturan DNS, lihat Praktik Terbaik untuk Layanan DNS.
Untuk informasi lebih lanjut tentang kebijakan resolusi DNS dan kebijakan caching, lihat Kebijakan Resolusi DNS dan Kebijakan Caching.