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

Alibaba Cloud Service Mesh:同一 VPC 内の ACK クラスターの災害復旧

最終更新日:Jun 22, 2026

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

前提条件

  • 同一の Virtual Private Cloud (VPC) 内に 2 つの Container Service for Kubernetes (ACK) クラスターが作成されていること。このトピックでは、クラスターの名前は m1c1 と m1c2 です。詳細については、「ACK 専用クラスターの作成 (廃止)」をご参照ください。

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

事前準備

ステップ 1:クラスター間接続の設定

(オプション) セキュリティグループの名前変更

識別しやすくするために、両方のクラスターのセキュリティグループの名前を変更します。この例では、セキュリティグループ名 をそれぞれ m1c1-sgm1c2-sg に設定します。

クラスターのセキュリティグループ名を変更する方法

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

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

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

セキュリティグループルールの追加

クラスター間で相互にアクセスできるように、セキュリティグループルールを追加します。m1c1-sg セキュリティグループの設定で、m1c2-sg からのアクセスを許可するルールを追加します。同様に、m1c2-sg セキュリティグループについても、m1c1-sg からのアクセスを許可するルールを追加します。詳細については、「セキュリティグループルールの追加」をご参照ください。

inbound 方向にルールを追加します。Authorization Policy を [Allow]、Protocol Type を [All]、Port Range を [-1/-1]、Authorization Type を [Security Group Access]、Priority を [1] に設定します。

ステップ 2:クラスターの追加とイングレスゲートウェイのデプロイ

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

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

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

ステップ 3:各クラスターへの Bookinfo のデプロイ

クラスター内トラフィック維持機能を検証するために、このトピックでは、わずかに異なる 2 つの Bookinfo アプリケーションを使用します。唯一の違いは、Reviews Service のバージョンです。m1c1 では v1 を実行し、m1c2 では v2 を実行します。

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

    Reviews Service の v1 Deployment では、書籍レビューセクションに星評価が表示されません。

    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 Deployment を含む Bookinfo アプリケーションをデプロイします。

    Reviews Service の v2 Deployment では、書籍レビューセクションに評価が黒い星として表示されます。

    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:Gateway、VirtualService、DestinationRule の作成

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

    Gateway 用 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 名前空間に VirtualService を作成します。詳細については、「仮想サービスの管理」をご参照ください。

    VirtualService 用 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 名前空間に DestinationRule を作成します。詳細については、「宛先ルールの管理」をご参照ください。

    DestinationRule 用 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://{イングレスゲートウェイの IP アドレス}/productpage1 または http://{イングレスゲートウェイの IP アドレス}/productpage2 にアクセスし、ページを更新します。

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

    書籍レビューセクションで星評価が交互に表示されたり非表示になったりする場合、Bookinfo アプリケーションは正常にデプロイされています。ページには「BookInfo Sample」アプリケーションの「productpage」が表示され、書籍「The Comedy of Errors」に関する情報が表示されます。

操作手順

以下の手順では、特定のサービス (この場合は Reviews Service) に対してクラスター内トラフィック維持機能を有効にする方法について説明します。グローバルまたは名前空間レベルでこの機能を有効にする方法については、「関連操作」をご参照ください。

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

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

  3. Base Information ページの Config Info セクションで、edit の右側にある Keep traffic in cluster をクリックします。

  4. Configure services that keep traffic in cluster ダイアログボックスで、Enable Keep traffic in cluster スイッチをオンにし、Select Service を選択し、Select services をクリックします。

  5. Add services ダイアログボックスで、Service を選択し、[名前空間] ドロップダウンリストから Namespace を選択し、[サービスの選択] セクションで Select services を選択し、添加 アイコンをクリックし、OK をクリックします。

  6. 設定が完了したら、Configure services that keep traffic in clusterOK ダイアログボックスでクリックします。

    Config Info セクションでは、Keep traffic in cluster の右側に 設定済み と表示されます。これは、Keep traffic in cluster 機能が有効であることを示します。

  7. クラスター内トラフィック維持機能が動作していることを確認します。

    1. ブラウザーで http://{イングレスゲートウェイの IP アドレス}/productpage1 にアクセスし、ページを更新します。

      書籍レビューセクションに評価が一貫して表示されないことから、クラスター内トラフィック維持機能が期待どおりに動作していることがわかります。

    2. ブラウザーで http://{イングレスゲートウェイの IP アドレス}/productpage2 にアクセスし、ページを更新します。

      書籍レビューセクションに黒い星評価付きのレビューが一貫して表示されます。ページには書籍「The Comedy of Errors」の詳細と「Book Reviews」セクションのレビュー内容が正しく表示されます。これにより、トラフィックが m1c2 クラスター内のローカルサービスに正しくルーティングされていることが確認できます。

結果分析

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

状態

説明

無効

Bookinfo アプリケーションでは、Productpage Service が Reviews Service を呼び出して書籍レビューを取得します。ブラウザーで http://{イングレスゲートウェイの IP アドレス}/productpage1 にアクセスすると、m1c1 クラスター内の Productpage Service にアクセスします。http://{イングレスゲートウェイの IP アドレス}/productpage2 にアクセスすると、m1c2 クラスター内の Productpage Service にアクセスします。

Reviews Service のワークロードは、m1c1 と m1c2 の両方のクラスターに存在します。デフォルトでは、Service Mesh は、トラフィックがいずれかのクラスター内のサービス (たとえば、m1c1 の Productpage Service) から発生した場合でも、Reviews Service へのリクエストを両方のクラスター間で負荷分散します。その結果、書籍レビューセクションに星評価が交互に表示されたり非表示になったりします。

有効

m1c1 などの特定のクラスター内の Productpage Service にアクセスすると、Service Mesh はクラスター間でリクエストを負荷分散しなくなります。代わりに、すべてのリクエストをローカルの Reviews Service にルーティングします。その結果、書籍レビューセクションには一貫して星評価が表示されなくなります。

重要

この機能を有効にした後、m1c1 クラスター内の reviews-v1 Service に障害が発生した場合、Productpage Service は m1c2 クラスター内の reviews-v2 Service にフェールオーバーできません。

説明

サービスに対してクラスター内トラフィック維持機能を有効にすると、呼び出し元は同じクラスター内のサービスのエンドポイントにのみアクセスできます。クラスター内のエンドポイントが利用できない場合でも、メッシュは他のクラスター内のエンドポイントにトラフィックをシフトしません。

サービスのトラフィックをクラスター内に維持しつつフェールオーバーも有効にするには、トラフィックルールを使用してトラフィックレーンを作成し、トラフィックシフトを有効にします。詳細については、「トラフィックルールを使用したトラフィックレーンとトラフィックシフトの設定」をご参照ください。

関連操作

グローバルなクラスター内トラフィックの有効化

  1. Base Information ページの Config Info セクションで、edit の右側にある Keep traffic in cluster をクリックします。

  2. Configure services that keep traffic in cluster ダイアログボックスで、Enable Keep traffic in cluster スイッチをオンにし、All Services を選択して、OK をクリックします。

    このオプションを有効にすると、Service Mesh はすべてのトラフィックを送信元クラスター内に留めます。

名前空間のクラスター内トラフィックの有効化

  1. Base Information ページの Config Info セクションで、edit の右側にある Keep traffic in cluster をクリックします。

  2. Configure services that keep traffic in cluster ダイアログボックスで、Enable Keep traffic in cluster スイッチをオンにし、Select Service を選択してから、Select services をクリックします。

  3. Add services ダイアログボックスで Namespace を選択し、Select services セクションでターゲット名前空間を選択して 添加 アイコンをクリックし、OK をクリックします。

  4. Configure services that keep traffic in cluster ダイアログボックスで、OK をクリックします。

    このオプションを有効にすると、Service Mesh は対象の名前空間内のサービスへのトラフィックを送信元クラスター内に留めます。