All Products
Search
Document Center

Alibaba Cloud Service Mesh:Siapkan pemulihan bencana multi-kluster dengan arsitektur multi-master ASM

Last Updated:Jun 21, 2026

Service Mesh (ASM) mendukung arsitektur lapisan kontrol multi-master, di mana beberapa instans ASM mengelola beberapa kluster Kubernetes. Dibandingkan dengan menambahkan beberapa kluster ke satu instans ASM, arsitektur ini menyediakan isolasi konfigurasi yang lebih baik dan latensi pengiriman konfigurasi yang lebih rendah. Arsitektur ini ideal untuk membangun solusi pemulihan bencana multi-kluster dengan penerapan layanan peer-to-peer. Topik ini menjelaskan cara membangun arsitektur lapisan kontrol multi-master menggunakan dua instans ASM dan dua kluster ACK.

Latar Belakang

Arsitektur lapisan kontrol multi-master adalah model untuk mengelola beberapa kluster Kubernetes menggunakan service mesh. Dalam arsitektur ini, setiap instans Service Mesh (ASM) mengelola komponen bidang data dari kluster Kubernetes yang sesuai dan mendistribusikan konfigurasi ke proxy mesh dalam kluster tersebut. Dengan berbagi sertifikat root yang sama, instans-instans ini memungkinkan penemuan layanan lintas kluster dan komunikasi antarlayanan.

Dibandingkan dengan menambahkan beberapa kluster ke satu instans ASM, arsitektur lapisan kontrol multi-master menawarkan keunggulan berikut:

  • Latensi pengiriman konfigurasi lebih rendah: Beberapa kluster sering kali mencakup wilayah, zona, atau VPC yang berbeda. Dalam skenario ini, penggunaan beberapa instans ASM yang secara geografis lebih dekat dengan kluster Kubernetes masing-masing memberikan pengiriman konfigurasi yang lebih cepat ke proxy mesh.

  • Isolasi konfigurasi dan lingkungan yang lebih baik: Setiap kluster dikelola oleh instans ASM terpisah. Hal ini memungkinkan Anda menerapkan sumber daya lapisan kontrol yang berbeda, sehingga mendukung rilis canary atau isolasi untuk konfigurasi dan versi. Saat melakukan upgrade instans ASM, Anda dapat memperbarui lapisan kontrol secara bertahap, yang meningkatkan ketersediaan lingkungan produksi Anda.

  • Stabilitas lebih tinggi: Dalam skenario ekstrem, seperti gangguan pada suatu zona atau wilayah, satu lapisan kontrol yang terhubung ke semua kluster dapat menjadi titik kegagalan tunggal, sehingga mencegah sinkronisasi konfigurasi. Dalam arsitektur lapisan kontrol multi-master, proxy mesh di wilayah atau zona yang sehat masih dapat terhubung ke lapisan kontrol lokalnya, memastikan bahwa pengiriman konfigurasi dan startup proxy mesh tidak terpengaruh.

Untuk membangun arsitektur lapisan kontrol multi-master, Anda harus membuat beberapa instans ASM yang berbagi sertifikat root ASM yang sama. Lapisan kontrol menggunakan sertifikat root ini untuk menandatangani sertifikat identitas bagi proxy mesh. Dengan menggunakan sertifikat root bersama, proxy mesh yang terhubung ke instans ASM berbeda dapat membangun kepercayaan timbal balik dan berkomunikasi satu sama lain menggunakan mTLS.

Prasyarat

Diperlukan dua kluster ACK yang dikelola, bernama cluster-1 dan cluster-2. Kedua kluster harus memiliki opsi Expose API server with EIP diaktifkan. Untuk informasi selengkapnya, lihat Create an ACK managed cluster.

Langkah 1: Buat dua instans ASM dengan sertifikat root bersama

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

  2. Pada halaman Mesh Management, klik Create ASM Instance. Tabel berikut menjelaskan parameter utama.

    Parameter

    Nilai

    Service mesh name

    mesh-1.

    Region

    Pilih wilayah yang sama dengan kluster cluster-1.

    Istio version

    Pilih v1.22.6.71-g7d67a80b-aliyun atau versi yang lebih baru.

    Kubernetes clusters

    Pilih cluster-1. Parameter VPC dan vSwitch akan terisi otomatis.

    Untuk informasi lebih lanjut tentang parameter lainnya, lihat Create an ASM instance. Setelah instans dibuat, tunggu 2 hingga 3 menit hingga status instans mesh-1 berubah menjadi Running.

  3. Pada halaman Mesh Management, klik lagi Create ASM Instance. Tabel berikut menjelaskan parameter utama.

    Parameter

    Nilai

    Service mesh name

    mesh-2.

    Region

    Pilih wilayah yang sama dengan kluster cluster-2.

    Istio version

    Pilih v1.22.6.71-g7d67a80b-aliyun atau versi yang lebih baru.

    Kubernetes clusters

    Pilih cluster-2. Parameter VPC dan vSwitch akan terisi otomatis.

    ASM root certificate

    Klik Show Advanced Settings, pilih Reuse an Existing Root Certificate of ASM Instance, lalu pilih mesh-1 dari daftar drop-down.

    Untuk parameter lain yang tidak disebutkan dalam tabel, gunakan nilai yang sama seperti pada mesh-1. Setelah instans dibuat, tunggu 2 hingga 3 menit hingga status instans mesh-2 berubah menjadi Running.

Langkah 2: Tambahkan kluster dalam mode hanya penemuan layanan

Setelah menyelesaikan Langkah 1, mesh-1 mengelola cluster-1, dan mesh-2 mengelola cluster-2. Untuk mengaktifkan penemuan layanan antar-kluster, Anda harus menambahkan kluster lain ke setiap instans ASM dalam mode hanya penemuan layanan. Hal ini memungkinkan setiap instans menemukan layanan dan titik akhir di kluster lain.

  1. Tambahkan cluster-2 ke instans mesh-1 dalam mode hanya penemuan layanan.

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

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

    3. Pada halaman Add Kubernetes Cluster, temukan cluster-2, lalu klik Add (For Service Discovery Only) di kolom Actions untuk kluster tersebut. Pada kotak dialog yang muncul, klik OK. Setelah kluster ditambahkan, pada halaman Instance Information > Basic Information, status instans ASM berubah menjadi Updating. Setelah beberapa detik (waktu yang dibutuhkan tergantung pada jumlah kluster yang ditambahkan), klik ikon image di pojok kanan atas halaman, dan status instans ASM berubah menjadi Running. Pada halaman Kubernetes Clusters, Anda dapat melihat informasi tentang kluster yang ditambahkan.

  2. Tambahkan cluster-1 ke instans mesh-2 dalam mode hanya penemuan layanan.

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

    2. Pada halaman Mesh Management, klik nama instans mesh-2. Di panel navigasi kiri, pilih Cluster & Workload Management (Data Plane) > Kubernetes Clusters, lalu klik Add.

    3. Pada halaman Add Kubernetes Cluster, temukan cluster-1 dan klik Add (For Service Discovery Only) di kolom Actions. Pada kotak dialog konfirmasi yang muncul, klik OK. Setelah menambahkan kluster, buka halaman Instance Information > Basic Information. Status instans ASM berubah menjadi Updating. Tunggu beberapa detik, lalu klik ikon refresh image di pojok kanan atas. Status instans berubah menjadi Running. Anda dapat melihat informasi tentang kluster yang ditambahkan pada halaman Kubernetes Clusters.

      Pada halaman Kubernetes Clusters, status cluster-1 adalah For Service Discovery Only, Synced, dan status cluster-2 adalah Running, Synced. Hal ini mengonfirmasi bahwa kedua kluster berhasil ditambahkan ke instans ASM.

Penting

Saat Anda menambahkan kluster Kubernetes dalam mode hanya penemuan layanan, instans ASM menemukan layanan dan titik akhir di kluster tersebut tetapi tidak menerapkan komponen bidang data apa pun ke kluster tersebut. Perubahan konfigurasi apa pun yang dilakukan di instans ASM tidak diterapkan ke kluster yang ditambahkan dalam mode ini.

Mode hanya penemuan layanan dimaksudkan khusus untuk membangun arsitektur lapisan kontrol multi-master. Jika Anda ingin instans ASM sepenuhnya mengelola kluster Kubernetes Anda, tambahkan kluster tersebut langsung ke instans ASM. Untuk informasi selengkapnya, lihat Add a cluster to an ASM instance.

Langkah 3 (Opsional): Konfigurasikan jaringan multi-kluster

Jika kluster Kubernetes cluster-1 dan cluster-2 berada di jaringan yang berbeda, misalnya lintas VPC atau wilayah berbeda, dan jaringan tersebut tidak terhubung menggunakan Cloud Enterprise Network (CEN), Anda harus mengonfigurasi jaringan multi-kluster di kedua instans ASM. Anda juga perlu menerapkan proxy mesh lintas kluster untuk cluster-1 dan cluster-2 guna memastikan konektivitas antar-kluster. Untuk informasi selengkapnya tentang proxy mesh lintas kluster, lihat Disaster recovery for multiple ACK clusters in different VPCs (by using an ASM cross-cluster mesh proxy).

  1. Pada instans mesh-1, konfigurasikan pengaturan jaringan untuk cluster-1 dan cluster-2.

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

    2. Pada halaman Mesh Management, klik nama instans mesh-1. Di panel navigasi kiri, pilih Cluster & Workload Management (Data Plane) > Kubernetes Clusters.

    3. Klik Multi-cluster Network Configurations dan konfigurasikan pengaturan jaringan sebagai berikut:

      1. Untuk cluster-1, atur jaringan logis ke network1 dan aktifkan akses melalui proxy mesh lintas kluster.

      2. Untuk cluster-2, atur jaringan logis ke network2.

    Layanan dalam jaringan logis yang sama dapat berkomunikasi secara langsung. Layanan di jaringan logis berbeda harus berkomunikasi melalui proxy mesh lintas kluster. Saat Anda mengaktifkan akses melalui proxy mesh lintas kluster, sebuah LoadBalancer Service dibuat secara otomatis, yang mengakibatkan biaya CLB.

  1. Pada instans mesh-2, konfigurasikan pengaturan jaringan untuk cluster-1 dan cluster-2.

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

    2. Pada halaman Mesh Management, klik nama instans mesh-2. Di panel navigasi kiri, pilih Cluster & Workload Management (Data Plane) > Kubernetes Clusters.

    3. Klik Multi-cluster Network Configurations dan konfigurasikan pengaturan jaringan sebagai berikut:

      1. Untuk cluster-1, atur jaringan logis ke network1.

      2. Untuk cluster-2, atur jaringan logis ke network2 dan aktifkan akses melalui proxy mesh lintas kluster.

    Layanan dalam jaringan logis yang sama dapat berkomunikasi secara langsung. Layanan di jaringan logis berbeda harus berkomunikasi melalui proxy mesh lintas kluster. Saat Anda mengaktifkan akses melalui proxy mesh lintas kluster, sebuah LoadBalancer Service dibuat secara otomatis, yang mengakibatkan biaya CLB.

Langkah 4: Terapkan aplikasi contoh

Bagian ini menjelaskan cara menerapkan layanan sleep dan versi v1 layanan helloworld di cluster-1, serta versi v2 layanan helloworld di cluster-2, seperti yang ditunjukkan pada gambar berikut. Layanan di kedua kluster dapat saling mengakses melalui proxy mesh lintas kluster.

  1. Di kedua instans mesh-1 dan mesh-2, aktifkan injeksi sidecar otomatis untuk namespace default. Untuk informasi selengkapnya, lihat Manage global namespaces.

  2. Gunakan manifes YAML berikut untuk membuat aplikasi sleep dan aplikasi helloworld versi v1.

    YAML

    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
  3. Terapkan manifes ini ke cluster-1. Untuk informasi selengkapnya, lihat Create a stateless Deployment.

  4. Gunakan manifes YAML berikut untuk membuat aplikasi helloworld versi v2.

    YAML

    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
  5. Terapkan manifes ini ke cluster-2. Untuk informasi selengkapnya, lihat Create a stateless Deployment.

Langkah 5: Verifikasi komunikasi lintas kluster

  1. Gunakan file kubeconfig cluster-1 untuk menjalankan perintah berikut:

     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

    Output menunjukkan bahwa permintaan diseimbangkan beban antara v1 dan v2 layanan helloworld.

  2. Jalankan perintah berikut untuk mengubah jumlah replika aplikasi sleep di cluster-1 menjadi 0:

    kubectl scale deploy sleep --replicas=0
  3. Gunakan manifes YAML berikut untuk membuat aplikasi sleep.

    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
  4. Terapkan manifes di atas ke cluster-2. Untuk informasi selengkapnya, lihat Create a stateless Deployment.

  5. Di cluster-2, jalankan kembali perintah berikut:

     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

    Output menunjukkan bahwa permintaan tetap diseimbangkan beban antara v1 dan v2 layanan helloworld.