跳到主要内容
版本:最新版

测试 Kubernetes Gateway 部署

在 Istio、Envoy Gateway、Gateway API Inference Extension 或其他受支持网关后面安装 Semantic Router 后,使用此清单。

1. 解析真实的网关地址​

不要从另一个集群复制 IP 或 NodePort。检查为 Gateway 创建的 Service:

kubectl get gateway -A
kubectl get service -A | grep -i gateway

对于 Minikube,辅助命令可以打印可达 URL:

export GATEWAY_URL="$(minikube service inference-gateway-istio --url | head -n 1)"

对于 LoadBalancer Service,使用其分配的主机名或 IP。对于仅本地集群,对 Gateway Service 做 port-forward,并将 GATEWAY_URL 设为转发地址。

test -n "$GATEWAY_URL" && printf 'Gateway: %s\n' "$GATEWAY_URL"

2. 检查 Gateway API 状态​

kubectl get gateway,httproute -A
kubectl describe httproute <route-name> -n <namespace>

路由应被接受,其后端引用应已解析。在 LLM-D 部署中,还要检查每条路由所选的 InferencePool 和 EPP 调度器。

3. 列出已暴露的模型​

curl -fsS "$GATEWAY_URL/v1/models"

确认响应包含当前 Router 配置所期望的物理或虚拟模型名称。

4. 发送直接模型请求​

将 physical-model 替换为配置所暴露的提供商模型:

curl -fsS -D /tmp/direct-headers.txt \
"$GATEWAY_URL/v1/chat/completions" \
-H 'Content-Type: application/json' \
-d '{
"model": "physical-model",
"messages": [{"role": "user", "content": "Reply with one short sentence."}],
"max_tokens": 64,
"temperature": 0
}'

直接提供商名称应到达该提供商,而不运行配方信号、决策、路由插件、缓存、学习或会话路由。

5. 发送已路由请求​

将 virtual-model 替换为该部署配置的入口或自动别名:

curl -fsS -D /tmp/routed-headers.txt \
"$GATEWAY_URL/v1/chat/completions" \
-H 'Content-Type: application/json' \
-d '{
"model": "virtual-model",
"messages": [{"role": "user", "content": "Explain why 2 + 2 equals 4."}],
"max_tokens": 128,
"temperature": 0
}'

检查响应以及部署所支持的路由头。确认所选提供商对匹配的决策有效;不要仅根据提示词措辞假定特定类别或后端。

6. 验证后端路径​

将请求与 Gateway、Router 和提供商日志关联。仅有成功的 HTTP 响应,并不能证明预期路由或调度器处理了该请求。

kubectl logs -n <router-namespace> deployment/<router-deployment> --since=5m
kubectl logs -n <gateway-namespace> deployment/<gateway-deployment> --since=5m

当请求和响应体可能包含敏感数据时,不要将其放入共享日志。

故障指南​

现象先检查
无外部连接Gateway Service 地址、LoadBalancer/NodePort、防火墙
HTTPRoute 未被接受父引用、监听器主机名、允许的路由
后端引用未解析Service/InferencePool 名称、命名空间、端口
/v1/models 可用但 completions 失败提供商就绪状态、所服务的模型名称、凭证
直接请求可用但虚拟模型失败入口、配方、信号/决策、默认模型
响应成功但经过错误的池路由匹配、所选模型头、EPP/Gateway 日志

检查后如果临时头文件可能包含敏感元数据,请删除它们。