Kubernetesはコンテナのオーケストレーションを一変させ、Google Kubernetes Engine(GKE)はコンテナ化されたアプリケーションのデプロイとスケーリングのための強力で管理されたプラットフォームを提供する。GKEはサービスディスカバリーとロードバランシングのための強力な機能を提供するが、ワークロードに到達する前のトラフィックにカスタム処理ロジックを適用することにはまだ限界がある。
ここで サービス拡張は、GKE Gateway API を使ってクラウドロードバランシングをカスタマイズし、強化するための魅力的なソリューションを提供します(注:これは kubernetes の機能であり、Google CloudAPI GatewayService とは無関係です)。
GCPのService Extensionsとは?
Service Extensions を使うと、ユーザーはカスタムロジックをデータパスに直接注入することができ、ロードバランサーを流れるトラフィックに高度な変更を加えることができます。これはパイプラインのようなもので、様々な段階で独自のコードを挿入し、バックエンドに影響を与えることなくリクエストとレスポンスを操作することができます。
サービス拡張には、主に2つのタイプがあります:
- プラグイン:プラグインは、ネットワーキングデータパスに直接インラインでカスタムコードを挿入することができます。WebAssembly(Wasm)とProxy-Wasm ABIを使用して構築されたプラグインは、Googleが管理するサンドボックス基盤上でWasmモジュールとして実行されます。プラグインは低レイテンシで動作するように設計されており、データプレーンのごく近くで実行する必要がある軽量ロジックに最適です。
- コールアウト:Google が管理するサービス、またはユーザーが管理するサービス(GKE Pods 上で動作するものを含む)。コールアウトは既存のソフトウェアを再利用できるため柔軟性が高く、実行時の制限も少ないため、外部データや状態を必要とするような複雑なロジックに適しています。
GKEチームは最近、ゲートウェイAPIにおけるサービス拡張のプレビューサポートを発表した。これにより、ユーザはリクエストやレスポンスの HTTP ヘッダやペイロードを操作したり、トラフィックのルーティングを制御したりすることができます。
GKE ゲートウェイ API サービス拡張の種類
GKEゲートウェイコントローラは現在、2種類のコールアウトサービス拡張をサポートしており、それぞれ特定の機能向けに設計されている:
GCPRoutingExtension:このエクステンションタイプは、トラフィックのルーティングを制御することに重点を置いています。トラフィックを異なるバックエンドサービスに誘導したり、カスタムのルーティングロジックを適用する必要があるシナリオに最適です。
GCPTrafficExtension:この拡張タイプでは、リクエストとレスポンスのヘッダーとペイロードを変更できます。バックエンドのサービス選択やセキュリティポリシーに影響を与えることなく動作するため、データの変換やエンリッチメントに最適です。
GKE ゲートウェイ API でサービス拡張を設定する
GKE のサービス拡張機能を試すには、バージョン 1.33 以降の GKE クラスタとGateway APIが有効になっている必要があります。また、この機能をテストする前に、GKE の Gateway Service Extensions の現在の制限と限界を確認してください。
ゲートウェイの展開
Service Extension を設定するには、まず Gateway リソースをデプロイするか、既存の Gateway リソースがサポートされている GatewayClass を使用していることを確認する必要があります。サポートされるロードバランサーの詳細については、Google Cloud Service ExtensionとGatewayClassの互換性を参照してください。
- 以下のマニフェストを適用して、単純な地域アプリケーションロードバランサーゲートウェイをデプロイします。
サンプル・ストア・バックエンド・アプリケーションをデプロイする
- 以下のマニフェストを適用して、サンプルのバックエンドアプリケーションとHTTPRouteリソースをデプロイします。HTTPRoute は、ゲートウェイリスナーからバックエンドアプリケーションへの HTTP リクエストのルーティング動作を指定します。
- ゲートウェイAPIのIPアドレスにサンプルリクエストを送信し、バックエンドのレスポンスをテストする。
出力は以下のようになる:
バックエンドのコールアウト・サービスをデプロイする
コールアウトサービスはGKEのゲートウェイサービス拡張のカスタムロジックを実装する。ロードバランサーはGCPTrafficExtension
やGCPRoutingExtension
の設定に基づいてバックエンドのアプリケーションを起動し、トラフィックを変更したりルーティングしたりします。
GKEクラスタにコールアウトサービスをデプロイする場合は、制限に記載されているすべての要件を満たす必要があります。
- mkcertまたはその他の方法を使用して、コールアウトサービスのバックエンド用に自己署名証明書を生成する。これは、エンドツーエンドのTLSを必要とする
appProtocol
、HTTP2を使用する必要があるためです。
- 自己署名証明書でK8Sシークレットを作成する。
- 以下のマニフェストを適用して、サンプルのコールアウト・アプリケーションをデプロイします。その他のコードサンプルについては、service-extensionsGitHub リポジトリを参照してください。
- サンプルアプリケーションは、リクエストとレスポンスの両方に対して基本的なヘッダーの修正を行います。詳細はservice_callout_example.pyを参照し、ビジネス要件に基づいて独自のアプリケーションを開発することができます。
サービス拡張の設定
トラフィックフローをカスタマイズするために、GCPRoutingExtension
またはGCPTrafficExtension
のいずれかを設定できます。
- 以下のマニフェストを適用して
GCPRoutingExtension
リソースを作成します。ロードバランサーはパスrouteextension
に送信されたリクエストに対して拡張サービスアプリを呼び出し、それをバックエンドストアアプリに転送します。
- コールアウトサービスはリクエストをストアアプリに転送する前にホストヘッダの修正を行うため、
HTTPRoute
リソースをservice-extensions.com
ホストで更新する。
- Gateway APIコントローラは、変更を同期するのに数分かかる場合がある。コマンド
kubectl describe gateway GATEWAY_NAME
を使用して、GCPRoutingExtension
がゲートウェイにバインドされていることを確認する。
- 出力は、GKE がゲートウェイと基礎となる Google Cloud リソース間のリンクを格納するために使用するアノテーションを示しています。
networking.gke.io/lb-route-extensions
のアノテーションは、ゲートウェイとGCPRoutingExtension
のバインディングを確認します。 GATEWAY_IP_ADDRESS
を置き換えて、routeextension
パスへのトラフィックをテストする。
- 出力は以下のようになり、レスポンス内の
host_header
の変化に気づくことができる。
GCPTrafficExtension
を使用して、カスタム・リクエストおよびレスポンス・ロジック、高度なルーティング、変換、セキュリティ・ポリシーを実装できます。
- 以下のマニフェストを適用して
GCPTrafficExtension
リソースを作成すると、ロードバランサーはパスtrafficetension
に送られたリクエストに対して拡張サービスアプリを呼び出します。supportedEvents
を更新することで、コールアウトアプリケーションへのロードバランサーの呼び出しをカスタマイズして制御できます。
GATEWAT_IP_ADDRESS
を置き換えて、trafficextension
パスへのトラフィックをテストする。
- 出力は以下のようになり、カスタマー・レスポンス・ヘッダーが
hello
、レスポンス・ボディが削除されていることがわかる。
ポッドログのサンプル:
結論
GKE Gateway APIのGCP Service Extensionsは、プラットフォームチームがイングレスレイヤーでトラフィックを管理、シェーピング、セキュア化する方法を大幅に進化させます。カスタム認証の適用、ヘッダーの操作、トラフィックシェーピングの実行、外部システムとの統合など、Service Extensionsを使用することで、宣言的かつスケーラブルに行うことができます。
まだプレビュー版ですが、Service Extensionsを検討し、非運用環境でテストし、プラットフォーム要件に合わせて再利用可能な拡張サービスを開発する絶好の機会を提供します。
PoCを検討しているのはあなただけではありません。DoiTは、お客様のビジネス成果に焦点を当てた評価、計画、移行をお手伝いします。カスタマイズされたクラウド・ソリューションの構築を専門とする100名以上のシニア・クラウド・エキスパートを擁するDoiTのチームは、このプロセスをスムーズに進め、インフラを最適化してコンプライアンスを確保し、将来の需要に効率的に対応するお手伝いをいたします。
当社の専門家は、戦略的なガイダンスと技術的な専門知識をあらゆる段階で提供する準備ができています。クラウドインフラストラクチャの堅牢性、コンプライアンス、および成功のための最適化を確保するために、ポリシー導入の段階で貴社にとって最も理にかなった方法を検討しましょう。 今すぐご連絡ください。