了解如何配置基于正文的路由。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) 和端点组。然后,它会将请求和端点信息转发到端点选择器扩展程序,以便在所选池中进行精细的端点选择。 - 最终路由:请求会路由到端点选择器扩展程序选择的特定模型副本。
此过程可确保即使模型信息位于请求正文深层,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
替换为 Gateway 资源的名称。
此命令会部署以下资源:
- 基于正文的路由扩展程序的 Service 和 Deployment。
GCPRoutingExtension
资源和GCPHealthCheckPolicy
资源,用于将基于正文的路由扩展程序附加到 GKE Gateway 资源。
为模型感知路由配置 HTTPRoute
部署并配置扩展程序后,您可以定义 HTTPRoute
资源以使用注入的标头 (X-Gateway-Model-Name
) 做出路由决策。
以下是用于模型感知路由的 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 集群中的组件运行。您负责其生命周期管理(包括升级、安全补丁)并确保其持续运行。