All Products
Search
Document Center

Alibaba Cloud Service Mesh:Pemulihan bencana multi-kluster dengan lapisan kontrol multi-master ASM

Last Updated:Mar 12, 2026

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.

Architecture diagram

Multi-master vs. lapisan kontrol tunggal

DimensiLapisan kontrol tunggalLapisan kontrol multi-master
Latensi push konfigurasiLebih tinggi ketika kluster tersebar di berbagai wilayah atau VPCLebih rendah—setiap kluster terhubung ke instans ASM terdekat
Isolasi konfigurasiSemua kluster berbagi satu lapisan kontrol; perubahan memengaruhi setiap klusterSetiap instans ASM mengelola sumber daya lapisan kontrolnya secara independen, mendukung rilis canary dan peningkatan batch
Toleransi kesalahanGangguan zona atau wilayah, atau kegagalan jaringan, dapat memutuskan semua kluster dari lapisan kontrolProxy 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)

  1. Masuk ke Konsol ASM. Di panel navigasi sebelah kiri, pilih Service Mesh > Mesh Management.

  2. 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.

    ParameterNilai
    Nama service meshmesh-1
    WilayahWilayah tempat cluster-1 berada
    Versi Istiov1.22.6.71-g7d67a80b-aliyun atau yang lebih baru
    Kluster Kubernetescluster-1
  3. Tunggu 2–3 menit hingga status instans berubah menjadi Running.

Buat instans ASM kedua (mesh-2) dengan sertifikat root bersama

  1. Kembali ke halaman Mesh Management dan klik Create ASM Instance. Konfigurasikan parameter berikut: Semua opsi konfigurasi lainnya sama seperti pada mesh-1.

    ParameterNilai
    Nama service meshmesh-2
    WilayahWilayah tempat cluster-2 berada
    Versi Istiov1.22.6.71-g7d67a80b-aliyun atau yang lebih baru
    Kluster Kubernetescluster-2
    Sertifikat Root ASMKlik Show Advanced Settings, pilih Reuse an Existing Root Certificate of ASM Instance, lalu pilih mesh-1 dari daftar drop-down
  2. 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

  1. Masuk ke Konsol ASM. Di panel navigasi sebelah kiri, pilih Service Mesh > Mesh Management.

  2. Pada halaman Mesh Management, klik nama mesh-1. Di panel navigasi sebelah kiri, pilih Cluster & Workload Management > Kubernetes Clusters, lalu klik Add.

  3. 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.

  4. Setelah kluster ditambahkan, status instans berubah menjadi Updating. Tunggu beberapa detik lalu klik ikon refresh di pojok kanan atas. Status akan kembali menjadi Running.

Kubernetes Clusters page for mesh-1

Tambahkan cluster-1 ke mesh-2

  1. Pada halaman Mesh Management, klik nama mesh-2. Di panel navigasi sebelah kiri, pilih Cluster & Workload Management > Kubernetes Clusters, lalu klik Add.

  2. 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.

  3. Tunggu hingga status instans kembali menjadi Running. Waktu tunggu tergantung pada jumlah kluster yang ditambahkan.

Kubernetes Clusters page for mesh-2
Penting

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

Catatan

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

  1. Pada halaman Mesh Management, klik nama mesh-1. Di panel navigasi sebelah kiri, pilih Cluster & Workload Management > Kubernetes Clusters.

  2. Klik Multi-cluster Network Configurations dan konfigurasikan pengaturan berikut:

    • Atur Homing Logical Network Name menjadi network1 untuk cluster-1, dan aktifkan Enable Access Through Cross-cluster Mesh Proxy.

    • Atur Homing Logical Network Name menjadi network2 untuk cluster-2.

Multi-cluster network configuration for mesh-1

Konfigurasikan jaringan multi-kluster di mesh-2

  1. Pada halaman Mesh Management, klik nama mesh-2. Di panel navigasi sebelah kiri, pilih Cluster & Workload Management > Kubernetes Clusters.

  2. Klik Multi-cluster Network Configurations dan konfigurasikan pengaturan berikut:

    • Atur Homing Logical Network Name menjadi network2 untuk cluster-2, dan aktifkan Enable Access Through Cross-cluster Mesh Proxy.

    • Atur Homing Logical Network Name menjadi network1 untuk cluster-1.

Multi-cluster network configuration for mesh-2

Langkah 4: Deploy aplikasi contoh

Untuk memverifikasi komunikasi lintas kluster, deploy aplikasi contoh berikut:

  • cluster-1: aplikasi client sleep dan layanan helloworld V1

  • cluster-2: layanan helloworld V2

Sample application architecture

Aktifkan injeksi sidecar

Aktifkan injeksi otomatis sidecar untuk namespace default di mesh-1 dan mesh-2. Untuk informasi lebih lanjut, lihat Manage global namespaces.

Deploy sleep dan helloworld V1 ke cluster-1

Simpan konten YAML berikut ke file dan deploy ke cluster-1:

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: IfNotPresent
        volumeMounts:
        - mountPath: /etc/sleep/tls
          name: secret-volume
      volumes:
      - name: secret-volume
        secret:
          secretName: sleep-secret
          optional: true
---
apiVersion: v1
kind: Service
metadata:
  name: helloworld
  labels:
    app: helloworld
spec:
  ports:
  - port: 5000
    name: http
  selector:
    app: helloworld
---
apiVersion: v1
kind: ServiceAccount
metadata:
  name: helloworld
  labels:
    account: helloworld
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: helloworld-v1
  labels:
    apps: helloworld
    version: v1
spec:
  replicas: 1
  selector:
    matchLabels:
      app: helloworld
      version: v1
  template:
    metadata:
      labels:
        app: helloworld
        version: v1
    spec:
      serviceAccount: helloworld
      serviceAccountName: helloworld
      containers:
      - name: helloworld
        image: registry-cn-hangzhou.ack.aliyuncs.com/ack-demo/examples-helloworld-v1:1.0
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 5000

Deploy helloworld V2 ke cluster-2

Simpan konten YAML berikut ke file dan deploy ke cluster-2:

apiVersion: v1
kind: Service
metadata:
  name: helloworld
  labels:
    app: helloworld
spec:
  ports:
  - port: 5000
    name: http
  selector:
    app: helloworld
---
apiVersion: v1
kind: ServiceAccount
metadata:
  name: helloworld
  labels:
    account: helloworld
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: helloworld-v2
  labels:
    apps: helloworld
    version: v2
spec:
  replicas: 1
  selector:
    matchLabels:
      app: helloworld
      version: v2
  template:
    metadata:
      labels:
        app: helloworld
        version: v2
    spec:
      serviceAccount: helloworld
      serviceAccountName: helloworld
      containers:
      - name: helloworld
        image: registry-cn-hangzhou.ack.aliyuncs.com/ack-demo/examples-helloworld-v2:1.0
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 5000

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-xxxxx

Respons bergantian antara V1 (cluster-1) dan V2 (cluster-2), yang mengonfirmasi bahwa penemuan layanan dan routing lintas kluster berfungsi.

Kirim permintaan dari cluster-2

  1. Skalakan deployment sleep di cluster-1 menjadi 0 replika:

    kubectl scale deploy sleep --replicas=0
  2. Deploy aplikasi sleep di 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: IfNotPresent
  3. Jalankan 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-xxxxx

    Respons kembali bergantian antara V1 dan V2, yang mengonfirmasi akses lintas kluster dua arah.

Langkah selanjutnya