Ketika beberapa kluster Container Service for Kubernetes (ACK) tersebar di berbagai wilayah atau VPC, menghubungkan semuanya ke satu instans Service Mesh (ASM) menciptakan single point of failure dan meningkatkan latensi push konfigurasi. Arsitektur lapisan kontrol multi-master mengatasi hal ini dengan memasangkan setiap kluster dengan instans ASM-nya sendiri, sambil berbagi sertifikat root yang sama di seluruh instans—sehingga memberikan manajemen konfigurasi independen, latensi lebih rendah, serta kelangsungan operasi selama gangguan zona atau wilayah.
Panduan ini memandu Anda dalam membangun lapisan kontrol multi-master dengan dua instans ASM dan dua kluster ACK.
Cara kerja
Dalam arsitektur lapisan kontrol multi-master, setiap instans ASM mengelola komponen bidang data dari kluster Kubernetes-nya sendiri dan mendorong konfigurasi ke proxy mesh dalam kluster tersebut. Karena semua instans ASM berbagi sertifikat root yang sama, proxy mesh di berbagai kluster dapat membangun kepercayaan timbal balik dan berkomunikasi melalui mTLS—memungkinkan penemuan layanan lintas kluster tanpa single point of failure.
Multi-master vs. lapisan kontrol tunggal
| Dimensi | Lapisan kontrol tunggal | Lapisan kontrol multi-master |
|---|---|---|
| Latensi push konfigurasi | Lebih tinggi ketika kluster tersebar di berbagai wilayah atau VPC | Lebih rendah—setiap kluster terhubung ke instans ASM terdekat |
| Isolasi konfigurasi | Semua kluster berbagi satu lapisan kontrol; perubahan memengaruhi setiap kluster | Setiap instans ASM mengelola sumber daya lapisan kontrolnya secara independen, mendukung rilis canary dan peningkatan batch |
| Toleransi kesalahan | Gangguan zona atau wilayah, atau kegagalan jaringan, dapat memutuskan semua kluster dari lapisan kontrol | Proxy mesh di wilayah atau zona yang sehat tetap menerima push konfigurasi dan memulai secara normal |
Sertifikat root bersama
Lapisan kontrol menggunakan sertifikat root untuk menerbitkan sertifikat otentikasi identitas kepada proxy mesh. Dalam arsitektur multi-master, semua instans ASM menggunakan kembali sertifikat root yang sama sehingga proxy mesh yang terhubung ke instans berbeda dapat saling mengotentikasi dan berkomunikasi melalui mTLS.
Prasyarat
Sebelum memulai, pastikan Anda telah memiliki:
Dua kluster ACK yang dikelola, bernama cluster-1 dan cluster-2, dengan opsi Use EIP to Expose API Server diaktifkan saat pembuatan. Untuk informasi lebih lanjut, lihat Create an ACK managed cluster.
Langkah 1: Buat dua instans ASM yang berbagi sertifikat root
Buat dua instans ASM—satu untuk setiap kluster—dan konfigurasikan instans kedua agar menggunakan kembali sertifikat root dari instans pertama.
Buat instans ASM pertama (mesh-1)
Masuk ke Konsol ASM. Di panel navigasi sebelah kiri, pilih Service Mesh > Mesh Management.
Pada halaman Mesh Management, klik Create ASM Instance. Konfigurasikan parameter berikut: VPC dan vSwitch akan ditambahkan secara otomatis ke instans ASM setelah pembuatan. Untuk detail konfigurasi lainnya, lihat Create an ASM instance.
Parameter Nilai Nama service mesh mesh-1 Wilayah Wilayah tempat cluster-1 berada Versi Istio v1.22.6.71-g7d67a80b-aliyun atau yang lebih baru Kluster Kubernetes cluster-1 Tunggu 2–3 menit hingga status instans berubah menjadi Running.
Buat instans ASM kedua (mesh-2) dengan sertifikat root bersama
Kembali ke halaman Mesh Management dan klik Create ASM Instance. Konfigurasikan parameter berikut: Semua opsi konfigurasi lainnya sama seperti pada mesh-1.
Parameter Nilai Nama service mesh mesh-2 Wilayah Wilayah tempat cluster-2 berada Versi Istio v1.22.6.71-g7d67a80b-aliyun atau yang lebih baru Kluster Kubernetes cluster-2 Sertifikat Root ASM Klik Show Advanced Settings, pilih Reuse an Existing Root Certificate of ASM Instance, lalu pilih mesh-1 dari daftar drop-down Tunggu 2–3 menit hingga status instans berubah menjadi Running.
Langkah 2: Aktifkan penemuan layanan lintas kluster
Setelah Langkah 1, mesh-1 mengelola cluster-1 dan mesh-2 mengelola cluster-2. Untuk mengaktifkan penemuan layanan lintas kluster, tambahkan masing-masing kluster ke instans mesh lainnya dalam mode hanya penemuan layanan:
Tambahkan cluster-2 ke mesh-1 (hanya untuk penemuan layanan)
Tambahkan cluster-1 ke mesh-2 (hanya untuk penemuan layanan)
Tambahkan cluster-2 ke mesh-1
Masuk ke Konsol ASM. Di panel navigasi sebelah kiri, pilih Service Mesh > Mesh Management.
Pada halaman Mesh Management, klik nama mesh-1. Di panel navigasi sebelah kiri, pilih Cluster & Workload Management > Kubernetes Clusters, lalu klik Add.
Pada halaman Add Kubernetes Cluster, temukan cluster-2, lalu klik Add (For Service Discovery Only) di kolom Actions. Pada kotak dialog yang muncul, klik OK.
Setelah kluster ditambahkan, status instans berubah menjadi Updating. Tunggu beberapa detik lalu klik ikon refresh di pojok kanan atas. Status akan kembali menjadi Running.

Tambahkan cluster-1 ke mesh-2
Pada halaman Mesh Management, klik nama mesh-2. Di panel navigasi sebelah kiri, pilih Cluster & Workload Management > Kubernetes Clusters, lalu klik Add.
Pada halaman Add Kubernetes Cluster, temukan cluster-1, lalu klik Add (For Service Discovery Only) di kolom Actions. Pada kotak dialog yang muncul, klik OK.
Tunggu hingga status instans kembali menjadi Running. Waktu tunggu tergantung pada jumlah kluster yang ditambahkan.

Ketika sebuah kluster ditambahkan dalam mode penemuan layanan, instans ASM hanya menemukan layanan dan titik akhir layanan di kluster tersebut. Instans tidak men-deploy komponen bidang data apa pun ke kluster tersebut, dan perubahan pada instans ASM tidak memengaruhi kluster yang ditambahkan dengan cara ini. Opsi For Service Discovery Only hanya berlaku untuk arsitektur lapisan kontrol multi-master. Untuk mengelola kluster sepenuhnya dengan instans ASM, tambahkan kluster tersebut secara normal. Untuk informasi lebih lanjut, lihat Add a cluster to an ASM instance.
Langkah 3 (opsional): Konfigurasikan komunikasi lintas jaringan
Lewati langkah ini jika cluster-1 dan cluster-2 berada dalam VPC yang sama atau sudah terhubung melalui Cloud Enterprise Network (CEN).
Jika kedua kluster ACK dideploy di VPC atau wilayah berbeda tanpa koneksi CEN, konfigurasikan jaringan multi-kluster antara kedua instans ASM dan deploy proxy mesh lintas kluster untuk kedua kluster tersebut. Hal ini memungkinkan layanan di kluster berbeda saling mengakses melalui proxy mesh.
Untuk informasi selengkapnya, lihat Menggunakan proksi mesh ASM lintas-kluster untuk menerapkan komunikasi lintas-jaringan di antara beberapa kluster.
Konfigurasikan jaringan multi-kluster di mesh-1
Pada halaman Mesh Management, klik nama mesh-1. Di panel navigasi sebelah kiri, pilih Cluster & Workload Management > Kubernetes Clusters.
Klik Multi-cluster Network Configurations dan konfigurasikan pengaturan berikut:
Atur Homing Logical Network Name menjadi
network1untuk cluster-1, dan aktifkan Enable Access Through Cross-cluster Mesh Proxy.Atur Homing Logical Network Name menjadi
network2untuk cluster-2.

Konfigurasikan jaringan multi-kluster di mesh-2
Pada halaman Mesh Management, klik nama mesh-2. Di panel navigasi sebelah kiri, pilih Cluster & Workload Management > Kubernetes Clusters.
Klik Multi-cluster Network Configurations dan konfigurasikan pengaturan berikut:
Atur Homing Logical Network Name menjadi
network2untuk cluster-2, dan aktifkan Enable Access Through Cross-cluster Mesh Proxy.Atur Homing Logical Network Name menjadi
network1untuk cluster-1.

Langkah 4: Deploy aplikasi contoh
Untuk memverifikasi komunikasi lintas kluster, deploy aplikasi contoh berikut:
cluster-1: aplikasi client
sleepdan layananhelloworldV1cluster-2: layanan
helloworldV2
Aktifkan injeksi sidecar
Aktifkan injeksi otomatis sidecar untuk namespace default di mesh-1 dan mesh-2. Untuk informasi lebih lanjut, lihat Manage global namespaces.
Verifikasi akses layanan lintas kluster
Kirim permintaan dari cluster-1
Dari cluster-1, Pod sleep mengirim 10 permintaan ke layanan helloworld. Jalankan perintah berikut menggunakan file kubeconfig cluster-1:
kubectl exec -it deploy/sleep -- sh -c 'for i in $(seq 1 10); do curl helloworld:5000/hello; done;'Output yang diharapkan:
Hello version: v1, instance: helloworld-v1-7b888xxxxx-xxxxx
Hello version: v1, instance: helloworld-v1-7b888xxxxx-xxxxx
Hello version: v2, instance: helloworld-v2-7b949xxxxx-xxxxx
Hello version: v2, instance: helloworld-v2-7b949xxxxx-xxxxx
Hello version: v1, instance: helloworld-v1-7b888xxxxx-xxxxx
Hello version: v2, instance: helloworld-v2-7b949xxxxx-xxxxx
Hello version: v2, instance: helloworld-v2-7b949xxxxx-xxxxx
Hello version: v2, instance: helloworld-v2-7b949xxxxx-xxxxx
Hello version: v2, instance: helloworld-v2-7b949xxxxx-xxxxx
Hello version: v1, instance: helloworld-v1-7b888xxxxx-xxxxxRespons bergantian antara V1 (cluster-1) dan V2 (cluster-2), yang mengonfirmasi bahwa penemuan layanan dan routing lintas kluster berfungsi.
Kirim permintaan dari cluster-2
Skalakan deployment
sleepdi cluster-1 menjadi 0 replika:kubectl scale deploy sleep --replicas=0Deploy aplikasi
sleepdi cluster-2 menggunakan YAML berikut: Untuk informasi lebih lanjut, lihat Create a stateless application by using a Deployment.apiVersion: v1 kind: ServiceAccount metadata: name: sleep --- apiVersion: v1 kind: Service metadata: name: sleep labels: app: sleep service: sleep spec: ports: - port: 80 name: http selector: app: sleep --- apiVersion: apps/v1 kind: Deployment metadata: name: sleep spec: replicas: 1 selector: matchLabels: app: sleep template: metadata: labels: app: sleep spec: terminationGracePeriodSeconds: 0 serviceAccountName: sleep containers: - name: sleep image: registry.cn-hangzhou.aliyuncs.com/acs/curl:8.1.2 command: ["/bin/sleep", "infinity"] imagePullPolicy: IfNotPresentJalankan perintah berikut menggunakan file kubeconfig cluster-2:
kubectl exec -it deploy/sleep -- sh -c 'for i in $(seq 1 10); do curl helloworld:5000/hello; done;'Output yang diharapkan:
Hello version: v1, instance: helloworld-v1-7b888xxxxx-xxxxx Hello version: v2, instance: helloworld-v2-7b949xxxxx-xxxxx Hello version: v2, instance: helloworld-v2-7b949xxxxx-xxxxx Hello version: v2, instance: helloworld-v2-7b949xxxxx-xxxxx Hello version: v2, instance: helloworld-v2-7b949xxxxx-xxxxx Hello version: v1, instance: helloworld-v1-7b888xxxxx-xxxxx Hello version: v2, instance: helloworld-v2-7b949xxxxx-xxxxx Hello version: v1, instance: helloworld-v1-7b888xxxxx-xxxxx Hello version: v2, instance: helloworld-v2-7b949xxxxx-xxxxx Hello version: v2, instance: helloworld-v2-7b949xxxxx-xxxxxRespons kembali bergantian antara V1 dan V2, yang mengonfirmasi akses lintas kluster dua arah.