モダナイゼーションのための構成の更新
このドキュメントでは、ISTIOD コントロール プレーンから TRAFFIC_DIRECTOR コントロール プレーンにメッシュをモダナイズする前に、マネージド Cloud Service Mesh に行う必要のある構成の更新について説明します。
モダナイゼーション ワークフローの詳細については、マネージド コントロール プレーンのモダナイゼーションのページをご覧ください。
Istio シークレットから multicluster_mode に移行する
クラスタが TRAFFIC_DIRECTOR コントロール プレーンを使用している場合、マルチクラスタ シークレットはサポートされません。このドキュメントでは、Istio マルチクラスタ シークレットから multicluster_mode へのモダナイゼーションの方法について説明します。
Istio シークレットと宣言型 API の概要
オープンソースの Istio マルチクラスタ エンドポイント検出は、istioctl などのツールを使用してクラスタに Kubernetes Secret を作成することによって機能します。このシークレットにより、クラスタはメッシュ内の別のクラスタにトラフィックをロードバランスできます。ISTIOD コントロール プレーンは、このシークレットを読み取り、その他のクラスタへのトラフィックのルーティングを開始します。
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 に移行する手順は次のとおりです。次の手順を同時に、または短時間で連続して実行します。
マルチクラスタ エンドポイント検出を有効にするフリート内の各クラスタで、
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"}}'古いシークレットを削除します。
クラスタに
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
移行したら、リクエスト指標を確認して、想定どおりにルーティングされていることを確認します。