すべてのプロダクト
Search
ドキュメントセンター

Alibaba Cloud Service Mesh:同一 VPC 内の複数の ACK クラスターの障害復旧シナリオ

最終更新日:Nov 06, 2025

Service Mesh (ASM) を使用して複数のクラスターを管理する場合、サービスのワークロードを複数のクラスターにデプロイできます。デフォルトでは、サービスへのトラフィックはクラスター間で負荷分散されます。トラフィックをローカルクラスター内に保持するには、クラスターローカルトラフィック保持機能を使用できます。このトピックでは、Bookinfo アプリケーションを例として、マルチクラスターシナリオで ASM のクラスターローカルトラフィック保持機能を有効にする方法を説明します。

前提条件

  • 同一の Virtual Private Cloud (VPC) 内に 2 つの ACK クラスターを作成します。このトピックでは、m1c1 と m1c2 を例として使用します。詳細については、「ACK 専用クラスターを作成する (新規作成は中止)」をご参照ください。

  • バージョン 1.15.3.101 以降の ASM インスタンスを作成します。このトピックでは、mesh1 を例として使用します。詳細については、「ASM インstance を作成する」をご参照ください。

準備

ステップ 1: クラスター間の接続性を構成する

(オプション) クラスターのセキュリティグループ名を変更する

2 つのクラスターのセキュリティグループの名前を変更して、識別しやすくすることができます。これにより、後続の構成が簡素化されます。この例では、[セキュリティグループ名]m1c1-sg および m1c2-sg に設定します。

クラスターのセキュリティグループ名の変更方法を展開して表示

  1. ECS コンソールにログインします。左側のナビゲーションウィンドウで、[ネットワーク & セキュリティ] > [セキュリティグループ] を選択します。

  2. 上部のメニューバーで、ターゲット ECS インスタンスが配置されているリージョンを選択します。

  3. [セキュリティグループ] ページで、ターゲットセキュリティグループの名前にカーソルを合わせ、image アイコンをクリックし、新しい名前を入力してから [OK] をクリックします。

セキュリティグループルールを追加する

2 つのクラスターが相互にアクセスできるように、セキュリティグループルールを追加します。m1c1-sg セキュリティグループの構成ページで、m1c2-sg からのアクセスを承認するルールを追加します。同様に、m1c2-sg セキュリティグループの構成ページで、m1c1-sg からのアクセスを承認するルールを追加します。詳細については、「セキュリティグループルールを追加する」をご参照ください。

図 1. m1c1-sg セキュリティグループ構成の例11

ステップ 2: クラスターを ASM インスタンスに追加し、イングレスゲートウェイをデプロイする

両方のクラスターを ASM インスタンスに追加すると、相互にアクセスできるようになります。したがって、イングレスゲートウェイはクラスターの 1 つにのみデプロイする必要があります。

  1. 2 つのクラスターを ASM インスタンスに追加します。詳細については、「ASM インスタンスにクラスターを追加する」をご参照ください。

  2. m1c1 クラスターにイングレスゲートウェイをデプロイします。詳細については、「イングレスゲートウェイを作成する」をご参照ください。

ステップ 3: 2 つの各クラスターに Bookinfo アプリケーションをデプロイする

このトピックでは、2 つの別々のクラスターに Bookinfo アプリケーションをデプロイする例を使用して、ASM のクラスターローカルトラフィック保持機能を示します。2 つのクラスターのサービス間の唯一の違いは、Reviews コンポーネントのバージョンです。m1c1 クラスターは v1 を使用し、m1c2 クラスターは v2 を使用します。他のすべてのコンポーネントは同じです。

  1. 次の YAML ファイルを使用して、m1c1 に v1 Reviews デプロイメントを持つ Bookinfo アプリケーションをデプロイします。詳細については、「ASM インスタンスに関連付けられたクラスターにアプリケーションをデプロイする」をご参照ください。

    v1 Reviews デプロイメントでは、Web ページの書籍レビューセクションに星評価が表示されません。

    m1c1 の Bookinfo アプリケーションの YAML ファイルを展開して表示

    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 サービス
    ##################################################################################################
    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 サービス
    ##################################################################################################
    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 サービス
    ##################################################################################################
    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. 次の YAML ファイルを使用して、m1c2 に v2 Reviews デプロイメントを持つ Bookinfo アプリケーションをデプロイします。

    v2 Reviews デプロイメントでは、Web ページの書籍レビューセクションに白黒の星評価が表示されます。

    m1c2 の Bookinfo アプリケーションの YAML ファイルを展開して表示

    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 サービス
    ##################################################################################################
    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 サービス
    ##################################################################################################
    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 サービス
    ##################################################################################################
    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: {}
    ---

ステップ 4: ASM でゲートウェイルール、仮想サービス、宛先ルールを作成する

  1. 次の YAML ファイルを使用して、ASM インスタンスの default 名前空間にゲートウェイルールを作成します。詳細については、「ゲートウェイルールを管理する」をご参照ください。

    ゲートウェイルールの YAML を展開して表示

    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. 次の YAML ファイルを使用して、ASM インスタンスの default 名前空間に仮想サービスを作成します。詳細については、「仮想サービスを管理する」をご参照ください。

    仮想サービスの YAML を展開して表示

    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. 次の YAML ファイルを使用して、ASM インスタンスの default 名前空間に宛先ルールを作成します。詳細については、「宛先ルールを管理する」をご参照ください。

    宛先ルールの YAML を展開して表示

    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. ブラウザで http://{INGRESS_GATEWAY_IP}/productpage1 または http://{INGRESS_GATEWAY_IP}/productpage2 にアクセスし、ページをリフレッシュします。

    イングレスゲートウェイの IP アドレスを取得するには、「イングレスゲートウェイを作成する」をご参照ください。

    書籍レビューセクションに星評価が交互に表示される場合、Bookinfo アプリケーションが正常にデプロイされたことを示します。访问productpage页面

プロシージャ

次のプロシージャでは、サービスレベルでクラスターローカルトラフィック保持を有効にして、Reviews サービスのトラフィックをローカルクラスター内に保持する方法を示します。この機能をグローバルレベルまたは名前空間レベルで有効にする方法については、「関連操作」をご参照ください。

  1. ASM コンソールにログインします。左側のナビゲーションウィンドウで、[Service Mesh] > [メッシュ管理] を選択します。

  2. [メッシュ管理] ページで、ASM インスタンスの名前をクリックします。左側のナビゲーションウィンドウで、[ASM インスタンス] > [基本情報] を選択します。

  3. [基本情報] ページで、[構成情報] セクションの [クラスターローカルトラフィック保持] の右側にある [編集] をクリックします。

    配置集群内流量保持

  4. [クラスターローカルトラフィック保持サービスの構成] ダイアログボックスで、[クラスターローカルトラフィック保持を有効にする] スイッチをオンにし、[一部のサービスに適用] を選択してから [サービスの選択] をクリックします。

  5. [サービスの追加] ダイアログボックスで、[サービス] を選択します。[名前空間][default] に設定します。[サービスの選択] セクションで [reviews] を選択し、添加 アイコンをクリックしてから [OK] をクリックします。

    添加服务

  6. 構成が完了したら、[クラスターローカルトラフィック保持サービスの構成] ダイアログボックスで [OK] をクリックします。

    配置集群内流量保持服务

    [構成情報] セクションで、[クラスターローカルトラフィック保持] の右側に 設定済み が表示されます。これは、[クラスターローカルトラフィック保持] 機能が有効になっていることを示します。

  7. クラスターローカルトラフィック保持機能が有効であることを確認します。

    1. ブラウザで http://{INGRESS_GATEWAY_IP}/productpage1 にアクセスし、ページをリフレッシュします。

      書籍レビューセクションには評価が表示されません。验证流量保持-1

    2. ブラウザで http://{INGRESS_GATEWAY_IP}/productpage2 にアクセスし、ページをリフレッシュします。

      書籍レビューセクションには常に白黒の星評価が表示されます。验证集群内流量保持-2

    これらの結果は、クラスターローカルトラフィック保持機能が有効であることを示しています。

結果分析

次の図は、クラスターローカルトラフィック保持機能が有効になる前と後のサービスメッシュ内のトラフィックフローを示しています。网格中流量的调用链路分析

タイプ

説明

クラスターローカルトラフィック保持が無効

Bookinfo アプリケーションでは、Productpage コンポーネントが Reviews サービスを呼び出して書籍レビュー情報を取得します。ブラウザで http://{INGRESS_GATEWAY_IP}/productpage1 にアクセスすると m1c1 クラスターの Productpage にリダイレクトされ、http://{INGRESS_GATEWAY_IP}/productpage2 にアクセスすると m1c2 クラスターの Productpage にリダイレクトされます。

Reviews サービスのワークロードは m1c1 と m1c2 の両方のクラスターに存在します。デフォルトでは、m1c1 のような特定のクラスターの Productpage にアクセスしている場合でも、Reviews サービスへのリクエストは両方のクラスター間で負荷分散されます。Productpage の書籍レビューセクションに星評価が交互に表示されます。

クラスターローカルトラフィック保持が有効

m1c1 クラスターの Productpage など、特定のクラスターにアクセスすると、Reviews サービスへのリクエストは 2 つのクラスター間で負荷分散されません。Productpage ページの書籍レビューセクションには評価が表示されません。交互に表示されていた星評価は表示されなくなります。

重要

トラフィック保持機能が有効になった後、m1c1 クラスターの Reviews-v1 が障害によりオフラインになった場合、Productpage は m1c2 クラスターの Reviews-v2 にアクセスしてサービスを提供することはできません。

説明

あるサービスに対してクラスターローカルトラフィック保持を有効にすると、他のサービスのワークロードはそのサービスの同じクラスター内のエンドポイントにのみアクセスできます。ローカルクラスターのエンドポイントが利用できない場合でも、トラフィックは他のクラスターにあるそのサービスのエンドポイントにはルーティングされません。

サービスに対してクラスターローカルトラフィック保持とトラフィック縮退の両方を実装したい場合は、「トラフィックルールに基づいてトラフィックレーンとトラフィック縮退を構成する」をご参照ください。トラフィックルールを使用してトラフィックレーンを作成し、異なるクラスターのサービスに対してトラフィック縮退を実装できます。

関連操作

クラスターローカルトラフィック保持をグローバルに有効にする

  1. [基本情報] ページで、[構成情報] セクションの [クラスターローカルトラフィック保持] の右側にある [編集] をクリックします。

  2. [クラスターローカルトラフィック保持サービスの構成] ダイアログボックスで、[クラスターローカルトラフィック保持を有効にする] スイッチをオンにし、[すべてのサービスに適用] を選択してから [OK] をクリックします。

    この機能を有効にすると、すべてのサービスのトラフィックがそれぞれのローカルクラスター内に保持されます。

名前空間ごとにクラスターローカルトラフィック保持を有効にする

  1. [基本情報] ページで、[構成情報] セクションの [クラスターローカルトラフィック保持] の右側にある [編集] をクリックします。

  2. [クラスターローカルトラフィック保持サービスの構成] ダイアログボックスで、[クラスターローカルトラフィック保持を有効にする] スイッチをオンにし、[一部のサービスに適用] を選択してから [サービスの選択] をクリックします。

  3. [サービスの追加] ダイアログボックスで、[名前空間] を選択します。[サービスの選択] セクションで、ターゲットの名前空間を選択し、添加 アイコンをクリックしてから [OK] をクリックします。

  4. [クラスターローカルトラフィック保持サービスの構成] ダイアログボックスで、[OK] をクリックします。

    この機能を有効にすると、ターゲット名前空間のサービスへのトラフィックはローカルクラスター内に保持されます。

    按命名空间开启