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

移行は 3 つのステージで構成されます:
ASM イングレスゲートウェイの作成:既存の Istio ゲートウェイと同じ Kubernetes クラスターに ASM イングレスゲートウェイを作成し、同じ CLB インスタンスにアタッチします。
Istio 構成の移行:Gateway、VirtualService、DestinationRule の各リソースを移行し、新しい ASM ゲートウェイをターゲットにします。
トラフィックのシフト: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-listeners | false に設定します。Istio ゲートウェイはデフォルトで CLB リスナーを上書きしますが、このアノテーションにより、ASM ゲートウェイが同様の動作をすることを防ぎます。 |
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-vgroup-port | vServer グループをポートにマッピングします。フォーマット:"<vserver-group-id>:<port>"。複数のマッピングはカンマで区切ります (例:"<vserver-group-id-1>:80, <vserver-group-id-2>:443")。 |
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-weight | ASM ゲートウェイのバックエンドの重み。ルーティングルールが構成される前に 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 構成の移行
Gateway リソースの
selector.istioフィールドを更新して、ASM イングレスゲートウェイを指すようにします:spec: selector: istio: ingressgateway-asm関連する VirtualService および DestinationRule リソースを ASM コントロールプレーンに移行します。
ステップ 3:重み付けルーティングによるトラフィックのシフト
共有 CLB インスタンスのバックエンドの重みを調整して、自己管理型 Istio ゲートウェイから ASM ゲートウェイにトラフィックを移動させます:
ASM ゲートウェイの重みを
10などの低い値に設定し、リクエストが正しくルーティングされることを確認します。エラー率とレイテンシーを監視します。トラフィックが期待どおりに流れる場合は、ASM ゲートウェイの重みを段階的に増やします。
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 インスタンスが自動的にプロビジョニングされた場合は、再利用する前に以下の手順を実行してください:
CLB コンソールを開き、CLB インスタンスを見つけます。インスタンスから次の 2 つのラベルを削除します:
kubernetes.do.not.deleteack.aliyun.com
自己管理型 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"