Traffic Director GKE サービス メッシュの概要
このドキュメントは、Kubernetes Gateway API を使用して Traffic Director サービス メッシュをデプロイする Google Kubernetes Engine ユーザーを対象としています。
Kubernetes Gateway API を使用して GKE 用 Traffic Director を構成すると、サービス メッシュのユースケースにサービス間通信、トラフィック管理、グローバル ロード バランシング、セキュリティ ポリシーの適用が可能になります。
Kubernetes API と Google Cloud APIs
Traffic Director サービス メッシュは、次の 2 つの異なる API を使用して構成できます。
- Google Cloud APIs。サービス ルーティング API または古い API のいずれかです。
- Kubernetes Gateway API
このドキュメントと関連する設定ガイドでは、Kubernetes Gateway API を使用して Traffic Director サービス メッシュを構成する手順について説明しています。
Google Kubernetes Engine では Kubernetes Gateway API を使用することをおすすめします。両方の API を使用して、GKE の同じサービス メッシュでルーティングを構成することはおすすめしません。
サービス ルーティング API は Kubernetes Gateway API のリソースと同じリソース名を使用するため、2 つの API を使用する場合は、こちらのほうが簡単です。構成する Kubernetes リソースは、Traffic Director のサービス ルーティング API で表される Google Cloud リソースと機能的に同等です。
以降のセクションでは、Traffic Director と Kubernetes Gateway API の統合で使用されるリソースとアーキテクチャについて説明します。
Gateway API
Gateway API は、Kubernetes でのサービス ネットワーキングをモデル化するリソースの集まりです。Kubernetes Gateway API は、汎用のルーティング API を提供することで、上り(内向き)とロードバランサのユースケースをサポートすることに重点を置いたオープンソース プロジェクトです。汎用ルーティング API には多くの実装があります。Traffic Director のカスタム リソース定義(CRD)は、オープンソースの Gateway API の拡張機能として追加されています。CRD はサービス メッシュのユースケースをサポートし、Gateway API で導入されたものと同じ汎用ルーティング API を使用します。
Gateway API は、ゲートウェイの親リソースと、関連する GatewayClass
を使用して階層的に編成され、ルートに接続します。GKE には、Gateway
リソースのピアである TDMesh
リソースが含まれています。同じ Route
タイプを TDMesh
リソースに接続できます。TDMesh
リソースでは、サービス メッシュのルートとポリシーが関連付けられています。
フリート
フリートは、論理的にグループ化された 1 つ以上の GKE クラスタで構成されます。フリートを使用すると、機能を管理し、複数のクラスタに一貫した方法でポリシーを適用できます。また、複数のクラスタにまたがる Traffic Director サービス メッシュを管理できます。
アーキテクチャ
Traffic Director は、クラスタのデータプレーンをプログラミングして、Gateway API リソースで指定されたネットワーク動作を実装することで、GKE で Gateway API をサポートします。Traffic Director 自体は Google が管理するコントロール プレーンで、データプレーン トラフィックを処理しません。ワークロードへのサイドカーとして実行される Envoy プロキシまたはプロキシレス gRPC クライアントは、データプレーンでトラフィックを処理します。Traffic Director は、xDSv3 API を使用して Envoy プロキシとプロキシレス gRPC クライアントの両方を構成します。
Traffic Director は、クラスタ内コントローラを実行するよりも堅牢でスケーラブルなマネージド グローバル コントロール プレーン ソリューションを提供します。グローバル ソリューションであるため、Traffic Director は複数の GKE クラスタに分散されたワークロード間でトラフィックをロードバランスできます。次の図では、Traffic Director が 1 つのフリート内にある 3 つのクラスタのサービスへのトラフィックを Gateway API リソースで管理しています。
フリート内の 1 つのクラスタを構成クラスタとして指定します。構成クラスタには Gateway API リソースが保存されます。Traffic Director は、構成クラスタ内のリソースのみを監視し、フリート内の他のクラスタにあるリソースを無視します。構成クラスタの詳細については、GKE ドキュメントの構成クラスタの設計をご覧ください。
GKE マルチクラスタ サービスでは、構成クラスタ内の Gateway API リソースがフリート内の任意のクラスタ内の Kubernetes Service を参照できます。マルチクラスタ サービス ディスカバリの詳細については、マルチクラスタ サービスをご覧ください。
リソース
Traffic Director は、サービス メッシュのデータプレーンで Envoy プロキシとプロキシレス gRPC の両方をサポートします。どちらのクライアントも、TDMesh
リソースの名前と対応するプロジェクト番号をそれぞれのブートストラップ構成に指定し、Traffic Director から特定のサービス メッシュの構成を受け取ります。Kubernetes Gateway API を使用した Traffic Director の設定ガイドには、Envoy とプロキシレス gRPC を使用したデモ用のデータプレーン構成が記載されています。
TDMesh
リソース
TDMesh
リソースは、Traffic Director のカスタム リソースです。これは、オープンソースの Gateway API の拡張機能であり、Traffic Director のサービス メッシュのユースケースをサポートします。TDMesh
リソースを使用して、フリート内にサービス メッシュ インスタンスを作成します。TDMesh
リソースに接続されたルートにより、サービス メッシュ内のサービス間のルーティング動作が指定されます。
Route
リソース
Gateway API ルートリソースのサブセットを TDMesh
リソースに接続して、サービス メッシュ内のサービスレベルのルーティングを指定できます。Traffic Director は、次の Route
リソースをサポートしています。
HTTPRoute
TCPRoute
TDGRPCRoute
(Traffic Director のカスタム リソース)
たとえば、ホスト payments.svc.internal
宛ての HTTP リクエストを Kubernetes Service service-payments
に転送するように HTTPRoute
を作成できます。データプレーン インスタンスが登録される TDMesh
リソースに HTTPRoute
リソースを接続すると、メッシュ内のワークロードから送信された HTTP リクエストがそれに応じて転送されます。
このリリースでは、Gateway API の汎用 Route
リソースが新しいルートタイプ TDGRPCRoute
で拡張されています。新しいルートタイプは、メソッドやサービス定義などのネイティブ gRPC プリミティブで照合することで、gRPC リクエストのルーティングに最高レベルのエクスペリエンスを提供します。
制限事項
- Traffic Director は、サービス メッシュ内のすべての Kubernetes Service に対して次のデフォルトの動作を構成します。これらの動作は変更できません。
- TCP ヘルスチェックは、Gateway API
Route
リソースによって参照されるサービスポートに構成されます。 - サービスに対するすべての受信リクエストに対して、デフォルトの 30 秒のタイムアウトが構成されます。
- セッション アフィニティは無効になっています。
- TCP ヘルスチェックは、Gateway API
- Envoy 自動インジェクタは、フリートごとに 1 つのメッシュのみをサポートします。
- Traffic Director のセキュリティ機能を Gateway API で有効にすることはできません。
- Gateway API のみを使用して、GKE の
TDMesh
リソースとRoute
リソースを構成する必要があります。Google Cloud コンソール、gcloud CLI、REST API は使用できません。 - すべてのクラスタは 1 つのプロジェクト内に存在している必要があります。複数のプロジェクトのクラスタにまたがるサービス メッシュはサポートされていません。
- Google Cloud コンソールを使用して GKE サービス メッシュを構成または表示することはできません。
- Cloud Logging と Cloud Monitoring によるコントロール プレーンのオブザーバビリティはサポートされていません。
次のステップ
- Gateway API を使用したサービス メッシュの設定準備について学習する。