Node virtual ACK mendukung service discovery berdasarkan Alibaba Cloud DNS PrivateZone. Fitur ini menyinkronkan record DNS dari Service tipe Headless, ClusterIP, dan LoadBalancer internal ke PrivateZone. Topik ini menjelaskan cara mengaktifkan PrivateZone dan menyinkronkan record DNS Service yang terikat ke Pod ECI ke PrivateZone, sehingga Anda dapat mengakses Service tersebut menggunakan nama domain.
Gambaran umum
Alibaba Cloud DNS PrivateZone (resolusi DNS internal) merupakan layanan resolusi DNS komprehensif untuk skenario intranet perusahaan, terutama di lingkungan VPC Alibaba Cloud. Layanan ini menyediakan resolusi nama domain dan akselerasi nama domain internal bagi berbagai client (seperti instans ECS dan kontainer) dalam jaringan intranet VPC. Penggunaan PrivateZone dikenai biaya. Untuk informasi selengkapnya, lihat Penagihan.
Prasyarat
Komponen ack-virtual-node telah diinstal di kluster. Untuk informasi selengkapnya, lihat Men-deploy komponen ack-virtual-node.
Fitur ini tidak dapat digunakan bersamaan dengan CoreDNS. Pastikan komponen CoreDNS tidak diinstal di kluster.
PrivateZone telah diaktifkan di Konsol DNS Alibaba Cloud.
Mengaktifkan PrivateZone
Ubah konfigurasi eci-profile untuk mengaktifkan PrivateZone.
Masuk ke Konsol ACK. Di panel navigasi sebelah kiri, klik Clusters.
Pada halaman Clusters, klik nama kluster yang ingin Anda ubah. Di panel navigasi sebelah kiri, pilih .
Pilih Namespace sebagai kube-system, temukan eci-profile, lalu klik Edit.
Ubah nilai
enablePrivateZonemenjaditrue, lalu klik OK.
Konfirmasi bahwa PrivateZone telah diaktifkan.
Di panel navigasi sebelah kiri Konsol DNS Alibaba Cloud, klik Private Zone.
Pada tab Custom Domain Names, di bagian Built-in Authority, verifikasi bahwa zona bernama Svc.cluster.local.<cluster ID> telah dibuat.
Menyinkronkan record DNS Service ke PrivateZone
Buat Deployment dan Service untuk pengujian.
Simpan konten YAML berikut sebagai test-pz.yaml.
YAML berikut membuat satu Deployment dan tiga Service dengan tipe Headless, ClusterIP, dan LoadBalancer.
PentingSecara default, record DNS Service tidak disinkronkan ke PrivateZone. Setelah Anda menambahkan anotasi
service.beta.kubernetes.io/alibaba-cloud-private-zone-enable: "true"ke suatu Service, controller node virtual akan menyinkronkan record DNS Service tersebut ke PrivateZone.apiVersion: v1 kind: Service metadata: name: nginx-headless-service annotations: service.beta.kubernetes.io/alibaba-cloud-private-zone-enable: "true" spec: ports: - port: 80 protocol: TCP selector: app: nginx clusterIP: None --- apiVersion: v1 kind: Service metadata: name: nginx-clusterip-service annotations: service.beta.kubernetes.io/alibaba-cloud-private-zone-enable: "true" spec: ports: - port: 80 protocol: TCP selector: app: nginx type: ClusterIP --- apiVersion: v1 kind: Service metadata: name: nginx-intranet-service annotations: service.beta.kubernetes.io/alibaba-cloud-loadbalancer-address-type: "intranet" service.beta.kubernetes.io/alibaba-cloud-private-zone-enable: "true" spec: ports: - port: 80 protocol: TCP selector: app: nginx type: LoadBalancer --- apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment labels: app: nginx spec: replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: app: nginx alibabacloud.com/eci: "true" # Tambahkan label khusus untuk menjadwalkan pod ke ECI spec: containers: - name: nginx image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6 ports: - containerPort: 80Buat Deployment dan Service tersebut.
kubectl create -f test-pz.yaml
Konfirmasi bahwa record DNS Service telah disinkronkan ke PrivateZone.
Di panel navigasi sebelah kiri Konsol DNS Alibaba Cloud, klik Private Zone.
Pada tab Custom Domain Names, di bagian Built-in Authority, temukan zona bernama Svc.cluster.local.<cluster ID>, lalu klik Resolution Settings.
Pada tab DNS Records, Anda dapat melihat bahwa record DNS Service telah disinkronkan secara otomatis.
Format record DNS di zona tersebut merupakan
<service-name>.<namespace>, yang sesuai dengan resolusi IP masing-masing. Aturan resolusinya sebagai berikut:Headless Service: sesuai dengan beberapa record DNS, masing-masing merepresentasikan alamat IP dari sebuah Pod backend.
ClusterIP Service: sesuai dengan satu record DNS untuk Cluster IP (alamat IP virtual yang ditetapkan oleh kluster untuk komunikasi internal).
LoadBalancer Service: sesuai dengan satu record DNS untuk Cluster IP (alamat IP virtual yang ditetapkan oleh kluster untuk komunikasi internal).

Setelah sinkronisasi, Anda dapat mengakses Service melalui nama domain private di lingkungan VPC.
Akses nama domain pendek: Di dalam kluster, akses Service di namespace yang sama menggunakan
<service-name>, atau akses Service di namespace lain menggunakan<service-name>.<namespace>.Akses nama domain panjang: Di luar kluster, akses Service menggunakan
<service-name>.<namespace>.svc.cluster.local.<clusterId>. Ini hanya berlaku untuk Headless Service.