モダナイゼーションのための構成の更新

このドキュメントでは、ISTIOD コントロール プレーンから TRAFFIC_DIRECTOR コントロール プレーンにメッシュをモダナイズする前に、マネージド Cloud Service Mesh に行う必要のある構成の更新について説明します。

モダナイゼーション ワークフローの詳細については、マネージド コントロール プレーンのモダナイゼーションのページをご覧ください。

Istio シークレットから multicluster_mode に移行する

クラスタが TRAFFIC_DIRECTOR コントロール プレーンを使用している場合、マルチクラスタ シークレットはサポートされません。このドキュメントでは、Istio マルチクラスタ シークレットから multicluster_mode へのモダナイゼーションの方法について説明します。

Istio シークレットと宣言型 API の概要

オープンソースの Istio マルチクラスタ エンドポイント検出は、istioctl などのツールを使用してクラスタに Kubernetes Secret を作成することによって機能します。この Secret により、クラスタはメッシュ内の別のクラスタにトラフィックをロードバランスできます。ISTIOD コントロール プレーンは、この Secret を読み取り、その他のクラスタへのトラフィックのルーティングを開始します。

Cloud Service Mesh には、Istio シークレットを直接作成するのではなく、マルチクラスタ トラフィックを制御する宣言型 API があります。この API は、Istio シークレットを実装の詳細として扱い、Istio シークレットを手動で作成するよりも信頼性が高いです。今後の Cloud Service Mesh の機能は宣言型 API に依存するため、これらの新機能を Istio シークレットと直接使用することはできません。今後サポート対象となる方法は、宣言型 API のみです。

Istio シークレットを使用している場合は、宣言型 API への移行をできるだけ早く行ってください。multicluster_mode 設定では、各クラスタがメッシュ内の他のすべてのクラスタにトラフィックを転送するように指示します。シークレットを使用すると、より柔軟な構成が可能になり、メッシュ内のどのクラスタにトラフィックを転送するかをクラスタごとに構成できます。宣言型 API と Istio シークレットでサポートされている機能の違いの一覧については、Istio API を使用するサポートされている機能をご覧ください。

Istio シークレットから宣言型 API に移行する

フリート機能の API で自動管理を使用して Cloud Service Mesh をプロビジョニングした場合は、次の手順を行う必要はありません。これらの手順は、asmcli --managed を使用してオンボーディングした場合にのみ適用されます。

このプロセスでは、クラスタを参照するシークレットが変更されます。このプロセス中に、エンドポイントが削除されてから再び追加されます。エンドポイントの削除と追加の間、トラフィックは他のクラスタへのロード バランシングではなく、ローカル ルーティングに短時間戻ります。詳しくは、GitHub に関する問題をご覧ください。

Istio シークレットの使用から宣言型 API に移行する手順は次のとおりです。次の手順を同時に、または連続して実行します。

  1. マルチクラスタ エンドポイント検出を有効にするフリート内の各クラスタで、multicluster_mode=connected を設定して宣言型 API を有効にします。クラスタを検出できないようにするには、multicluster_mode=disconnected を明示的に設定する必要があります。

    マルチクラスタ エンドポイント検出のクラスタを有効にするには、次のコマンドを使用します。

     kubectl patch configmap/asm-options -n istio-system --type merge -p '{"data":{"multicluster_mode":"connected"}}'
    

    次のコマンドを使用して、クラスタでエンドポイント検出を無効にします。

     kubectl patch configmap/asm-options -n istio-system --type merge -p '{"data":{"multicluster_mode":"disconnected"}}'
    
  2. 古いシークレットを削除します。

    クラスタに multicluster_mode=connected を設定すると、multicluster_mode=connected が設定されている他のすべてのクラスタに対して、各クラスタに新しいシークレットが生成されます。このシークレットは istio-system Namespace に配置され、次の形式になります。

    istio-remote-secret-projects-PROJECT_NAME-locations-LOCATION-memberships-MEMBERSHIPS
    

    各シークレットには、ラベル istio.io/owned-by: mesh.googleapis.com も適用されます。

    新しいシークレットが作成されたら、istioctl create-remote-secret で手動で作成したシークレットを削除できます。

    kubectl delete secret SECRET_NAME -n istio-system
    

移行したら、リクエスト指標を確認して、想定どおりにルーティングされていることを確認します。