Saat menerapkan aplikasi berbasis kontainer ke kluster, Anda perlu mengakses layanan atau antarmuka eksternal di luar layanan internal kluster. Resolusi nama domain eksternal menjadi penting dalam hal ini. Anda dapat menentukan server DNS untuk nama domain eksternal guna meningkatkan kecepatan resolusi DNS. Untuk nama domain yang dipetakan ke alamat IP statis, Anda juga bisa menambahkan pemetaan tersebut ke file hosts lokal. Topik ini menjelaskan cara mengonfigurasi pengaturan DNS untuk managed CoreDNS dengan mendefinisikan CustomResource (CR) CustomDNSConfig untuk memenuhi persyaratan tersebut.
Pengenalan parameter CoreDNS kustom
Contoh berikut menjelaskan cara mengonfigurasi parameter CoreDNS kustom.
apiVersion: networking.alibabacloud.com/v1beta1
kind: CustomDNSConfig
metadata:
name: default
namespace: default
spec:
zones:
- name: example.com
forward:
protocolStrategy: ""
transportConfig: {}
upstreams:
- xxx.xxx.xxx.xxx # Alamat IP
- xxx.xxx.xxx.xxx:53 # IP:port
hosts:
- hostName: "a.example.com"
ipAddress: xxx.xxx.xxx.xxx Zona kustom. Zona harus berupa nama domain lengkap (FQDN). Nilai default:
".".Nilai default dari parameter
.forward.protocolStrategyadalah "", yang menentukan bahwa UDP digunakan. Anda juga dapat mengatur parameter ini ketcp.Nilai default dari parameter
.forward.transportConfigadalah {}. Nilai parameter ini tidak dapat diubah.Anda dapat mengonfigurasi alamat server DNS hulu kustom menggunakan parameter
.forward.upstreamsdalam satu zona. Parameter ini dapat berformat IP atau IP:PORT dan hanya mendukung IPv4.Jika parameter
.forward.upstreamstidak ditentukan, Alibaba Cloud DNS PrivateZone akan digunakan.Anda dapat menentukan hingga 15 alamat server DNS hulu dalam parameter
.forward.upstreams.
Anda dapat mengonfigurasi plugin hosts kustom dalam satu zona dan memetakan alamat IP statis ke nama domain.
Parameter
hostNamedigunakan untuk mendefinisikan nama domain tertentu. Format nama domain harus sesuai dengan spesifikasi DNS.Parameter
ipAddressdigunakan untuk mendefinisikan alamat IP yang dipetakan ke nama domain, yang harus berupa alamat IPv4 valid.Anda dapat menggunakan parameter
hostNameuntuk mendefinisikan beberapa alamat IP (ipAddress). Contoh:... hosts: - hostName: "a.example.com" ipAddress: 10.0.0.123 - hostName: "a.example.com" ipAddress: 10.0.0.124 ...
CustomDNSConfigbukan CustomResourceDefinition (CRD) berskala namespace. Anda hanya dapat membuat CR CustomDNSConfig bernama default.
Prasyarat
Plugin managed CoreDNS terpasang. Versi plugin adalah 1.9.3.20 atau lebih baru. Untuk informasi lebih lanjut, lihat Kelola Komponen.
Klien kubectl terhubung ke kluster. Untuk informasi lebih lanjut, lihat Dapatkan File kubeconfig Kluster dan Gunakan kubectl untuk Terhubung ke Kluster.
Skenario 1: Konfigurasikan zona kustom
Buat file bernama default.yaml dan salin konten berikut ke file tersebut:
apiVersion: networking.alibabacloud.com/v1beta1 kind: CustomDNSConfig metadata: name: default spec: zones: - name: example.com forward: upstreams: - 100.100.2.136 # Tetapkan alamat server DNS hulu untuk example.com menjadi 100.100.2.136 dan 100.100.2.138. - 100.100.2.138 - name: foo.com hosts: -hostName: "a.foo.com"# Konfigurasikan alamat IP statis kustom untuk a.foo.com dan b.foo.com di zona foo.com. ipAddress: 192.168.0.251 - hostName: "b.foo.com" ipAddress: 192.168.0.252Dua zona kustom dikonfigurasi dalam file YAML:
example.com
Alamat server DNS hulu ditetapkan sebagai
100.100.2.136dan100.100.2.138.Catatan100.100.2.136dan100.100.2.138adalah alamat layanan resolusi DNS internal default yang dialokasikan oleh sistem. Untuk informasi lebih lanjut, lihat Endpoints.foo.com
Konfigurasikan alamat IP statis kustom untuk
a.foo.comdanb.foo.com.
Jalankan perintah berikut untuk membuat CR CustomDNSConfig:
kubectl apply -f default.yamlJalankan perintah berikut untuk melihat corefile yang dihasilkan:
kubectl get customdnsconfig default -o yaml |grep corefile -A 35 -B 1Output yang Diharapkan:
status: corefile: | example.com:53 { prometheus :9153 forward . 100.100.2.136 100.100.2.138 { policy random prefer_udp } ... } foo.com:53 { prometheus :9153 hosts { 192.168.0.251 a.foo.com 192.168.0.252 b.foo.com fallthrough } forward . /etc/resolv.conf { policy random prefer_udp } ... } ... -- corefileHash: 41f7be21cf3022c305091665ed33b1e5 lastTransitionTime: "2024-09-13T09:07:37Z" phase: GenerateSuccessOutput menunjukkan bahwa CR CustomDNSConfig bernama default dibuat dan
corefileyang sesuai dapat ditemukan di parameterstatus.
Skenario 2: Modifikasi konfigurasi zona default
Buat file bernama default.yaml dan salin konten berikut ke file tersebut:
apiVersion: networking.alibabacloud.com/v1beta1 kind: CustomDNSConfig metadata: name: default spec: zones: - name: . forward: upstreams: -100.100.2.136 # Alamat server DNS hulu untuk zona default kustom bernama "." adalah 100.100.2.136 dan 100.100.2.138. - 100.100.2.138Dalam file YAML, alamat server DNS hulu kustom adalah
100.100.2.136dan100.100.2.138.Jalankan perintah berikut untuk membuat CR CustomDNSConfig:
kubectl apply -f default.yamlJalankan perintah berikut untuk melihat corefile yang dihasilkan:
kubectl get customdnsconfig default -o yaml |grep corefile -A 35 -B 1Output yang Diharapkan:
status: corefile: | .:53 { errors health { lameduck 20s } ready kubeapi { kubeconfig /etc/kubernetes/config/managed-coredns.conf } k8s_event { level error warning } ... prometheus :9153 forward . 100.100.2.136 100.100.2.138 { policy random prefer_udp } ... } corefileHash: 847bf69cc4c97cee965945f45d17c661 lastTransitionTime: "2024-09-13T09:54:22Z" phase: GenerateSuccessCR CustomDNSConfig bernama default dibuat dan corefile dihasilkan.
CatatanSetelah membuat atau memodifikasi CR
CustomDNSConfig, CoreDNS perlu melakukan reload konfigurasi, yang membutuhkan waktu sekitar 20 detik. Anda dapat menyesuaikan durasi reload untuk CoreDNS dengan mengubah nilailamduckdalam parametercorefile. Nilai default adalah 20 detik.
Pemecahan Masalah
Anda hanya dapat membuat CR CustomDNSConfig bernama default. Bagian ini menjelaskan mengapa status CustomDNSConfig adalah NotSupported saat Anda membuat CR CustomDNSConfig dengan nama selain default.
Buat file bernama gotest.yaml dan salin konten berikut ke file tersebut:
apiVersion: networking.alibabacloud.com/v1beta1 kind: CustomDNSConfig metadata: name: test ## Anda hanya dapat membuat CR CustomDNSConfig bernama default. spec: zones: - name: example.com forward: upstreams: - 100.100.2.138 - name: foo.com hosts: - hostName: "ah.foo.com" ipAddress: 1.1.xx.251 - hostName: "aha.foo.com" ipAddress: 1.1.xx.252Jalankan perintah berikut untuk membuat CR CustomDNSConfig:
kubectl apply -f test.yamlJalankan perintah berikut untuk melihat corefile yang dihasilkan:
kubectl get customdnsconfigOutput yang Diharapkan:
NAME PHASE VERSION AGE default GenerateSuccess 847bf69cc4c97cee96xxxxxxxxxxx 89m test NotSupported 9sOutput menunjukkan bahwa CR CustomDNSConfig bernama test tidak dapat dibuat dan
NotSupportedditampilkan.
Informasi Event
Controller CoreDNS kustom menyinkronkan informasi event ke namespace default.
Jalankan perintah berikut untuk melihat event:
kubectl get eventsOutput yang Diharapkan:
LAST SEEN TYPE REASON OBJECT MESSAGE
45m Normal CustomDNSConfigSyncOk customdnsconfig/default custom dns config sync to coredns configmap success