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

Alibaba Cloud Service Mesh:自己管理型 Istio イングレスゲートウェイから ASM イングレスゲートウェイへのトラフィック移行

最終更新日:Mar 11, 2026

自己管理型 Istio イングレスゲートウェイを Service Mesh (ASM) と並行して実行している場合、トラフィックを ASM イングレスゲートウェイに移行することで、ASM コントロールプレーンによる一元管理が可能になります。両方のゲートウェイで 1 つのクラシックロードバランサー (CLB) インスタンスを共有し、重み付けによるトラフィック分割を利用することで、ダウンタイムを最小限に抑えながら段階的にトラフィックをシフトできます。

仕組み

Migration solution diagram

移行は 3 つのステージで構成されます:

  1. ASM イングレスゲートウェイの作成:既存の Istio ゲートウェイと同じ Kubernetes クラスターに ASM イングレスゲートウェイを作成し、同じ CLB インスタンスにアタッチします。

  2. Istio 構成の移行:Gateway、VirtualService、DestinationRule の各リソースを移行し、新しい ASM ゲートウェイをターゲットにします。

  3. トラフィックのシフト:ASM ゲートウェイがリクエストの 100% を処理するまで、CLB インスタンスのバックエンドの重みを調整してトラフィックをシフトします。

前提条件

開始する前に、以下の前提条件を満たしていることを確認してください:

  • Kubernetes クラスターが追加された ASM インスタンス。詳細については、「イングレスゲートウェイの作成」をご参照ください。

  • 同じクラスターで実行中の自己管理型 Istio イングレスゲートウェイ

  • CLB コンソールへの管理者アクセス権 (既存の CLB インスタンスを再利用する場合に必要)

ステップ 1:ASM イングレスゲートウェイの作成

ASM インスタンス用に新しいイングレスゲートウェイを作成します。完全な手順については、「イングレスゲートウェイの作成」をご参照ください。

ゲートウェイを作成するとき:

  • ゲートウェイ名:既存の Istio ゲートウェイとは異なる名前を選択します。区別するために -asm を追加します (例:ingressgateway-asm)。

  • ターゲットクラスター -- 作成プロシージャのステップ 3で、[クラスター] パラメーターを、セルフマネージド Istio イングレスゲートウェイが実行される Kubernetes クラスターに設定します。

  • トラフィックエントリポイント:ドメインの DNS レコードを、新しい ASM イングレスゲートウェイの IP アドレスに向けます。DNS レコードの変更が現実的でない場合は、両方のゲートウェイで既存の CLB インスタンスを共有し、バックエンドの重みを通じてトラフィックのディストリビューションをコントロールします。このガイドの残りの部分では、共有 CLB アプローチを前提としています。

既存の CLB インスタンスの再利用

ASM イングレスゲートウェイが自己管理型 Istio ゲートウェイと CLB インスタンスを共有する場合、ゲートウェイの YAML に以下のサービスアノテーションを追加します:

アノテーション説明
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-id再利用する CLB インスタンスの ID (例:lb-xxxxx)。
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-force-override-listenersfalse に設定します。Istio ゲートウェイはデフォルトで CLB リスナーを上書きしますが、このアノテーションにより、ASM ゲートウェイが同様の動作をすることを防ぎます。
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-vgroup-portvServer グループをポートにマッピングします。フォーマット:"<vserver-group-id>:<port>"。複数のマッピングはカンマで区切ります (例:"<vserver-group-id-1>:80, <vserver-group-id-2>:443")。
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-weightASM ゲートウェイのバックエンドの重み。ルーティングルールが構成される前に 0 に設定することで、CLB が準備のできていないゲートウェイにトラフィックを転送しないようにします。

YAML のサンプル:

serviceAnnotations:
  service.beta.kubernetes.io/alibaba-cloud-loadbalancer-id: "lb-xxxxx"  # ご利用の CLB インスタンス ID に置き換えてください。
  service.beta.kubernetes.io/alibaba-cloud-loadbalancer-force-override-listeners: 'false'  # 既存のリスナーを保持します。
  service.beta.kubernetes.io/alibaba-cloud-loadbalancer-vgroup-port: "<your-vserver-group-id>:80"  # ご利用の vServer グループ ID に置き換えてください。
  service.beta.kubernetes.io/alibaba-cloud-loadbalancer-weight: "60"  # ルーティングルールが構成されていない場合や例外が発生した場合は 0 に設定します。
LoadBalancer サービスタイプを通じて作成された CLB インスタンスの再利用に関する詳細については、「よくある質問:自己管理型 Istio Service によって作成された CLB インスタンスの再利用」をご参照ください。

ステップ 2:Istio 構成の移行

  1. Gateway リソースの selector.istio フィールドを更新して、ASM イングレスゲートウェイを指すようにします:

       spec:
         selector:
           istio: ingressgateway-asm
  2. 関連する VirtualService および DestinationRule リソースを ASM コントロールプレーンに移行します。

ステップ 3:重み付けルーティングによるトラフィックのシフト

共有 CLB インスタンスのバックエンドの重みを調整して、自己管理型 Istio ゲートウェイから ASM ゲートウェイにトラフィックを移動させます:

  1. ASM ゲートウェイの重みを 10 などの低い値に設定し、リクエストが正しくルーティングされることを確認します。

  2. エラー率とレイテンシーを監視します。トラフィックが期待どおりに流れる場合は、ASM ゲートウェイの重みを段階的に増やします。

  3. ASM ゲートウェイの重みが 100 になり、Istio ゲートウェイの重みが 0 になるまで続けます。

重みは service.beta.kubernetes.io/alibaba-cloud-loadbalancer-weight サービスアノテーションを通じて調整します:

  • 自己管理型 Istio ゲートウェイ:Istio ゲートウェイの Service のアノテーションを編集します。

  • ASM ゲートウェイ:ASM イングレスゲートウェイの Service のアノテーションを編集します。

よくある質問:自己管理型 Istio Service によって作成された CLB インスタンスの再利用

自己管理型 Istio イングレスゲートウェイ用に LoadBalancer タイプの Service が作成されたときに CLB インスタンスが自動的にプロビジョニングされた場合は、再利用する前に以下の手順を実行してください:

  1. CLB コンソールを開き、CLB インスタンスを見つけます。インスタンスから次の 2 つのラベルを削除します:

    • kubernetes.do.not.delete

    • ack.aliyun.com

  2. 自己管理型 Istio イングレスゲートウェイの Service に、次のアノテーションを追加します:プレースホルダーを実際の値に置き換えてください:

    プレースホルダー説明
    <clb-instance-id>CLB コンソールに表示される CLB インスタンスの ID。
    <vserver-group-id>CLB インスタンスに関連付けられている vServer グループの ID。
    <port>リスナーポート番号 (例:80 または 443)。
       service.beta.kubernetes.io/alibaba-cloud-loadbalancer-force-override-listeners: "false"
       service.beta.kubernetes.io/alibaba-cloud-loadbalancer-id: <clb-instance-id>
       service.beta.kubernetes.io/alibaba-cloud-loadbalancer-vgroup-port: <vserver-group-id>:<port>
       service.beta.kubernetes.io/alibaba-cloud-loadbalancer-weight: "100"