CoreDNS adalah Domain Name System (DNS) server default untuk kluster Alibaba Cloud Container Compute Service (ACS). CoreDNS merupakan server DNS yang efisien dan menyediakan penemuan layanan untuk kluster Kubernetes. Instal dan operasikan CoreDNS yang tidak dikelola untuk mengonfigurasi fitur CoreDNS kustom. Topik ini menjelaskan cara mengonfigurasi CoreDNS yang tidak dikelola dalam kluster ACS pada berbagai skenario.
Skenario
Topik ini hanya berlaku untuk CoreDNS yang tidak dikelola. CoreDNS yang dikelola tidak dapat dikonfigurasi secara manual dan konfigurasinya tidak terlihat oleh pengguna. Untuk informasi selengkapnya tentang penggunaan CoreDNS yang dikelola, lihat Kebijakan DNS dan resolusi nama domain. Untuk menginstal CoreDNS yang tidak dikelola, lihat Gunakan CoreDNS yang tidak dikelola dalam kluster ACS.
Dalam topik ini, digunakan contoh pod yang memanfaatkan CoreDNS untuk resolusi DNS dengan kebijakan DNS dnsPolicy: ClusterFirst. Contoh:
apiVersion: v1
kind: Pod
metadata:
name: alinux3
namespace: default
spec:
containers:
- image: alibaba-cloud-linux-3-registry.cn-hangzhou.cr.aliyuncs.com/alinux3/alinux3
command:
- sleep
- "10000"
imagePullPolicy: Always
name: alinux3
dnsPolicy: ClusterFirstUntuk informasi lebih lanjut tentang cara mengonfigurasi parameter dnsPolicy dalam berbagai skenario, lihat Konfigurasi resolusi DNS.
Konfigurasi default CoreDNS
Di namespace kube-system kluster ACS, Anda dapat menemukan ConfigMap CoreDNS. CoreDNS mengonfigurasi dan mengaktifkan plugin yang ditentukan dalam ConfigMap tersebut. ConfigMap untuk setiap versi CoreDNS sedikit berbeda. Sebelum mengubah konfigurasi, baca dokumentasi resmi CoreDNS. File konfigurasi default yang digunakan oleh CoreDNS 1.6.2 adalah sebagai berikut:
Corefile: |
.:53 {
errors
log
health {
lameduck 15s
}
ready
kubernetes {{.ClusterDomain}} in-addr.arpa ip6.arpa {
pods verified
fallthrough in-addr.arpa ip6.arpa
}
prometheus :9153
forward . /etc/resolv.conf {
prefer_udp
}
cache 30
loop
reload
loadbalance
}Ganti ClusterDomain dengan nama domain kluster yang Anda tentukan saat membuat kluster. Nama domain kluster default: cluster.local.
Parameter | Deskripsi |
| Menampilkan pesan error ke output standar. |
| Memberikan status kesehatan CoreDNS. Port listener default adalah 8080 dan biasanya digunakan untuk Pemeriksaan kesehatan. Ambil status kesehatan dari |
| Memberikan status kesiapan plugin CoreDNS. Port listener default adalah 8181 dan biasanya digunakan untuk pemeriksaan kesiapan. Ambil status kesiapan dari |
| Menyediakan resolusi layanan untuk layanan di dalam kluster Kubernetes. |
| Menyediakan titik akhir untuk metrik CoreDNS. Ambil data Pemantauan dalam format Prometheus dari |
| Meneruskan kueri nama domain ke server DNS yang telah ditentukan. Secara default, jika nama domain tidak termasuk dalam domain Kubernetes, kueri akan diteruskan ke resolver di |
| Cache DNS. |
| Mendeteksi loop penerusan. Jika loop terdeteksi, CoreDNS akan berhenti. |
| Secara otomatis memuat ulang Corefile ketika ada perubahan. Setelah ConfigMap terkait diedit, perubahan akan berlaku dalam waktu 2 menit. |
| Mengaktifkan load balancing DNS dengan mengacak urutan rekaman A, AAAA, dan MX dalam tanggapan. |
Konfigurasi fitur tambahan berdasarkan CoreDNS
Konfigurasikan fitur tambahan berdasarkan CoreDNS dalam skenario berikut:
Skenario 1: Aktifkan Simple Log Service
Untuk mengumpulkan log semua catatan resolusi DNS yang dilakukan oleh CoreDNS, aktifkan plugin log dengan menambahkan parameter
logke Corefile. Contoh:Corefile: | .:53 { errors log health { lameduck 15s } ready kubernetes cluster.local in-addr.arpa ip6.arpa { pods insecure fallthrough in-addr.arpa ip6.arpa ttl 30 } prometheus :9153 forward . /etc/resolv.conf { prefer_udp } cache 30 loop reload loadbalance }Skenario 2: Sesuaikan server DNS untuk nama domain tertentu
Jika nama domain dengan akhiran
example.comperlu diselesaikan oleh server DNS yang ditentukan pengguna, seperti server DNS 10.10.0.10, tambahkan pengaturan resolusi kustom untuk nama domain tersebut. Contoh:example.com:53 { errors cache 30 forward . 10.10.0.10 { prefer_udp } }Konfigurasi:
Corefile: | .:53 { errors health { lameduck 15s } ready kubernetes cluster.local in-addr.arpa ip6.arpa { pods insecure fallthrough in-addr.arpa ip6.arpa ttl 30 } prometheus :9153 forward . /etc/resolv.conf { prefer_udp } cache 30 loop reload loadbalance } example.com:53 { errors cache 30 forward . 10.10.0.10 { prefer_udp } }Skenario 3: Sesuaikan server DNS untuk nama domain eksternal
Jika nama domain yang perlu diselesaikan oleh server DNS yang ditentukan pengguna tidak memiliki akhiran yang sama, gunakan server DNS tersebut untuk melakukan resolusi DNS terhadap semua nama domain eksternal.
Sebagai contoh, jika alamat IP server DNS yang ditentukan pengguna adalah 10.10.0.10 dan 10.10.0.20, ubah parameter
forward. Contoh:Corefile: | .:53 { errors health { lameduck 15s } ready kubernetes cluster.local in-addr.arpa ip6.arpa { pods insecure fallthrough in-addr.arpa ip6.arpa ttl 30 } prometheus :9153 forward . 10.10.0.10 10.10.0.20 { prefer_udp } cache 30 loop reload loadbalance }Skenario 4: Sesuaikan host untuk nama domain tertentu
Konfigurasikan plugin hosts untuk menentukan alamat IP statis bagi nama domain tertentu, misalnya mengarahkan
www.example.comke 127.0.0.1. Metode ini memiliki efek yang sama seperti file /etc/hosts. Contoh:Corefile: | .:53 { errors health { lameduck 15s } ready hosts { 127.0.0.1 www.example.com fallthrough } kubernetes cluster.local in-addr.arpa ip6.arpa { pods insecure fallthrough in-addr.arpa ip6.arpa ttl 30 } prometheus :9153 forward . /etc/resolv.conf { prefer_udp } cache 30 loop reload loadbalance }PentingAnda harus menentukan parameter
fallthroughdalam hosts. Jika tidak, nama domain yang tidak ditentukan mungkin gagal diselesaikan.Skenario 5: Aktifkan akses eksternal ke layanan dalam kluster ACK
Untuk memungkinkan proses pada Instance ECS dalam kluster ACK mengakses layanan di dalam kluster tersebut, tetapkan alamat IP kluster kube-dns sebagai nilai parameter
nameserverdalam file/etc/resolv.confpada Instance ECS tersebut. Jangan ubah pengaturan lain dalam file/etc/resolv.conf.Dalam jaringan internal, gunakan Instance Classic Load Balancer (CLB) akses internal untuk memungkinkan akses internal ke layanan dalam kluster ACS. Kemudian, login ke Konsol Alibaba Cloud DNS PrivateZone dan tambahkan Rekaman A yang mengarah ke Alamat IP pribadi Instance CLB tersebut.
Skenario 6: Gunakan nama domain untuk mengizinkan akses ke layanan Anda dalam kluster ACK atau aktifkan resolusi CNAME untuk kluster ACK
Gunakan
foo.example.comuntuk mengizinkan akses ke layanan Anda dalam kluster ACK dari Internet, jaringan internal, maupun dari dalam kluster ACK itu sendiri. Bagian berikut menjelaskan cara mengaktifkan fitur ini:Layanan Anda
foo.default.svc.cluster.localdiekspos ke akses eksternal menggunakan Instance CLB akses Internet. Nama domainfoo.example.comdiselesaikan ke alamat IP Instance CLB akses Internet tersebut.Layanan Anda
foo.default.svc.cluster.localdiekspos ke akses internal menggunakan Instance CLB akses internal. Login ke Konsol Alibaba Cloud DNS PrivateZone untuk mengarahkanfoo.example.comke alamat IP Instance CLB akses internal dalam virtual private cloud (VPC) tempat kluster ACK ditempatkan. Lihat Konfigurasi CoreDNS yang tidak dikelola.Gunakan plugin rewrite dalam kluster ACK untuk menambahkan Rekaman CNAME yang mengarahkan
foo.example.comkefoo.default.svc.cluster.local. Contoh:Corefile: | .:53 { errors health { lameduck 15s } ready rewrite stop { name exact foo.example.com foo.default.svc.cluster.local answer name foo.default.svc.cluster.local foo.example.com } kubernetes cluster.local in-addr.arpa ip6.arpa { pods insecure fallthrough in-addr.arpa ip6.arpa ttl 30 } prometheus :9153 forward . /etc/resolv.conf { prefer_udp } cache 30 loop reload loadbalance }
Skenario 7: Konfigurasikan CoreDNS untuk tidak mengembalikan alamat IPv6 yang diselesaikan berdasarkan rekaman AAAA
Jika Pod aplikasi Anda tidak memerlukan hasil resolusi berdasarkan Rekaman AAAA, konfigurasikan CoreDNS untuk mencegat hasil resolusi tersebut dan mengembalikan kode NODATA guna meminimalkan transfer data. Contoh:
Corefile: | .:53 { errors health { lameduck 15s } # Tambahkan baris berikut untuk mengaktifkan plugin template. Jangan modifikasi pengaturan lain. template IN AAAA . }