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

Alibaba Cloud Service Mesh:異なる VPC にある複数の ACK クラスタのディザスタリカバリシナリオ (VPC ネットワーク接続用の CEN に基づく)

最終更新日:Jun 28, 2025

Service Mesh ASM は、アプリケーションサービスのリージョン間トラフィック分散機能とリージョン間フェールオーバー機能を提供します。リージョン間トラフィック分散機能は、指定された重みに従って複数のクラスタにトラフィックをルーティングし、マルチリージョンロードバランシングを実現します。リージョン間フェールオーバー機能は、あるリージョンのサービスに障害が発生した場合、トラフィックを別のリージョンに転送し、リージョン間ディザスタリカバリを実現します。このトピックでは、Bookinfo アプリケーションを使用して、リージョン間フェールオーバー機能とトラフィック分散機能を使用してリージョン間ディザスタリカバリとトラフィックロードバランシングを実装する方法を示します。

ネットワーク構成

vSwitch、VPC、およびクラスタの CIDR ブロック、名前、その他の情報を構成します。詳細については、「データプレーン上の複数のクラスタの CIDR ブロックを計画する」をご参照ください。ネットワーク構成の例を以下に示します。

  • vSwitch と VPC のネットワーク構成

    • VPC

      オブジェクト

      VPC 名

      リージョン

      IPv4 CIDR ブロック

      クラスタ

      vpc-hangzhou

      cn-hangzhou

      20.0.0.0/8

      vpc-shanghai

      cn-shanghai

      21.0.0.0/8

      Service Mesh

      vpc-hangzhou2

      cn-hangzhou

      192.168.0.0/16

    • vSwitch

      重要

      CEN を使用して VPC ネットワークを接続する際にルートの競合を避けるため、2 つの vSwitch で同じ CIDR ブロックを使用することはできません。

      オブジェクト

      vSwitch 名

      VPC

      IPv4 CIDR ブロック

      クラスタ

      vpc-hangzhou-switch-1

      vpc-hangzhou

      20.0.0.0/16

      vpc-shanghai-switch-1

      vpc-shanghai

      21.0.0.0/16

      Service Mesh

      vpc-hangzhou-switch-2

      vpc-hangzhou2

      192.168.0.0/24

  • クラスタの Pod と Service のネットワーク構成

    クラスタ名

    リージョン

    VPC

    Pod CIDR

    Service CIDR

    ack-hangzhou

    cn-hangzhou

    vpc-hangzhou

    10.0.0.0/16

    172.16.0.0/16

    ack-shanghai

    cn-shanghai

    vpc-shanghai

    10.1.0.0/16

    172.17.0.0/16

ステップ 1: 異なるリージョンにクラスタを作成する

  1. 上記の構成に従って、杭州リージョンと上海リージョンに VPC と vSwitch を作成します。詳細については、「vSwitch を作成する」および「VPC と vSwitch を作成する」をご参照ください。

  2. 作成した VPC を使用して、杭州リージョンと上海リージョンにクラスターを作成します。詳細については、「ACK マネージドクラスターを作成する」をご参照ください。

  3. 上記の構成に従って、杭州リージョンに ASM インスタンスを作成します。詳細については、「ASM インスタンスを作成する」をご参照ください。

ステップ 2: CEN を使用してリージョン間 VPC ネットワーク接続を実装する

CEN を使用して、クラスタ間の VPC ネットワークと、クラスタと Service Mesh 間の VPC ネットワークを接続します。

  1. クラウドエンタープライズネットワーク (CEN) コンソール にログインし、CEN インスタンスを作成します。詳細については、「CEN インスタンスを作成する」をご参照ください。

  2. トランジットルーターを作成します。

    1. [CEN インスタンス] ページで、ステップ 1 で作成した CEN インスタンスの名前をクリックし、[基本情報] タブの下にある [トランジットルーターの作成] をクリックします。

    2. [リージョン] を選択し、[名前] を入力して、[OK] をクリックします。

    この例では、2 つのトランジットルーターが構成されています。

    • [リージョン]: [中国 (上海)][名前]: [shanghai-router]

    • [リージョン]: [中国 (杭州)][名前]: [hangzhou-router]

  3. 次の手順を繰り返して、両方のトランジットルーターに VPC を追加します。

    1. トランジットルーターの ID をクリックします。

    2. [リージョン内接続] タブを選択し、[接続の作成] をクリックします。

    3. [インスタンスタイプ][仮想プライベートクラウド (VPC)] を選択し、[ネットワークインスタンス] でリージョンに対応する VPC インスタンスを選択します。

    4. その他のオプションはデフォルトのままにして、[OK] をクリックします。

  4. リージョン間通信の帯域幅を構成します。

    1. ステップ 2 で作成したトランジットルーターの名前をクリックし、ページの右側にある [接続の作成] をクリックします。

    2. [ピアネットワークインスタンスとの接続] ダイアログボックスで、関連パラメータを構成し、[OK] をクリックします。

      次の図は、杭州から上海への接続の例を示しています。[リージョン] はトランジットルーターのリージョンを表し、[ピアリージョン] は宛先リージョンを表します。構成項目の詳細については、「リージョン間接続」をご参照ください。2023-09-27_15-11-25.png

      作成が完了すると、[リージョン間接続] タブでインスタンスを表示できます。

  5. セキュリティグループルールを追加します。

    次の例では、Flannel ネットワークプラグインを使用して、ピアクラスタの Pod ネットワーク CIDR を各クラスタのセキュリティグループに追加します。

    説明

    Terway ネットワークプラグインの場合は、クラスタ vSwitch の CIDR を使用します。VPC コンソール にログインし、[vSwitch] ページの [IPv4 CIDR ブロック] 列から vSwitch の CIDR を取得できます。

    1. ACK コンソール にログインします。左側のナビゲーションウィンドウで、[クラスタ] をクリックします。

    2. Pod ネットワーク CIDR を取得します。

      1. [クラスタ] ページで、上海リージョンを選択し、ack-shanghai クラスタ名をクリックし、[クラスタ情報] ページで [基本情報] タブをクリックして、ack-shanghai クラスタの Pod CIDR ブロックを表示します。

      2. [クラスタ] ページに戻り、杭州リージョンを選択し、ack-hangzhou クラスタ名をクリックし、[クラスタ情報] ページで [基本情報] タブをクリックして、ack-hangzhou クラスタの Pod CIDR ブロックを取得します。

    3. セキュリティグループを構成します。

      1. 各クラスタの [クラスタ情報] ページで、[基本情報] タブをクリックし、[コントロールプレーンセキュリティグループ] の右側にあるセキュリティグループ ID をクリックします。

      2. [受信] タブの下にある [ルールの追加] をクリックします。

      3. [プロトコルタイプ][すべて] に設定し、[ソース] をピアクラスタの Pod CIDR ブロックに設定し、その他のデフォルト値を保持し、[アクション] 列の [保存] をクリックします。

    4. 両方のクラスタのノードにログインし、ping コマンドを使用して、ネットワークが他のクラスタに接続されているかどうかをテストします。詳細については、「ノードにログインする」をご参照ください。

ステップ 3: ASM インスタンスにクラスタを追加し、ホスト型イングレスゲートウェイを作成する

  1. 杭州リージョンと上海リージョンのクラスタを ASM インスタンスに追加します。詳細については、「ASM インスタンスにクラスタを追加する」をご参照ください。

  2. イングレスゲートウェイを作成します。

    apiVersion: istio.alibabacloud.com/v1beta1
    kind: IstioGateway
    metadata:
      annotations:
        asm.alibabacloud.com/managed-by-asm: 'true'  // ASM によって管理されている
      name: ingressgateway
      namespace: istio-system
    spec:
      gatewayType: ingress
      dnsPolicy: ClusterFirst
      externalTrafficPolicy: Local
      hostNetwork: false
      ports:
      - name: http
        port: 80
        protocol: TCP
        targetPort: 80
      - name: https
        port: 443
        protocol: TCP
        targetPort: 443
      replicaCount: 1
      resources:
        limits:
          cpu: '2'
          memory: 2G
        requests:
          cpu: 200m
          memory: 256Mi
      rollingMaxSurge: 100%
      rollingMaxUnavailable: 25%
      runAsRoot: true
      serviceType: LoadBalancer

ステップ 4: Bookinfo デモアプリケーションをデプロイする

重要

以下の手順では、kubeconfig を複数回切り替えます。両方のクラスタの kubeconfig を同じ構成ファイルに構成し、kubectl config use-context を使用して切り替えることをお勧めします。また、kubecm または kubectx を使用して、複数のクラスタの kubeconfig を管理することもできます。

  1. ack-hangzhou クラスタと ack-shanghai クラスタの両方に Bookinfo アプリケーションをデプロイします。

    kubectl apply -f bookinfo.yaml
  2. kubectl を使用して ASM インスタンスに接続し、ルーティングルールを作成します。

    1. 以下の内容で asm.yaml を作成します。

      展開して YAML コンテンツを表示

      apiVersion: networking.istio.io/v1alpha3
      kind: Gateway
      metadata:
        name: bookinfo-gateway
      spec:
        selector:
          istio: ingressgateway # istio デフォルトコントローラーを使用
        servers:
        - port:
            number: 80
            name: http
            protocol: HTTP
          hosts:
          - "*"
      ---
      apiVersion: networking.istio.io/v1alpha3
      kind: VirtualService
      metadata:
        name: bookinfo
      spec:
        hosts:
        - "*"
        gateways:
        - bookinfo-gateway
        http:
        - match:
          - uri:
              exact: /productpage
          - uri:
              prefix: /static
          - uri:
              exact: /login
          - uri:
              exact: /logout
          - uri:
              prefix: /api/v1/products
          route:
          - destination:
              host: productpage
              port:
                number: 9080
      ---
      apiVersion: networking.istio.io/v1alpha3
      kind: DestinationRule
      metadata:
        name: productpage
      spec:
        host: productpage
        subsets:
        - name: v1
          labels:
            version: v1
      ---
      apiVersion: networking.istio.io/v1alpha3
      kind: DestinationRule
      metadata:
        name: reviews
      spec:
        host: reviews
        subsets:
        - name: v1
          labels:
            version: v1
        - name: v2
          labels:
            version: v2
        - name: v3
          labels:
            version: v3
      ---
      apiVersion: networking.istio.io/v1alpha3
      kind: DestinationRule
      metadata:
        name: ratings
      spec:
        host: ratings
        subsets:
        - name: v1
          labels:
            version: v1
        - name: v2
          labels:
            version: v2
        - name: v2-mysql
          labels:
            version: v2-mysql
        - name: v2-mysql-vm
          labels:
            version: v2-mysql-vm
      ---
      apiVersion: networking.istio.io/v1alpha3
      kind: DestinationRule
      metadata:
        name: details
      spec:
        host: details
        subsets:
        - name: v1
          labels:
            version: v1
        - name: v2
          labels:
            version: v2
      ---
      	  
    2. ルーティングルールを作成します。

      kubectl apply -f asm.yaml
  3. Bookinfo アプリケーションが正常にデプロイされていることを確認します。

    1. イングレスゲートウェイのアドレスを取得する

    2. ブラウザのアドレスバーに http://{イングレスゲートウェイの IP アドレス}/productpage と入力し、ページを 10 回更新して Bookinfo アプリケーションにアクセスします。

      Bookinfo アプリケーションは、reviews サービスの v1、v2、v3 バージョンにアクセスします。reviews サービスの 3 つのバージョンへのリクエストの比率が 1:1:1 に近いことがわかります。

      yuque_diagram

ステップ 5: リージョン間フェールオーバーとリージョン間トラフィック分散を使用する

リージョン間フェールオーバーを構成する

  1. ack-hangzhou クラスタの review サービスを無効にします。

    1. ACK コンソール にログインします。左側のナビゲーションウィンドウで、[クラスタ] をクリックします。

    2. [クラスタ] ページで、管理するクラスタを見つけ、その名前をクリックします。左側のペインで、[ワークロード] > [デプロイメント] を選択します。

    3. [デプロイメント] ページで、[名前空間] を default に設定し、[アクション] 列の [スケール] をクリックします。

    4. [必要な Pod 数] を 0 に設定し、[OK] をクリックします。

  2. 宛先ルールを構成します。

    1 秒以内に review サービスにアクセスできない場合、1 分間排出されるように宛先ルールを構成します。

    1. ASM インスタンスの詳細ページで、左側のナビゲーションウィンドウの [トラフィック管理センター] > [宛先ルール] を選択します。

    2. reviews の [アクション] 列の [YAML の編集] をクリックします。

    3. 次のコンテンツを追加し、[OK] をクリックします。

      spec:
        ......
        trafficPolicy:  // トラフィックポリシー
          connectionPool:  // 接続プール
            http:
              maxRequestsPerConnection: 1  // 接続あたりの最大リクエスト数
          outlierDetection:  // 外れ値検出
            baseEjectionTime: 1m  // 最小排出時間
            consecutive5xxErrors: 1  // 連続エラー数
            interval: 1s  // 排出検出の時間間隔
      
      • maxRequestsPerConnection: 接続の最大数。

      • baseEjectionTime: 最小排出期間。

      • consecutive5xxErrors: 連続エラーの数。

      • interval: 排出検出の時間間隔。

  3. リージョン間フェールオーバーを有効にします。

    1. ASM インスタンスの詳細ページで、左側のナビゲーションウィンドウの [ASM インスタンス] > [基本情報] を選択します。

    2. ASM インスタンスバージョン 1.22.6.66 未満の場合

      1. [基本情報] ページで、[地理位置情報に基づくロードバランシング] の右側にある [設定] をクリックします。

      2. [地理位置情報に基づくフェイルオーバー] ダイアログボックスで、[ポリシー] が cn-shanghai の場合は [フェイルオーバー先] を cn-hangzhou に設定し、[ポリシー] が cn-hangzhou の場合は [フェイルオーバー先] を cn-shanghai に設定してから、[確認] をクリックします。

      ASM インスタンスバージョン 1.22.6.66 以降の場合

      1. [基本情報] ページで、[Geolocation-based Load Balancing] の右側にある [Geolocation-based Load Balancing を構成する] をクリックします。

      2. [リージョンの優先ルールを指定する] をクリックします。[障害が発生したリージョン]cn-shanghai に設定し、[トラフィックが優先的にルーティングされるリージョン]cn-hangzhou に設定します。

      3. [追加] をクリックし、[障害が発生したリージョン]cn-hangzhou に、[トラフィックが優先的にルーティングされるリージョン]cn-shanghai に設定し、[構成の保存] をクリックします。

  4. 次のコマンドを実行して、Bookinfo アプリケーションに 10 回リクエストし、reviews サービスの v2 バージョンにルーティングされた結果の数をカウントします。

    for ((i=1;i<=10;i++));do curl http://<ack-hangzhou クラスタのイングレスゲートウェイの IP アドレスのポート 80>/productpage 2>&1|grep full.stars;done|wc -l

    期待される出力:

    20

    出力は、10 件のアクセスリクエストが行われ、20 行の結果が返されたことを示しています (リクエストが reviews サービスの v2 バージョンにルーティングされるたびに、full stars を含む 2 行が返されます)。これは、10 件のリクエストすべてが ack-shanghai クラスタの reviews サービスの v2 バージョンにルーティングされ、リージョン間フェールオーバーが成功したことを示しています。

リージョン間トラフィック分散を構成する

重要

リージョン間トラフィック分散機能は、バージョン 1.22.6.66 以上 のインスタンスでのみサポートされています。

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

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

  3. [基本情報] ページで、[Geolocation-based Load Balancing] の右側にある [Geolocation-based Load Balancing を構成する] をクリックします。

  4. [トラフィック分散ルールを設定] をクリックし、[送信元]cn-hangzhou に、[宛先]cn-shanghai に、[トラフィックの割合] を 10% に設定し、[設定を保存] をクリックします。

    説明

    地理的な場所に基づく負荷分散は、デフォルトでフェールオーバーモードで有効になっています。トラフィック分散モードを再選択して有効にするには、ページの右上隅にある [無効化] をクリックする必要があります。

  5. 次のコマンドを実行して、Bookinfo アプリケーションに 10 回リクエストし、リージョン間トラフィック分散が成功したかどうかを確認します。

    for ((i=1;i<=10;i++));do curl http://<ack-hangzhou クラスタのイングレスゲートウェイの IP アドレスのポート 80>/productpage 2>&1|grep full.stars;done

    期待される出力:

    <!-- full stars: -->
    <!-- full stars: -->
    

    出力には、10 回のアクセス後に 2 行の full stars が表示されています。これは、10 件のリクエストのうち 9 件が ack-hangzhou クラスタの reviews サービスの v1 バージョンにルーティングされ、1 件が ack-shanghai クラスタの reviews サービスの v2 バージョンにルーティングされたことを示しています。これにより、構成された重みに従ってトラフィックが複数のクラスタに正常にルーティングされていることが確認されます。

よくある質問

CEN 経由でクラスタ VPC ネットワークを接続したにもかかわらず、ASM への Kubernetes クラスタの追加が失敗するのはなぜですか?

クラスタが異なるリージョンにある場合、リージョン間データ転送プランを購入していないか、クラスタ VPC ネットワークの接続時にリージョン間トラフィックを正しく構成していないと、ASM コントロールプレーンはデータプレーンクラスタに接続できず、ASM にクラスタを追加できません。

この問題を解決するには、クラウドエンタープライズネットワーク (CEN) でリージョン間トラフィック設定を再構成して、クラスタ VPC ネットワークを接続する必要があります。詳細については、「ステップ 2: CEN を使用してリージョン間 VPC 通信を実装する」をご参照ください。