All Products
Search
Document Center

Alibaba Cloud Service Mesh:Pemulihan bencana untuk kluster ACK dalam VPC yang sama

Last Updated:Jun 22, 2026

Saat menggunakan Service Mesh (ASM) untuk mengelola beberapa kluster, Anda dapat mendistribusikan beban kerja layanan di seluruh kluster tersebut. Secara default, ASM melakukan load-balancing terhadap lalu lintas ke layanan tersebut di semua kluster. Untuk menjaga lalu lintas tetap berada dalam kluster asalnya, gunakan fitur keeping traffic in-cluster. Topik ini menggunakan aplikasi Bookinfo untuk menunjukkan cara mengaktifkan fitur ini dalam lingkungan multi-kluster.

Prasyarat

  • Dua kluster ACK telah dibuat dalam VPC yang sama. Dalam topik ini, kluster tersebut diberi nama m1c1 dan m1c2. Untuk informasi lebih lanjut, lihat Create an ACK dedicated cluster (discontinued).

  • Sebuah instans ASM versi 1.15.3.101 atau yang lebih baru telah dibuat. Dalam topik ini, instans tersebut diberi nama mesh1. Untuk informasi lebih lanjut, lihat Create an ASM instance.

Persiapan

Langkah 1: Konfigurasikan konektivitas antar-kluster

(Opsional) Ganti nama security group

Ganti nama security group untuk kedua kluster agar lebih mudah diidentifikasi. Dalam contoh ini, Security Group Name diatur menjadi m1c1-sg dan m1c2-sg.

Luaskan untuk melihat cara mengganti nama grup keamanan Kluster

  1. Masuk ke ECS console. Di panel navigasi sebelah kiri, pilih Network & Security > Security Groups.

  2. Di bilah navigasi atas, pilih wilayah tempat instans ECS target berada.

  3. Pada halaman Security Groups, arahkan kursor ke nama security group target, klik ikon image, masukkan nama baru, lalu klik OK.

Tambahkan aturan security group

Tambahkan aturan security group yang memungkinkan kluster saling mengakses satu sama lain. Di pengaturan security group m1c1-sg, tambahkan aturan untuk mengizinkan akses dari m1c2-sg. Demikian pula, untuk security group m1c2-sg, tambahkan aturan untuk mengizinkan akses dari m1c1-sg. Untuk informasi lebih lanjut, lihat Add a security group rule.

Tambahkan aturan dalam arah inbound: atur Authorization Policy ke Allow, Protocol Type ke All, Port Range ke -1/-1, Authorization Type ke Security Group Access, dan Priority ke 1.

Langkah 2: Tambahkan kluster dan sebarkan ingress gateway

Setelah Anda menambahkan kedua kluster ke instans ASM, keduanya mendapatkan akses timbal balik. Oleh karena itu, Anda hanya perlu menyebarkan ingress gateway untuk salah satunya.

  1. Tambahkan dua kluster ke instans ASM. Untuk informasi lebih lanjut, lihat Add a cluster to an ASM instance.

  2. Sebarkan ingress gateway untuk kluster m1c1. Untuk informasi lebih lanjut, lihat Create an ingress gateway.

Langkah 3: Sebarkan Bookinfo di setiap kluster

Untuk memverifikasi fitur keeping traffic in-cluster, topik ini menggunakan dua aplikasi Bookinfo yang sedikit berbeda. Satu-satunya perbedaan terletak pada versi layanan Reviews: m1c1 menjalankan v1, sedangkan m1c2 menjalankan v2.

  1. Gunakan file YAML berikut untuk menyebarkan aplikasi Bookinfo dengan deployment Reviews v1 di kluster m1c1. Untuk informasi lebih lanjut, lihat Deploy an application in a cluster associated with an ASM instance.

    Deployment v1 layanan Reviews tidak menampilkan peringkat bintang di bagian ulasan buku.

    Klik untuk melihat file YAML aplikasi Bookinfo di m1c1

    apiVersion: v1
    kind: Service
    metadata:
      name: details
      labels:
        app: details
        service: details
    spec:
      ports:
      - port: 9080
        name: http
      selector:
        app: details
    ---
    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: bookinfo-details
      labels:
        account: details
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: details-v1
      labels:
        app: details
        version: v1
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: details
          version: v1
      template:
        metadata:
          labels:
            app: details
            version: v1
            cluster: m1c1
        spec:
          serviceAccountName: bookinfo-details
          containers:
          - name: details
            image: registry-cn-hangzhou.ack.aliyuncs.com/ack-demo/examples-bookinfo-details-v1:1.20.1
            imagePullPolicy: IfNotPresent
            ports:
            - containerPort: 9080
    ---
    ##################################################################################################
    # Ratings service
    ##################################################################################################
    apiVersion: v1
    kind: Service
    metadata:
      name: ratings
      labels:
        app: ratings
        service: ratings
    spec:
      ports:
      - port: 9080
        name: http
      selector:
        app: ratings
    ---
    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: bookinfo-ratings
      labels:
        account: ratings
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: ratings-v1
      labels:
        app: ratings
        version: v1
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: ratings
          version: v1
      template:
        metadata:
          labels:
            app: ratings
            version: v1
            cluster: m1c1
        spec:
          serviceAccountName: bookinfo-ratings
          containers:
          - name: ratings
            image: registry-cn-hangzhou.ack.aliyuncs.com/ack-demo/examples-bookinfo-ratings-v1:1.20.1
            imagePullPolicy: IfNotPresent
            ports:
            - containerPort: 9080
    ---
    ##################################################################################################
    # Reviews service
    ##################################################################################################
    apiVersion: v1
    kind: Service
    metadata:
      name: reviews
      labels:
        app: reviews
        service: reviews
    spec:
      ports:
      - port: 9080
        name: http
      selector:
        app: reviews
    ---
    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: bookinfo-reviews
      labels:
        account: reviews
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: reviews-v1
      labels:
        app: reviews
        version: v1
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: reviews
          version: v1
      template:
        metadata:
          labels:
            app: reviews
            version: v1
            cluster: m1c1
        spec:
          serviceAccountName: bookinfo-reviews
          containers:
          - name: reviews
            image: registry-cn-hangzhou.ack.aliyuncs.com/ack-demo/examples-bookinfo-reviews-v1:1.20.1
            imagePullPolicy: IfNotPresent
            env:
            - name: LOG_DIR
              value: "/tmp/logs"
            ports:
            - containerPort: 9080
            volumeMounts:
            - name: tmp
              mountPath: /tmp
            - name: wlp-output
              mountPath: /opt/ibm/wlp/output
          volumes:
          - name: wlp-output
            emptyDir: {}
          - name: tmp
            emptyDir: {}
    ---
    ##################################################################################################
    # Productpage services
    ##################################################################################################
    apiVersion: v1
    kind: Service
    metadata:
      name: productpage
      labels:
        app: productpage
        service: productpage
    spec:
      ports:
      - port: 9080
        name: http
      selector:
        app: productpage
    ---
    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: bookinfo-productpage
      labels:
        account: productpage
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: productpage-v1
      labels:
        app: productpage
        version: v1
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: productpage
          version: v1
      template:
        metadata:
          annotations:
            prometheus.io/scrape: "true"
            prometheus.io/port: "9080"
            prometheus.io/path: "/metrics"
          labels:
            app: productpage
            version: v1
            cluster: m1c1
        spec:
          serviceAccountName: bookinfo-productpage
          containers:
          - name: productpage
            image: registry-cn-hangzhou.ack.aliyuncs.com/ack-demo/examples-bookinfo-productpage-v1:1.20.1
            imagePullPolicy: IfNotPresent
            ports:
            - containerPort: 9080
            volumeMounts:
            - name: tmp
              mountPath: /tmp
          volumes:
          - name: tmp
            emptyDir: {}
    ---
  2. Gunakan file YAML berikut untuk menyebarkan aplikasi Bookinfo dengan deployment Reviews v2 di kluster m1c2.

    Deployment v2 layanan Reviews menampilkan peringkat sebagai bintang hitam di bagian ulasan buku.

    Klik untuk melihat file YAML aplikasi Bookinfo di m1c2

    apiVersion: v1
    kind: Service
    metadata:
      name: details
      labels:
        app: details
        service: details
    spec:
      ports:
      - port: 9080
        name: http
      selector:
        app: details
    ---
    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: bookinfo-details
      labels:
        account: details
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: details-v1
      labels:
        app: details
        version: v1
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: details
          version: v1
      template:
        metadata:
          labels:
            app: details
            version: v1
            cluster: m1c2
        spec:
          serviceAccountName: bookinfo-details
          containers:
          - name: details
            image: registry-cn-hangzhou.ack.aliyuncs.com/ack-demo/examples-bookinfo-details-v1:1.20.1
            imagePullPolicy: IfNotPresent
            ports:
            - containerPort: 9080
    ---
    ##################################################################################################
    # Ratings service
    ##################################################################################################
    apiVersion: v1
    kind: Service
    metadata:
      name: ratings
      labels:
        app: ratings
        service: ratings
    spec:
      ports:
      - port: 9080
        name: http
      selector:
        app: ratings
    ---
    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: bookinfo-ratings
      labels:
        account: ratings
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: ratings-v1
      labels:
        app: ratings
        version: v1
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: ratings
          version: v1
      template:
        metadata:
          labels:
            app: ratings
            version: v1
            cluster: m1c2
        spec:
          serviceAccountName: bookinfo-ratings
          containers:
          - name: ratings
            image: registry-cn-hangzhou.ack.aliyuncs.com/ack-demo/examples-bookinfo-ratings-v1:1.20.1
            imagePullPolicy: IfNotPresent
            ports:
            - containerPort: 9080
    ---
    ##################################################################################################
    # Reviews service
    ##################################################################################################
    apiVersion: v1
    kind: Service
    metadata:
      name: reviews
      labels:
        app: reviews
        service: reviews
    spec:
      ports:
      - port: 9080
        name: http
      selector:
        app: reviews
    ---
    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: bookinfo-reviews
      labels:
        account: reviews
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: reviews-v2
      labels:
        app: reviews
        version: v2
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: reviews
          version: v2
      template:
        metadata:
          labels:
            app: reviews
            version: v2
            cluster: m1c2
        spec:
          serviceAccountName: bookinfo-reviews
          containers:
          - name: reviews
            image: registry-cn-hangzhou.ack.aliyuncs.com/ack-demo/examples-bookinfo-reviews-v2:1.20.1
            imagePullPolicy: IfNotPresent
            env:
            - name: LOG_DIR
              value: "/tmp/logs"
            ports:
            - containerPort: 9080
            volumeMounts:
            - name: tmp
              mountPath: /tmp
            - name: wlp-output
              mountPath: /opt/ibm/wlp/output
          volumes:
          - name: wlp-output
            emptyDir: {}
          - name: tmp
            emptyDir: {}
    ---
    ##################################################################################################
    # Productpage services
    ##################################################################################################
    apiVersion: v1
    kind: Service
    metadata:
      name: productpage
      labels:
        app: productpage
        service: productpage
    spec:
      ports:
      - port: 9080
        name: http
      selector:
        app: productpage
    ---
    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: bookinfo-productpage
      labels:
        account: productpage
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: productpage-v1
      labels:
        app: productpage
        version: v1
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: productpage
          version: v1
      template:
        metadata:
          annotations:
            prometheus.io/scrape: "true"
            prometheus.io/port: "9080"
            prometheus.io/path: "/metrics"
          labels:
            app: productpage
            version: v1
            cluster: m1c2
        spec:
          serviceAccountName: bookinfo-productpage
          containers:
          - name: productpage
            image: registry-cn-hangzhou.ack.aliyuncs.com/ack-demo/examples-bookinfo-productpage-v1:1.20.1
            imagePullPolicy: IfNotPresent
            ports:
            - containerPort: 9080
            volumeMounts:
            - name: tmp
              mountPath: /tmp
          volumes:
          - name: tmp
            emptyDir: {}
    ---

Langkah 4: Buat gateway, virtual service, dan destination rule

  1. Gunakan file YAML berikut untuk membuat gateway di namespace default instans ASM. Untuk informasi lebih lanjut, lihat Manage gateways.

    Klik untuk melihat file YAML gateway

    apiVersion: networking.istio.io/v1alpha3
    kind: Gateway
    metadata:
      name: bookinfo-gateway
    spec:
      selector:
        istio: ingressgateway
      servers:
      - port:
          number: 80
          name: http
          protocol: HTTP
        hosts:
        - "*"
  2. Gunakan file YAML berikut untuk membuat virtual service di namespace default instans ASM. Untuk informasi lebih lanjut, lihat Manage virtual services.

    Klik untuk melihat file YAML virtual service

    apiVersion: networking.istio.io/v1alpha3
    kind: VirtualService
    metadata:
      name: bookinfo-cluster-local
    spec:
      hosts:
      - "*"
      gateways:
      - bookinfo-gateway
      http:
      - match:
        - uri:
            exact: /productpage1
        rewrite:
          uri: /productpage
        route:
        - destination:
            host: productpage
            port:
              number: 9080
            subset: m1c1
      - match:
        - uri:
            exact: /productpage2
        rewrite:
          uri: /productpage
        route:
        - destination:
            host: productpage
            port:
              number: 9080
            subset: m1c2
      - match:
        - uri:
            prefix: /static
        - uri:
            exact: /login
        - uri:
            exact: /logout
        - uri:
            prefix: /api/v1/products
        route:
        - destination:
            host: productpage
            port:
              number: 9080
  3. Gunakan file YAML berikut untuk membuat destination rule di namespace default instans ASM. Untuk informasi lebih lanjut, lihat Manage destination rules.

    Klik untuk melihat file YAML destination rule

    apiVersion: networking.istio.io/v1beta1
    kind: DestinationRule
    metadata:
      name: productpage-cluster-local
    spec:
      host: productpage
      subsets:
      - name: m1c1
        labels:
          cluster: m1c1
      - name: m1c2
        labels:
          cluster: m1c2
  4. Di browser Anda, akses http://{IP address of the ingress gateway}/productpage1 atau http://{IP address of the ingress gateway}/productpage2 dan refresh halaman tersebut.

    Untuk menemukan alamat IP ingress gateway, lihat Create an ingress gateway.

    Jika peringkat bintang muncul secara bergantian di bagian ulasan buku, berarti aplikasi Bookinfo berhasil diterapkan. Halaman tersebut menampilkan productpage aplikasi BookInfo Sample, yang berisi informasi tentang buku The Comedy of Errors. Bagian Book Reviews di sebelah kanan menampilkan ulasan dari Reviewer1 (5 bintang) dan Reviewer2 (4 bintang).

Prosedur

Langkah-langkah berikut menjelaskan cara mengaktifkan fitur keeping traffic in-cluster untuk layanan tertentu, dalam hal ini layanan Reviews. Untuk informasi tentang cara mengaktifkan fitur ini secara global atau di tingkat namespace, lihat Operasi terkait.

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

  2. Pada halaman Mesh Management, klik nama instans ASM. Di panel navigasi sebelah kiri, pilih ASM Instance > Base Information.

  3. Pada halaman Base Information, di bagian Config Info, klik Keep traffic in cluster di sebelah kanan edit.

  4. Pada kotak dialog Configure services that keep traffic in cluster, aktifkan sakelar Enable Keep traffic in cluster, pilih Select Service, lalu klik Select services.

  5. Pada kotak dialog Add services, pilih Service, pilih Namespace dari daftar drop-down Namespace, pilih Select services di bagian Select a service, klik ikon 添加, lalu klik OK.

  6. Setelah konfigurasi selesai, klik Configure services that keep traffic in cluster pada kotak dialog OK.

    Di bagian Config Info, Configured ditampilkan di sebelah kanan Keep traffic in cluster, yang menunjukkan bahwa fitur Keep traffic in cluster telah diaktifkan.

  7. Verifikasi bahwa fitur keeping traffic in-cluster berfungsi.

    1. Di browser Anda, akses http://{IP address of the ingress gateway}/productpage1 dan refresh halaman tersebut.

      Bagian ulasan buku secara konsisten tidak menampilkan peringkat, yang mengonfirmasi bahwa fitur keeping traffic in-cluster berfungsi sebagaimana mestinya.

    2. Di browser Anda, akses http://{IP address of the ingress gateway}/productpage2 dan refresh halaman tersebut.

      Bagian ulasan buku secara konsisten menampilkan ulasan dengan peringkat bintang hitam. Halaman tersebut menampilkan dengan benar detail buku The Comedy of Errors dan konten ulasan di bagian Book Reviews, yang mengonfirmasi bahwa lalu lintas diarahkan dengan benar ke layanan lokal di kluster m1c2.

Analisis hasil

Diagram berikut menunjukkan alur lalu lintas di mesh sebelum dan sesudah fitur keeping traffic in-cluster diaktifkan.网格中流量的调用链路分析

Status

Deskripsi

Nonaktif

Dalam aplikasi Bookinfo, layanan Productpage memanggil layanan Reviews untuk mendapatkan ulasan buku. Saat Anda mengakses http://{IP address of the ingress gateway}/productpage1 di browser, Anda mengakses layanan Productpage di kluster m1c1. Saat Anda mengakses http://{IP address of the ingress gateway}/productpage2, Anda mengakses layanan Productpage di kluster m1c2.

Beban kerja untuk layanan Reviews ada di kedua kluster, yaitu m1c1 dan m1c2. Secara default, Service Mesh melakukan load-balancing terhadap permintaan ke layanan Reviews di kedua kluster, bahkan ketika traffic berasal dari layanan dalam salah satu kluster tersebut (misalnya, dari layanan Productpage di m1c1). Akibatnya, Anda melihat peringkat bintang muncul dan menghilang secara bergantian di bagian ulasan buku.

Aktif

Saat Anda mengakses layanan Productpage di kluster tertentu, seperti m1c1, Service Mesh tidak lagi melakukan load-balancing permintaan lintas kluster. Sebagai gantinya, semua permintaan diarahkan ke layanan Reviews lokal. Akibatnya, bagian ulasan buku secara konsisten tidak menampilkan peringkat bintang.

Penting

Setelah fitur ini diaktifkan, jika layanan reviews-v1 di kluster m1c1 gagal, layanan Productpage tidak dapat melakukan failover ke layanan reviews-v2 di kluster m1c2.

Catatan

Jika Anda mengaktifkan fitur keeping traffic in-cluster untuk suatu layanan, pemanggil hanya dapat mengakses titik akhir layanan tersebut dalam kluster yang sama. Bahkan jika titik akhir dalam kluster tersebut tidak tersedia, mesh tidak akan mengalihkan lalu lintas ke titik akhirnya di kluster lain.

Untuk menjaga lalu lintas tetap dalam kluster untuk suatu layanan sekaligus mengaktifkan failover, Anda dapat menggunakan aturan lalu lintas untuk membuat jalur lalu lintas dan mengaktifkan traffic shifting. Untuk informasi lebih lanjut, lihat Use traffic rules to configure traffic lanes and traffic shifting.

Operasi terkait

Aktifkan traffic in-cluster secara global

  1. Pada halaman Base Information, di bagian Config Info, klik Keep traffic in cluster di sebelah kanan edit.

  2. Pada kotak dialog Configure services that keep traffic in cluster, aktifkan sakelar Enable Keep traffic in cluster, pilih All Services, lalu klik OK.

    Setelah opsi ini diaktifkan, Service Mesh menjaga seluruh lalu lintas tetap berada dalam kluster asalnya.

Aktifkan traffic in-cluster untuk namespace

  1. Pada halaman Base Information, di bagian Config Info, klik Keep traffic in cluster di sebelah kanan edit.

  2. Pada kotak dialog Configure services that keep traffic in cluster, aktifkan sakelar Enable Keep traffic in cluster, pilih Select Service, lalu klik Select services.

  3. Pada kotak dialog Add services, pilih Namespace, pilih namespace target di bagian Select services, klik ikon 添加, lalu klik OK.

  4. Pada kotak dialog Configure services that keep traffic in cluster, klik OK.

    Setelah opsi ini diaktifkan, Service Mesh menjaga lalu lintas ke layanan dalam namespace target tetap berada dalam kluster asalnya.