データプレーンクラスターが Alibaba Cloud の外部 (別のクラウドプロバイダーやオンプレミスデータセンターなど) で実行されている場合、サイドカープロキシはインターネット経由で Alibaba Cloud Service Mesh (ASM) コントロールプレーンにアクセスする必要があります。Pod の数が増えるにつれて、ネットワーク接続と帯域幅の消費量が線形的に増加し、構成やサービスが頻繁に変更されるとプッシュレイテンシが増大します。ASM リモートコントロールプレーンは、外部クラスター内にローカルのコントロールプレーンインスタンスをデプロイすることでこの問題を解決します。これにより、サイドカープロキシは制約のあるネットワークリンクを介さず、ローカルで xDS 構成を受信できます。
仕組み
データプレーンクラスターが Alibaba Cloud の Virtual Private Cloud (VPC) 内で実行されている場合、サイドカープロキシは VPC ネットワークを通じてマネージド ASM コントロールプレーンに接続します。レイテンシは低く、構成のプッシュもスムーズなため、リモートコントロールプレーンは不要です。
データプレーンクラスターが Alibaba Cloud の外部で実行されている場合、状況は異なります。すべての Pod はインターネット経由でマネージドコントロールプレーンに接続し、接続数と帯域幅の使用量は Pod 数に比例して増加します。構成やサービスが頻繁に変更されると、プッシュレイテンシが増大します。
リモートコントロールプレーンは、外部クラスター内でコントロールプレーンインスタンスを実行することで、この問題に対処します。
リモートコントロールプレーンを有効にすると、以下のようになります。
xDS 構成は、クラスター内でローカルにサイドカープロキシへプッシュされます。
マネージド ASM コントロールプレーンと外部クラスターの間には、コントロールプレーンコンポーネントの更新とサービス検出データを伝送するための少数の接続のみが残ります。
低レイテンシ、高帯域幅のネットワークリンクへの依存が大幅に軽減されます。
制限事項
リモートコントロールプレーンを有効にする前に、以下の制限事項を確認してください。
ASM kubeconfig を使用して ASM リソースを作成する。 リモートコントロールプレーンを有効にした後、ASM 関連のすべての Kubernetes リソースは、ASM インスタンスの kubeconfig を使用して作成してください。リモートクラスターの kubeconfig を使用すると、リソースが上書きされる可能性があります。
グローバルサービス検出が適用される。 マネージド ASM コントロールプレーンによって管理されるワークロードは、リモートコントロールプレーンによって管理されるサービスにアクセスできます。通信はデフォルトで mTLS を使用し、East-West ASM ゲートウェイがサポートされています。
まずデータプレーンの Kubernetes API アクセス機能を無効にする。 リモートコントロールプレーンは、[データプレーン上のクラスターの Kubernetes API を使用して Istio リソースにアクセスする] 機能と競合します。リモートコントロールプレーンを有効にする前に、この機能を無効にしてください。
前提条件
開始する前に、以下のものがあることを確認してください。
バージョン 1.22 以降を実行している ASM インスタンス。詳細については、「ASM インスタンスの作成」をご参照ください。
ASM インスタンスに追加された 2 つのデータプレーンクラスター。詳細については、「ASM インスタンスへのクラスターの追加」をご参照ください。
cluster-1:サイドカープロキシが VPC ネットワークを介して ASM コントロールプレーンに直接接続する Alibaba Cloud ACK クラスター
cluster-2:サイドカープロキシが ASM コントロールプレーンに直接接続できない、またはネットワークパスの帯域幅が制限されている外部の登録済みクラスターまたはリモートクラスター。Alibaba Cloud 以外のクラスターの追加に関する詳細については、「ASM を介した登録済みクラスターアプリケーションの管理」または「kubeconfig を介してインポートされた Kubernetes クラスターの管理」をご参照ください。
クラスターコンテキスト変数の設定
クラスターを切り替える際のエラーを避けるため、開始する前に各 kubeconfig コンテキストの環境変数を設定します。
export CTX_ASM=<kubeconfig-context-for-asm-instance>
export CTX_CLUSTER2=<kubeconfig-context-for-cluster-2>プレースホルダーを実際の値に置き換えてください。
| プレースホルダー | 説明 | 例 |
|---|---|---|
<kubeconfig-context-for-asm-instance> | ご利用の ASM インスタンスの kubeconfig コンテキスト名 | asm-mesh-xxx |
<kubeconfig-context-for-cluster-2> | 外部クラスターの kubeconfig コンテキスト名 | cluster-2-context |
このガイドの以降のすべてのコマンドでは、これらの変数を使用します。
リモートコントロールプレーンの有効化
ASMMeshConfig リソースを編集用に開きます。
kubectl --context="${CTX_ASM}" edit ASMMeshConfig.specの下にexternalIstiodConfigurationsセクションを追加します。<cluster-2-id>を cluster-2 の ClusterID に置き換えてください。apiVersion: istio.alibabacloud.com/v1beta1 kind: ASMMeshConfig metadata: name: default spec: # ... 既存の構成 ... externalIstiodConfigurations: <cluster-2-id>: replicas: 2 # オプション:リソースリクエストとリミットを指定します。 # 構造は、標準の Kubernetes Pod のリソースフィールドと一致します。 # 省略した場合、ASM はデフォルトのリソース設定を使用します。説明リモートコントロールプレーンを有効にすると、ターゲットクラスター内の ASM ゲートウェイが再起動します。続行する前に、トラフィックへの影響を評価してください。
テストアプリケーションのデプロイと検証
sleepとhttpbinアプリケーションを cluster-2 にデプロイします。詳細については、「httpbin アプリケーションのデプロイ」をご参照ください。両方の Pod がサイドカーインジェクションで実行されていることを確認します。期待される出力:READY 列の
2/2は、各アプリケーションコンテナと一緒にサイドカープロキシがインジェクトされていることを示します。kubectl --context="${CTX_CLUSTER2}" get podNAME READY STATUS RESTARTS AGE httpbin-7df7fxxxxx-xxxxx 2/2 Running 0 3h15m sleep-6b7f9xxxxx-xxxxx 2/2 Running 0 3h15msleepからhttpbinにテストリクエストを送信します。期待される出力:ASCII ティーポット (HTTP 418) は、トラフィックがサイドカープロキシを通過し、リモートコントロールプレーンが構成を正しく提供していることを示します。kubectl --context="${CTX_CLUSTER2}" exec deploy/sleep -it -- curl httpbin:8000/status/418-=[ teapot ]=- _...._ .' _ _ `. | ."` ^ `". _, \_;`"---"`|// | ;/ \_ _/ `"""`
クラスター間アクセスの設定
デフォルトでは、マネージド ASM コントロールプレーンによって管理されるワークロードは、リモートコントロールプレーンのサービスにアクセスできます。その逆は適用されません。つまり、リモートコントロールプレーン配下のサービスは、マネージドコントロールプレーン配下のサービスに到達できません。
要件に合ったオプションを選択してください。
クラスター間のアクセスが不要な場合。 クラスター内トラフィック保持機能を使用して、各クラスターのトラフィックをローカルに保ちます。詳細については、「マルチクラスターシナリオで ASM ローカルクラスター内トラフィック保持機能を有効にする」をご参照ください。
双方向のクラスター間アクセスが必要な場合。 リモートコントロールプレーンとマネージドコントロールプレーンのワークロード間の相互アクセスを有効にします。詳細については、「リモートコントロールプレーンとマネージドコントロールプレーンのワークロード間の相互アクセスを実現する」をご参照ください。