Cloud Service Mesh GKE サービス メッシュの概要

この構成はプレビュー版をご利用のお客様に対してサポートされていますが、新規の Cloud Service Mesh ユーザーにはおすすめしません。詳細については、Cloud Service Mesh の概要をご覧ください。

このドキュメントは、Kubernetes Gateway API を使用して Cloud Service Mesh サービス メッシュをデプロイする Google Kubernetes Engine ユーザーを対象としています。

Kubernetes Gateway API を使用して GKE 用 Cloud Service Mesh を構成すると、サービス メッシュのユースケースにサービス間通信、トラフィック管理、グローバル ロード バランシング、セキュリティ ポリシーを適用できます。

Kubernetes API と Google Cloud APIs

Cloud Service Mesh サービス メッシュは、次の 2 つの異なる API を使用して構成できます。

このドキュメントと関連する設定ガイドでは、Kubernetes Gateway API を使用して Cloud Service Mesh サービス メッシュを構成する手順について説明しています。

Google Kubernetes Engine では Kubernetes Gateway API を使用することをおすすめします。両方の API を使用して、GKE の同じサービス メッシュでルーティングを構成することはおすすめしません。

サービス ルーティング API は Kubernetes Gateway API のリソースと同じリソース名を使用するため、2 つの API を使用する場合は、こちらのほうが簡単です。構成する Kubernetes リソースは、Cloud Service Mesh のサービス ルーティング API で表される Google Cloud リソースと機能的に同等です。

以降のセクションでは、Cloud Service Mesh と Kubernetes Gateway API の統合で使用されるリソースとアーキテクチャについて説明します。

Gateway API

Gateway API は、Kubernetes でのサービス ネットワーキングをモデル化するリソースの集まりです。Kubernetes Gateway API は、汎用のルーティング API を提供することで、上り(内向き)とロードバランサのユースケースをサポートすることに重点を置いたオープンソース プロジェクトです。汎用ルーティング API には多くの実装があります。Cloud Service Mesh のカスタム リソース定義(CRD)は、オープンソースの Gateway API の拡張機能として追加されています。CRD はサービス メッシュのユースケースをサポートし、Gateway API で導入されたものと同じ汎用ルーティング API を使用します。

Gateway API は、ゲートウェイの親リソースと、関連する GatewayClass を使用して階層的に編成され、ルートに接続します。GKE には、Gateway リソースのピアである TDMesh リソースが含まれています。同じ Route タイプを TDMesh リソースに接続できます。TDMesh リソースでは、サービス メッシュのルートとポリシーが関連付けられています。

Gateway API、Gateway リソース、Mesh リソース、ルート
Gateway API、Gateway リソース、Mesh リソース、ルート(クリックして拡大)

フリート

フリートは、論理的にグループ化された 1 つ以上の GKE クラスタで構成されます。フリートを使用すると、機能を管理し、複数のクラスタに一貫した方法でポリシーを適用できます。また、複数のクラスタにまたがる Cloud Service Mesh サービス メッシュを管理できます。

アーキテクチャ

Cloud Service Mesh は、クラスタのデータプレーンをプログラミングして、Gateway API リソースで指定されたネットワーク動作を実装することで、GKE で Gateway API をサポートします。Cloud Service Mesh 自体は Google が管理するコントロール プレーンで、データプレーン トラフィックを処理しません。ワークロードへのサイドカーとして実行される Envoy プロキシまたはプロキシレス gRPC クライアントは、データプレーンでトラフィックを処理します。Cloud Service Mesh は、xDSv3 API を使用して Envoy プロキシとプロキシレス gRPC クライアントの両方を構成します。

Cloud Service Mesh は、クラスタ内コントローラを実行するよりも堅牢でスケーラブルなマネージド グローバル コントロール プレーン ソリューションを提供します。Cloud Service Mesh はグローバル ソリューションであるため、複数の GKE クラスタに分散されたワークロード間でトラフィックをロードバランスできます。次の図では、Cloud Service Mesh が Gateway API リソースを使用して、1 つのフリートにある 3 つのクラスタのサービスへのトラフィックを管理しています。

Gateway API を使用して構成された Cloud Service Mesh マルチクラスタ サービス メッシュ
Gateway API を使用して構成された Cloud Service Mesh マルチクラスタ サービス メッシュ(クリックして拡大)

フリート内の 1 つのクラスタを構成クラスタとして指定します。構成クラスタには Gateway API リソースが保存されます。Cloud Service Mesh は、構成クラスタ内のリソースのみを監視し、フリート内の他のクラスタにあるリソースを無視します。構成クラスタの詳細については、GKE ドキュメントの構成クラスタの設計をご覧ください。

GKE マルチクラスタ サービスでは、構成クラスタ内の Gateway API リソースがフリート内の任意のクラスタ内の Kubernetes Service を参照できます。マルチクラスタ サービス ディスカバリの詳細については、マルチクラスタ サービスをご覧ください。

リソース

Cloud Service Mesh は、サービス メッシュのデータプレーンで Envoy プロキシとプロキシレス gRPC の両方をサポートします。どちらのクライアントも、TDMesh リソースの名前と対応するプロジェクト番号をそれぞれのブートストラップ構成に指定することで、Cloud Service Mesh から特定のサービス メッシュの構成を受け取ります。Kubernetes Gateway API を使用した Cloud Service Mesh の設定ガイドでは、Envoy とプロキシレス gRPC を使用したデータプレーン構成のデモンストレーションを行います。

TDMesh リソース

TDMesh リソースは、Cloud Service Mesh カスタム リソースです。これは、オープンソースの Gateway API の拡張で、Cloud Service Mesh のサービス メッシュのユースケースをサポートします。TDMesh リソースを使用して、フリート内にサービス メッシュ インスタンスを作成します。TDMesh リソースに接続されたルートにより、サービス メッシュ内のサービス間のルーティング動作が指定されます。

Route 個のリソース

Gateway API ルートリソースのサブセットを TDMesh リソースに接続して、サービス メッシュ内のサービスレベルのルーティングを指定できます。Cloud Service Mesh は、次の Route リソースをサポートします。

  • HTTPRoute
  • TCPRoute
  • TDGRPCRoute(Cloud Service Mesh カスタム リソース

たとえば、ホスト payments.svc.internal 宛ての HTTP リクエストを Kubernetes Service service-payments に転送するように HTTPRoute を作成できます。データプレーン インスタンスが登録される TDMesh リソースに HTTPRoute リソースを接続すると、メッシュ内のワークロードから送信された HTTP リクエストがそれに応じて転送されます。

このリリースでは、Gateway API の汎用 Route リソースが新しいルートタイプ TDGRPCRoute で拡張されています。新しいルートタイプは、メソッドやサービス定義などのネイティブ gRPC プリミティブで照合することで、gRPC リクエストのルーティングに最高レベルのエクスペリエンスを提供します。

GKE で Gateway API リソースを使用して Cloud Service Mesh を構成する
GKE で Gateway API リソースを使用して Cloud Service Mesh を構成する(クリックして拡大)

制限事項

  • Cloud Service Mesh は、サービス メッシュ内のすべての Kubernetes サービスに対して次のデフォルトの動作を構成します。これらの動作は変更できません。
    • TCP ヘルスチェックは、Gateway API Route リソースによって参照されるサービスポートに構成されます。
    • サービスに対するすべての受信リクエストに対して、デフォルトの 30 秒のタイムアウトが構成されます。
    • セッション アフィニティは無効になっています。
  • Envoy 自動インジェクタは、フリートごとに 1 つのメッシュのみをサポートします。
  • Gateway API を使用して Cloud Service Mesh のセキュリティ機能を有効にすることはできません。
  • Gateway API のみを使用して、GKE の TDMesh リソースと Route リソースを構成する必要があります。Google Cloud コンソール、gcloud CLI、REST API は使用できません。
  • すべてのクラスタは 1 つのプロジェクト内に存在している必要があります。複数のプロジェクトのクラスタにまたがるサービス メッシュはサポートされていません。
  • Google Cloud コンソールを使用して GKE サービス メッシュを構成または表示することはできません。
  • Cloud Logging と Cloud Monitoring によるコントロール プレーンのオブザーバビリティはサポートされていません。

次のステップ