全部产品
Search
文档中心

Alibaba Cloud Service Mesh:Skenario pemulihan bencana untuk beberapa kluster ACK dalam VPC yang sama

更新时间:Nov 11, 2025

Dokumen ini ditujukan untuk pengguna yang menggunakan Service Mesh (ASM) untuk mengelola beberapa kluster, di mana beban kerja suatu layanan dapat diterapkan di seluruh kluster tersebut. Secara default, trafik ke layanan tersebut diseimbangkan secara merata di antara kluster-kluster tersebut. Untuk menjaga agar trafik tetap berada dalam kluster lokal, Anda dapat menggunakan fitur retensi trafik lokal kluster. Topik ini menggunakan aplikasi Bookinfo sebagai contoh untuk menunjukkan cara mengaktifkan fitur retensi trafik lokal kluster ASM dalam skenario multi-kluster.

Prasyarat

Persiapan

Langkah 1: Konfigurasikan konektivitas antar kluster

(Opsional) Ubah nama grup keamanan kluster

Anda dapat mengubah nama grup keamanan kedua kluster agar lebih mudah diidentifikasi, sehingga menyederhanakan konfigurasi selanjutnya. Dalam contoh ini, Security Group Name diatur menjadi m1c1-sg dan m1c2-sg.

Perluas untuk melihat cara mengubah nama grup keamanan kluster

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

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

  3. Di halaman Security Groups, arahkan kursor ke nama grup keamanan target, klik ikon image, masukkan nama baru, lalu klik OK.

Tambahkan aturan grup keamanan

Tambahkan aturan grup keamanan untuk mengizinkan kedua kluster saling mengakses. Di halaman konfigurasi grup keamanan m1c1-sg, tambahkan aturan untuk mengizinkan akses dari m1c2-sg. Demikian pula, di halaman konfigurasi grup keamanan m1c2-sg, tambahkan aturan untuk mengizinkan akses dari m1c1-sg. Untuk informasi lebih lanjut, lihat Tambahkan aturan grup keamanan.

Gambar 1. Contoh konfigurasi grup keamanan m1c1-sg11

Langkah 2: Tambahkan kluster ke instance ASM dan terapkan gerbang masuk

Setelah Anda menambahkan kedua kluster ke instance ASM, keduanya dapat saling mengakses. Oleh karena itu, Anda hanya perlu menerapkan gerbang masuk untuk salah satu kluster saja.

  1. Tambahkan kedua kluster ke instance ASM. Untuk informasi lebih lanjut, lihat Tambahkan kluster ke instance ASM.

  2. Terapkan gerbang masuk untuk kluster m1c1. Untuk informasi lebih lanjut, lihat Buat gerbang masuk.

Langkah 3: Terapkan aplikasi Bookinfo di masing-masing dari dua kluster tersebut

Topik ini menggunakan penerapan aplikasi Bookinfo di dua kluster terpisah sebagai contoh untuk menunjukkan fitur retensi trafik lokal kluster ASM. Satu-satunya perbedaan antara layanan di kedua kluster adalah versi komponen Reviews. Kluster m1c1 menggunakan v1, sedangkan kluster m1c2 menggunakan v2. Semua komponen lainnya sama.

  1. Gunakan file YAML berikut untuk menerapkan aplikasi Bookinfo dengan penyebaran Reviews v1 di m1c1. Untuk informasi lebih lanjut, lihat Terapkan aplikasi di kluster yang terkait dengan instance ASM.

    Penyebaran Reviews v1 tidak menampilkan peringkat bintang di bagian ulasan buku pada halaman web.

    Perluas 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 menerapkan aplikasi Bookinfo dengan penyebaran Reviews v2 di m1c2.

    Penyebaran Reviews v2 menampilkan peringkat bintang hitam putih di bagian ulasan buku pada halaman web.

    Perluas 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 aturan gateway, layanan virtual, dan aturan tujuan di ASM

  1. Gunakan file YAML berikut untuk membuat aturan gateway di namespace default instance ASM. Untuk informasi lebih lanjut, lihat Kelola aturan gateway.

    Perluas untuk melihat YAML aturan 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 layanan virtual di namespace default instance ASM. Untuk informasi lebih lanjut, lihat Kelola layanan virtual.

    Perluas untuk melihat YAML layanan virtual

    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 aturan tujuan di namespace default instance ASM. Untuk informasi lebih lanjut, lihat Kelola aturan tujuan.

    Perluas untuk melihat YAML aturan tujuan

    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, akses http://{INGRESS_GATEWAY_IP}/productpage1 atau http://{INGRESS_GATEWAY_IP}/productpage2 dan segarkan halaman.

    Untuk mendapatkan alamat IP gerbang masuk, lihat Buat gerbang masuk.

    Jika peringkat bintang muncul secara bergantian di bagian ulasan buku, berarti aplikasi Bookinfo berhasil diterapkan.访问productpage页面

Prosedur

Prosedur berikut menunjukkan cara mengaktifkan retensi trafik lokal kluster di tingkat layanan untuk menjaga agar trafik layanan Reviews tetap berada dalam kluster lokalnya. Untuk informasi tentang cara mengaktifkan fitur ini di tingkat global atau namespace, lihat Operasi terkait.

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

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

  3. Di halaman Basic Information, di bagian Configuration Information, klik Edit di sebelah kanan Cluster-local Traffic Retention.

    配置集群内流量保持

  4. Di kotak dialog Configure Cluster-local Traffic Retention Service, aktifkan sakelar Enable Cluster-local Traffic Retention, pilih Apply To Some Services, lalu klik Select Service.

  5. Di kotak dialog Add Service, pilih Service. Atur Namespace menjadi default. Di bagian Select Service, pilih reviews, klik ikon 添加, lalu klik OK.

    添加服务

  6. Setelah konfigurasi selesai, klik OK di kotak dialog Configure Cluster-local Traffic Retention Service.

    配置集群内流量保持服务

    Di bagian Configuration Information, Configured muncul di sebelah kanan Cluster-local Traffic Retention. Hal ini menunjukkan bahwa fitur Cluster-local Traffic Retention telah diaktifkan.

  7. Verifikasi bahwa fitur retensi trafik lokal kluster berfungsi.

    1. Di browser, akses http://{INGRESS_GATEWAY_IP}/productpage1 dan segarkan halaman.

      Bagian ulasan buku tidak pernah menampilkan peringkat.验证流量保持-1

    2. Di browser, akses http://{INGRESS_GATEWAY_IP}/productpage2 dan segarkan halaman.

      Bagian ulasan buku selalu menampilkan peringkat bintang hitam putih.验证集群内流量保持-2

    Hasil ini menunjukkan bahwa fitur retensi trafik lokal kluster berfungsi.

Analisis hasil

Diagram berikut menunjukkan alur trafik di mesh layanan sebelum dan sesudah fitur retensi trafik lokal kluster diaktifkan.网格中流量的调用链路分析

Jenis

Deskripsi

Retensi trafik lokal kluster dinonaktifkan

Dalam aplikasi Bookinfo, komponen Productpage memanggil layanan Reviews untuk informasi ulasan buku. Mengakses http://{INGRESS_GATEWAY_IP}/productpage1 di browser akan mengarahkan Anda ke Productpage di kluster m1c1. Mengakses http://{INGRESS_GATEWAY_IP}/productpage2 akan mengarahkan Anda ke Productpage di kluster m1c2.

Beban kerja untuk layanan Reviews ada di kedua kluster m1c1 dan m1c2. Secara default, bahkan ketika mengakses Productpage di kluster tertentu seperti m1c1, permintaan ke layanan Reviews diseimbangkan secara merata di antara kedua kluster. Anda akan melihat peringkat bintang muncul secara bergantian di bagian ulasan buku pada halaman Productpage.

Retensi trafik lokal kluster diaktifkan

Ketika Anda mengakses kluster tertentu, seperti Productpage di kluster m1c1, permintaan ke layanan Reviews tidak lagi diseimbangkan di antara kedua kluster. Bagian ulasan buku pada halaman Productpage tidak pernah menampilkan peringkat. Peringkat bintang bergantian tidak muncul lagi.

Penting

Setelah fitur retensi trafik diaktifkan, jika Reviews-v1 di kluster m1c1 offline karena kegagalan, Productpage tidak dapat menyediakan layanan dengan mengakses Reviews-v2 di kluster m1c2.

Catatan

Jika Anda mengaktifkan retensi trafik lokal kluster untuk suatu layanan, beban kerja dari layanan lain hanya dapat mengakses titik akhir layanan tersebut dalam kluster yang sama. Bahkan jika titik akhir di kluster lokal tidak tersedia, trafik tidak akan dialihkan ke titik akhir layanan di kluster lain.

Jika Anda ingin menerapkan retensi trafik lokal kluster sekaligus degradasi trafik untuk suatu layanan, lihat Konfigurasikan jalur lalu lintas dan degradasi trafik berdasarkan aturan trafik. Anda dapat menggunakan aturan trafik untuk membuat jalur lalu lintas dan menerapkan degradasi trafik untuk layanan di kluster yang berbeda.

Operasi terkait

Aktifkan retensi trafik lokal kluster secara global

  1. Di halaman Basic Information, di bagian Configuration Information, klik Edit di sebelah kanan Cluster-local Traffic Retention.

  2. Di kotak dialog Configure Cluster-local Traffic Retention Service, aktifkan sakelar Enable Cluster-local Traffic Retention, pilih Apply To All Services, lalu klik OK.

    Setelah Anda mengaktifkan fitur ini, trafik untuk semua layanan akan dipertahankan dalam kluster lokal masing-masing.

Aktifkan retensi trafik lokal kluster berdasarkan namespace

  1. Di halaman Basic Information, di bagian Configuration Information, klik Edit di sebelah kanan Cluster-local Traffic Retention.

  2. Di kotak dialog Configure Cluster-local Traffic Retention Service, aktifkan sakelar Enable Cluster-local Traffic Retention, pilih Apply To Some Services, lalu klik Select Service.

  3. Di kotak dialog Add Service, pilih Namespace. Di bagian Select Service, pilih namespace target, klik ikon 添加, lalu klik OK.

  4. Di kotak dialog Configure Cluster-local Traffic Retention Service, klik OK.

    Setelah Anda mengaktifkan fitur ini, trafik ke layanan dalam namespace target akan dipertahankan dalam kluster lokal.

    按命名空间开启