HTTP リクエストの本文からモデル名を直接抽出して推論リクエストをルーティングできる GKE Inference Gateway の機能である本文ベースのルーティングを構成する方法について説明します。
これは、OpenAI API などの仕様に準拠するアプリケーションで特に役立ちます。このようなアプリケーションでは、モデル識別子がヘッダーや URL パスではなく、リクエスト ペイロードに埋め込まれていることがよくあります。
身体ベースのルーティングの仕組み
GKE Inference Gateway は、Envoy プロキシの ext_proc
拡張機能として本文ベースのルーティングを実装します。リクエスト フローは、既存の Gateway API 構成とシームレスに統合するように設計されています。
- リクエストの受信: レイヤ 7 ロードバランサが受信した推論リクエストを受け取ります。
- 本文パラメータの抽出: レイヤ 7 ロードバランサは、リクエストを Body to Header 拡張機能に転送します。この拡張機能は、HTTP リクエストの本文から標準の
model
パラメータを抽出します。 - ヘッダー挿入: 抽出されたモデル パラメータの値が、新しいリクエスト ヘッダー(キー
X-Gateway-Model-Name
)として挿入されます。 - ルーティングの決定: リクエスト ヘッダーでモデル名が使用可能になったため、GKE Inference Gateway は既存の Gateway API
HTTPRoute
構造体を使用してルーティングの決定を行うことができます。たとえば、HTTPRoute
ルールは挿入されたヘッダーと照合して、トラフィックを適切なInferencePool
に転送できます。 - エンドポイントの選択: レイヤ 7 ロードバランサが適切な
InferencePool
(BackendService)とエンドポイントのグループを選択します。次に、リクエストとエンドポイントの情報を Endpoint Picker 拡張機能に転送し、選択したプール内でエンドポイントをきめ細かく選択します。 - 最終ルーティング: リクエストは、エンドポイント選択拡張機能によって選択された特定のモデルレプリカにルーティングされます。
このプロセスにより、モデル情報がリクエスト本文の奥深くに埋め込まれている場合でも、GKE Inference Gateway はトラフィックを正しいバックエンド サービスにインテリジェントに転送できます。
ボディベースのルーティングを構成する
GKE Inference Gateway の Body-Based Routing(BBR)拡張機能は、Kubernetes クラスタ内で管理するサービスとして実行されます。レイヤ 7 ロードバランサの観点から見ると、BBR 拡張機能は外部 gRPC サーバーです。ロードバランサがリクエスト本文を検査してモデル名を特定する必要がある場合、BBR サービスに対して gRPC 呼び出しを行います。BBR サービスはリクエストを処理し、ルーティング用に挿入するヘッダーなどの情報をロードバランサに返します。
ボディベースのルーティングを有効にするには、BBR 拡張機能を Pod としてデプロイし、GCPRoutingExtension
リソースと HTTPRoute
リソースを使用して統合します。
前提条件
GKE クラスタ(バージョン 1.32 以降)があることを確認します。
メインガイドに沿って GKE Inference Gateway を構成します。
ボディベースのルーターをデプロイする
ボディベースのルーティング拡張機能は、クラスタ内の GCPRoutingExtension
リソースとともに、Kubernetes Deployment と Service としてデプロイされます。Helm を使用すると、インストールを簡素化できます。
ボディベースのルーターに必要なリソースをデプロイするには、次のコマンドを実行します。
helm install body-based-router oci://registry.k8s.io/gateway-api-inference-extension/charts/body-based-routing \
--set provider.name=gke \
--set inferenceGateway.name=GATEWAY_NAME
GATEWAY_NAME
は、Gateway リソースの名前に置き換えます。
このコマンドは、次のリソースをデプロイします。
- Body-Based Routing 拡張機能の Service と Deployment。
- Body-Based Routing 拡張機能を GKE Gateway リソースに接続するための
GCPRoutingExtension
リソースとGCPHealthCheckPolicy
リソース。
モデル認識ルーティング用に HTTPRoute
を構成する
拡張機能をデプロイして構成したら、挿入されたヘッダー(X-Gateway-Model-Name
)をルーティングの決定に使用する HTTPRoute
リソースを定義できます。
次に、モデル認識ルーティングの HTTPRoute
マニフェストの例を示します。
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
name: routes-to-llms
spec:
parentRefs:
- name: GATEWAY_NAME
rules:
- matches:
- headers:
- type: Exact
name: X-Gateway-Model-Name
value: chatbot # Matches the extracted model name
path:
type: PathPrefix
value: /
backendRefs:
- name: gemma # Target InferencePool for 'chatbot' model
kind: InferencePool
group: "inference.networking.k8s.io"
- matches:
- headers:
- type: Exact
name: X-Gateway-Model-Name
value: sentiment # Matches another extracted model name
path:
type: PathPrefix
value: /
backendRefs:
- name: llama # Target InferencePool for 'sentiment' model
kind: InferencePool
group: "inference.networking.k8s.io"
このマニフェストをクラスタに適用するには、httproute-for-models.yaml
として保存し、次のコマンドを実行します。
kubectl apply -f httproute-for-models.yaml
考慮事項と制限事項
Body-Based Routing の実装を計画する際は、次の点を考慮してください。
フェイルクローズ動作: Body-Based Routing 拡張機能は、「フェイルクローズ」モードで動作するように設計されています。拡張機能が使用できない場合や、リクエストの処理に失敗した場合は、誤ったルーティングではなく、エラー(デフォルトのバックエンドが構成されていない場合は 404 または 503 レスポンス コードなど)が発生します。デプロイを高可用性にして、サービスの信頼性を維持します。
リクエスト本文のサイズとストリーミング: 大規模な HTTP リクエスト本文の処理(特にストリーミングが有効になっている場合)は、複雑さを増す可能性があります。Envoy プロキシがリクエスト本文のストリーミングを強制される場合(通常は 250 KB を超える本文の場合)、新しいヘッダーを挿入できないことがあります。これにより、ルーティング エラーが発生する可能性があります(たとえば、ヘッダー一致ルールを適用できない場合は 404 エラーが発生します)。
長期メンテナンス: Body-Based Routing 拡張機能は、GKE クラスタ内のコンポーネントとして実行されます。アップグレード、セキュリティ パッチ、継続的な運用の確保など、ライフサイクル管理はお客様の責任で行っていただきます。
次のステップ
- GKE Inference Gateway をカスタマイズする方法を確認する。
- GKE Inference Gateway の詳細を読む。
- Gateway リソースをモニタリングする。
- Gateway API の詳細を確認する。