
Kubernetesはコンテナオーケストレーションを一変させ、Google Kubernetes Engine(GKE)はコンテナ化アプリケーションのデプロイとスケーリングを支えるマネージドプラットフォームを提供します。GKEはサービスディスカバリやロードバランシングに優れた機能を備える一方、ワークロードに到達する前のトラフィックへカスタム処理ロジックを適用するには、依然として制約があります。
そこで活躍するのがService Extensionsです。GKE Gateway APIと組み合わせてCloud Load Balancingをカスタマイズ・拡張できる、有力なソリューションです(注:これはKubernetesの機能であり、Google CloudのAPI Gatewayサービスとは別物です)。
GCPにおけるService Extensionsとは
Service Extensionsは、データパスに直接カスタムロジックを差し込める仕組みです。これにより、ロードバランサーを通過するトラフィックに高度な変更を加えられます。バックエンドに影響を与えることなく、リクエストやレスポンスを操作するコードをパイプラインの各段階に挿入するイメージです。
Service Extensionsには、主に2つのタイプがあります。
- **Plugins:**ネットワーキングのデータパス内に、カスタムコードをインラインで直接組み込めます。WebAssembly(Wasm)とProxy-Wasm ABIで構築され、PluginsはGoogle管理のサンドボックス基盤上でWasmモジュールとして動作します。低レイテンシ動作を前提に設計されており、データプレーンのすぐそばで実行したい軽量ロジックに最適です。

- **Callouts:**Cloud Load Balancingから外部サービス(Google管理のサービス、またはユーザー管理のサービス、GKE Pod上で動作するものを含む)へgRPC呼び出しを行えます。Calloutsは既存ソフトウェアの再利用が可能で、ランタイム上の制約も少ないため柔軟性が高く、外部データや状態を必要とするより複雑なロジックに向いています。

GKEチームは先日、Gateway APIでのService Extensionsのプレビュー対応を発表しました。これにより、リクエスト/レスポンスのHTTPヘッダーやペイロードの操作、さらにはトラフィックルーティングの制御まで、既存のバックエンドサービス選択やセキュリティポリシーに影響を与えずに行えるようになります。
GKE Gateway API Service Extensionsの種類
GKE Gatewayコントローラーは現在、用途別に設計された2種類のCallouts Service Extensionsをサポートしています。
- ``GCPRoutingExtension:トラフィックルーティングの制御に特化したタイプです。異なるバックエンドサービスへトラフィックを振り分けたり、独自のルーティングロジックを適用したりするケースに最適です。

- ``GCPTrafficExtension:リクエストおよびレスポンスのヘッダーやペイロードを変更できるタイプです。バックエンドサービスの選択やセキュリティポリシーに影響を及ぼさずに動作するため、データ変換やエンリッチメントに最適です。

GKE Gateway APIでService Extensionsを構成する
GKEのService Extensions機能を試すには、バージョン1.33以降のGKEクラスターでGateway APIを有効化する必要があります。検証前に、GKEのGateway Service Extensionsの最新の制限事項もあわせてご確認ください。
Gatewayをデプロイする
Service Extensionを構成するには、まずGatewayリソースをデプロイするか、既存のGatewayリソースがサポート対象のGatewayClassを使用していることを確認します。サポート対象のロードバランサーの詳細は、Google Cloud Service ExtensionとGatewayClassの互換性を参照してください。
- 以下のマニフェストを適用し、シンプルなリージョナルアプリケーションロードバランサーゲートウェイをデプロイします。

サンプルストアのバックエンドアプリケーションをデプロイする
- 以下のマニフェストを適用し、サンプルバックエンドアプリケーションとHTTPRouteリソースをデプロイします。HTTPRouteは、GatewayリスナーからバックエンドアプリケーションへのHTTPリクエストのルーティング動作を定義します。

- Gateway APIのIPアドレスにサンプルリクエストを送信し、バックエンドからのレスポンスを確認します。
出力は次のようになります。

バックエンドのコールアウトサービスをデプロイする
コールアウトサービスは、GKEのGateway Service Extensions向けにカスタムロジックを実装する役割を担います。ロードバランサーはGCPTrafficExtensionまたはGCPRoutingExtensionの構成に従ってバックエンドアプリケーションを呼び出し、トラフィックの変更やルーティングを行います。
GKEクラスター内にコールアウトサービスをデプロイする場合は、制限事項に記載されたすべての要件を満たす必要があります。
mkcertなどを使い、コールアウトサービスのバックエンド用に自己署名証明書を生成します。
appProtocolとしてHTTP2を指定する必要があり、エンドツーエンドのTLSが求められるため、この手順は必須です。自己署名証明書を含むKubernetes Secretを作成します。

- 以下のマニフェストを適用し、サンプルのコールアウトアプリケーションをデプロイします。コードサンプルをさらに参照したい場合は、service-extensions GitHubリポジトリをご覧ください。

- このサンプルアプリケーションは、リクエストとレスポンスの両方に対して基本的なヘッダー変更を行います。詳細はservice_callout_example.pyを参照しつつ、ビジネス要件に合わせた独自アプリケーションを開発できます。
Service Extensionsを構成する
トラフィックフローをカスタマイズするには、GCPRoutingExtensionまたはGCPTrafficExtensionのいずれかを構成します。
- 以下のマニフェストを適用して
GCPRoutingExtensionリソースを作成すると、ロードバランサーはrouteextensionパスへのリクエストに対して拡張サービスアプリを呼び出し、その後バックエンドのストアアプリケーションへ転送します。

- コールアウトサービスはストアアプリへリクエストを転送する前にHostヘッダーを書き換えるため、
HTTPRouteリソースのホストをservice-extensions.comに更新します。

- Gateway APIコントローラーが変更を反映するまで数分かかる場合があります。
kubectl describe gateway GATEWAY_NAMEコマンドで、GCPRoutingExtensionがGatewayにバインドされていることを確認してください。

- 出力にはアノテーションが表示されます。GKEはこれらを使い、Gatewayと背後のGoogle Cloudリソースとの関連を保持します。
networking.gke.io/lb-route-extensionsアノテーションが、GatewayとGCPRoutingExtensionのバインディングを示します。 - 続いて、
GATEWAY_IP_ADDRESSを置き換えてrouteextensionパスへのトラフィックをテストします。

- 出力は次のようになり、レスポンス内の
host_headerが変更されていることを確認できます。
GCPTrafficExtensionを使えば、独自のリクエスト/レスポンスロジック、高度なルーティング、変換処理、セキュリティポリシーを実装できます。
以下のマニフェストを適用して
GCPTrafficExtensionリソースを作成すると、ロードバランサーはtrafficetensionパスへのリクエストに対して拡張サービスアプリを呼び出します。supportedEventsを更新することで、ロードバランサーからコールアウトアプリケーションへの呼び出しをカスタマイズ・制御できます。続いて、
GATEWAT_IP_ADDRESSを置き換えてtrafficextensionパスへのトラフィックをテストします。

- 出力は次のようになり、
helloのカスタムレスポンスヘッダーが書き換えられ、レスポンスボディが削除されていることを確認できます。
サンプルPodログ:GKE Gateway API向けのGCP Service Extensionsは、プラットフォームチームがイングレス層でトラフィックを管理・整形・保護する手段を大きく前進させるものです。カスタム認証の適用、ヘッダーの操作、トラフィックシェーピング、外部システムとの連携など、いずれも宣言的かつスケーラブルに実現できます。
まだプレビュー段階ではありますが、Service Extensionsを試し、本番外環境で検証し、自社プラットフォームの要件に合わせた再利用可能な拡張サービスを開発する絶好の機会です。
PoCを検討中の方も、決して一人で進める必要はありません。DoiTがビジネス成果を最優先に、評価・計画・移行までご支援します。カスタマイズされたクラウドソリューションの設計を専門とする100名超のシニアクラウドエキスパートが在籍し、スムーズなプロセス遂行とインフラ最適化により、コンプライアンスの確保と将来の需要への効率的な対応をサポートします。
当社のエキスパートが、戦略的な指針と技術的知見をもって各ステップに伴走します。このポリシー適用フェーズで貴社にとって最適な選択肢をご一緒に検討し、堅牢でコンプライアンスに準拠し、成功に向けて最適化されたクラウドインフラを実現しましょう。今すぐお問い合わせください。