了解如何配置基于正文的路由。GKE 推理网关的这项功能可让您通过直接从 HTTP 请求正文中提取模型名称来路由推理请求。
这对于遵循 OpenAI API 等规范的应用特别有用,因为这些规范的模型标识符通常嵌入在请求载荷中,而不是在标头或网址路径中。
基于身体的路由的工作原理
GKE 推理网关将基于正文的路由实现为 Envoy 代理的 ext_proc
扩展程序。请求流程旨在与您现有的 Gateway API 配置无缝集成:
- 接收请求:第 7 层负载均衡器接收传入的推理请求。
- 正文参数提取:第 7 层负载均衡器将请求转发到“正文到标头”扩展程序。此扩展程序从 HTTP 请求正文中提取标准
model
参数。 - 标头注入:提取的模型形参的值随后会作为新的请求标头(键为
X-Gateway-Model-Name
)注入。 - 路由决策:现在,请求标头中包含模型名称,GKE 推理网关可以使用现有的 Gateway API
HTTPRoute
构造来做出路由决策。例如,HTTPRoute
规则可以与注入的标头匹配,以将流量定向到相应的InferencePool
。 - 端点选择:第 7 层负载均衡器选择适当的
InferencePool
(BackendService) 和端点组。然后,它会将请求和端点信息转发给 Endpoint Picker 扩展程序,以便在所选池中进行精细的端点选择。 - 最终路由:请求会路由到端点选择器扩展程序选择的特定模型副本。
此过程可确保即使模型信息位于请求正文深处,GKE 推理网关也能智能地将流量路由到正确的后端服务。
配置基于正文的路由
GKE 推理网关的基于正文的路由 (BBR) 扩展程序以您在 Kubernetes 集群中管理的服务的形式运行。从第 7 层负载均衡器的角度来看,BBR 扩展程序是一个外部 gRPC 服务器。当负载均衡器需要检查请求正文以确定模型名称时,它会向 BBR 服务发出 gRPC 调用。然后,BBR 服务会处理请求,并向负载均衡器返回信息,例如要注入以进行路由的标头。
如需启用基于正文的路由,请将 BBR 扩展程序部署为 Pod,并使用 GCPRoutingExtension
和 HTTPRoute
资源进行集成。
前提条件
确保您拥有 GKE 集群(版本 1.32 或更高版本)。
按照主要指南配置 GKE 推理网关。
部署基于身体的路由器
基于正文的路由扩展程序部署为 Kubernetes Deployment 和 Service,以及集群中的 GCPRoutingExtension
资源。您可以使用 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
替换为您的网关资源的名称。
此命令会部署以下资源:
- 基于身体的路由扩展服务的 Service 和 Deployment。
- 一个
GCPRoutingExtension
资源和一个GCPHealthCheckPolicy
资源,用于将基于正文的路由扩展程序附加到您的 GKE Gateway 资源。
为模型感知路由配置 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
注意事项和限制
在规划基于身体的路由实现时,请考虑以下事项:
故障关闭行为:基于身体的路由扩展程序旨在以“故障关闭”模式运行。如果扩展程序不可用或无法处理请求,则会导致错误(例如,如果未配置默认后端,则会返回 404 或 503 响应代码),而不是错误地路由。 确保部署具备高可用性,以维持服务可靠性。
请求正文大小和流式传输:处理大型 HTTP 请求正文(尤其是启用流式传输时)可能会带来复杂性。如果强制 Envoy 代理对请求正文进行流式传输(通常是针对大于 250 KB 的正文),则该代理可能无法注入新标头。这可能会导致路由失败(例如,如果无法应用标头匹配规则,则会显示 404 错误)。
长期维护:基于正文的路由扩展程序作为组件在 GKE 集群中运行。您负责其生命周期管理,包括升级、安全补丁和确保其持续运行。
后续步骤