☰
Kubernetes AI 应用基础设施开源实践:Solo.io 项目拆解与 TaoToken 统一接入
2026/10/2 19:28:36 网站建设 项目流程

1. 从一次本地 Kind 集群的 AI 网关实验说起

Kubernetes 上跑 AI 应用,最容易被低估的一环不是模型本身,而是模型服务前面的那层流量治理。我在本地用 Kind 起了一个三节点集群,把 kgateway、kagent、agentgateway、kmcp 这几个 Solo.io 的开源项目依次装了一遍,想验证一件事:能不能用一套统一的网关和 Agent 框架,把 LLM 调用、工具调用、Agent 之间的通信都收拢到同一个入口,并且用同一把 Key 打通模型服务。结论是可以,但中间踩了不少坑,尤其是模型服务地址和鉴权配置这两块。

这篇文章面向的是已经在用 Kubernetes、想给 AI 应用补上基础设施层的平台工程师和 DevOps。我会给出可复制的 Kind 集群清单、Solo.io 组件的配置片段,以及通过 TaoToken 统一 Key 接入模型服务的 Base URL 和验证请求。整套流程从部署到调用形成闭环,你照着做就能在本地跑通。

Solo.io 这几个项目分工很清晰:kgateway 是 Kubernetes Gateway API 实现,前身是 Gloo Gateway,基于 Envoy 做数据面,2025 年新增了 AI Gateway 能力,支持 Prompt Guard 和推理服务编排;kagent 是 Kubernetes 原生的 Agentic AI 框架,用 CRD 定义和运行 AI 智能体;agentgateway 是专门为 Agent 通信设计的数据面代理,原生支持 A2A 和 MCP 协议;kmcp 则是 MCP Server 的开发运维工具集,提供脚手架、镜像构建、部署和 CRD 控制器。这四个项目组合起来,基本覆盖了从模型接入、Agent 编排到工具服务交付的完整链路。

我这次实验的核心目标,是把模型服务的接入点统一到 TaoToken 的 API 通道上。这样做的原因是,本地实验环境里模型来源经常变,今天用这个、明天换那个,如果每个组件都单独配一遍 Key 和 Base URL,维护成本很高。用统一通道之后,kgateway 的 InferencePool、kagent 的 LLM 提供商配置、agentgateway 的后端模型地址,都指向同一个入口,换模型只需要改一处。

2. TaoToken 统一接入:Base URL 与 Key 的前置准备

在开始部署之前,先把模型服务的接入通道准备好。TaoToken 提供的是 OpenAI 兼容的 API 接口,这意味着任何支持 OpenAI 协议的客户端和框架都能直接对接,不需要改代码。对于 Kubernetes 上的 AI 基础设施来说,这一点很关键,因为 kgateway、kagent 这些组件默认就是按 OpenAI 兼容格式去调用模型的。

你需要准备两样东西:API Key 和 Base URL。API Key 在控制台创建,地址是 https://taotoken.net/api-keys ,创建后复制保存,后面配置里会用到。Base URL 是 https://taotoken.net/api ,注意这个地址不带任何路径后缀,OpenAI 兼容的客户端会自动拼接 /v1/chat/completions 这类路径。

模型 ID 这块,TaoToken 的模型列表里包含多个主流模型,你在配置时填对应的 Model ID 即可。比如 kagent 的 Agent CR 里需要指定模型名称,kgateway 的 InferencePool 需要指定后端模型标识,这些地方填的都是同一个 Model ID。

我建议在正式配置 Kubernetes 组件之前,先用 curl 验证一下 Key 和 Base URL 是否可用。这一步能排除掉大部分低级错误,比如 Key 复制时多了空格、Base URL 写成了带 /v1 的地址等。验证命令如下:

curl -s https://taotoken.net/api/v1/chat/completions \ -H "Content-Type: application/json" \ -H "Authorization: Bearer $TAOTOKEN_API_KEY" \ -d '{ "model": "gpt-4o-mini", "messages": [{"role": "user", "content": "ping"}], "max_tokens": 16 }'

如果返回的 JSON 里有 choices 字段,说明通道正常。如果返回 401,检查 Key 是否正确;如果返回 404,检查 Base URL 是否多写了路径。这一步通过之后,再往下做 Kubernetes 组件的配置。

对于长期在集群里跑 Agent 和推理服务的场景,建议用 Coding Plan 的额度,比按量计费更适合持续调用。控制台地址是 https://taotoken.net/console ,可以查看用量和额度情况。如果你只是想先验证模型对话效果,可以直接在模型对话页面测试,地址是 https://taotoken.net/chat 。

把 Key 存进 Kubernetes Secret 是标准做法,不要硬编码在 YAML 里。创建 Secret 的命令:

kubectl create secret generic taotoken-credentials \ --from-literal=api-key=$TAOTOKEN_API_KEY \ -n kgateway-system

这个 Secret 后面会被 kgateway 和 kagent 引用。注意命名空间要和组件部署的命名空间一致,我统一放在 kgateway-system 里,你也可以按自己的规划调整。

3. Kind 集群与 Solo.io 组件的可复制配置

先创建 Kind 集群。我用的配置是三节点,一个控制面两个工作节点,足够跑通所有组件。把下面的内容保存为 kind-config.yaml:

kind: Cluster apiVersion: kind.x-k8s.io/v1alpha4 nodes: - role: control-plane extraPortMappings: - containerPort: 30080 hostPort: 30080 protocol: TCP - role: worker - role: worker

创建集群:

kind create cluster --name solo-ai --config kind-config.yaml

集群起来之后,先装 kgateway。用 Helm 安装:

helm install kgateway-crds oci://ghcr.io/kgateway-dev/charts/kgateway-crds \ --version v2.0.0 \ --namespace kgateway-system \ --create-namespace helm install kgateway oci://ghcr.io/kgateway-dev/charts/kgateway \ --version v2.0.0 \ --namespace kgateway-system \ --set inferenceExtension.enabled=true

安装完成后,创建一个 Gateway 资源,作为 AI 流量的统一入口。保存为 gateway.yaml:

apiVersion: gateway.networking.k8s.io/v1 kind: Gateway metadata: name: ai-gateway namespace: kgateway-system spec: gatewayClassName: kgateway listeners: - name: http protocol: HTTP port: 80 allowedRoutes: namespaces: from: All

应用之后,再创建一个 HTTPRoute,把模型调用路径转发到后端。这里的关键是后端地址指向 TaoToken 的 API 通道。保存为 httproute.yaml:

apiVersion: gateway.networking.k8s.io/v1 kind: HTTPRoute metadata: name: taotoken-route namespace: kgateway-system spec: parentRefs: - name: ai-gateway rules: - matches: - path: type: PathPrefix value: /v1 backendRefs: - group: "" kind: Service name: taotoken-external port: 443

因为 TaoToken 是外部服务,需要创建一个 ExternalName Service 或者用 Backend 资源指向外部地址。更简单的方式是用 kgateway 的 Backend 资源:

apiVersion: gateway.kgateway.dev/v1alpha1 kind: Backend metadata: name: taotoken-backend namespace: kgateway-system spec: type: Static static: hosts: - host: taotoken.net port: 443

然后在 HTTPRoute 里引用这个 Backend。同时配置 TLS 和鉴权,把 API Key 通过 header 注入。这部分用 TrafficPolicy 实现:

apiVersion: gateway.kgateway.dev/v1alpha1 kind: TrafficPolicy metadata: name: taotoken-auth namespace: kgateway-system spec: targetRefs: - kind: HTTPRoute name: taotoken-route group: gateway.networking.k8s.io transformation: request: set: - name: Authorization value: "Bearer ${TAOTOKEN_API_KEY}"

注意这里的 ${TAOTOKEN_API_KEY} 需要从 Secret 引用,实际配置时用 valueFrom 或者环境变量替换。kgateway 支持从 Secret 读取,具体写法参考官方文档的 transformation 部分。

接下来装 kagent。kagent 的安装需要先配置 LLM 提供商,这里直接指向 TaoToken:

helm install kagent oci://ghcr.io/kagent-dev/kagent/helm/kagent \ --namespace kagent \ --create-namespace \ --set providers.openai.baseUrl=https://taotoken.net/api \ --set providers.openai.apiKeySecret.name=taotoken-credentials \ --set providers.openai.apiKeySecret.key=api-key

装完之后,创建一个 Agent CR 来验证。保存为 agent.yaml:

apiVersion: kagent.dev/v1alpha1 kind: Agent metadata: name: k8s-inspector namespace: kagent spec: model: gpt-4o-mini provider: openai systemPrompt: "你是一个 Kubernetes 运维助手,帮助排查 Pod 和 Service 问题。" tools: - name: get-resources - name: get-pod-logs

应用这个 CR 之后,kagent 控制器会创建对应的 Agent 实例,并通过 TaoToken 的通道调用模型。

agentgateway 和 kmcp 的安装类似,agentgateway 目前提供独立二进制和 Helm 两种方式,kmcp 用 go install 或者下载 release 二进制。这两个组件在本地实验里主要用于验证 Agent 通信和 MCP 工具服务,配置上同样把模型后端指向 TaoToken。

4. 验证请求:从网关到模型的完整链路

配置完成后,需要验证整条链路是否通。最直接的方式是从集群内部发一个请求,经过 kgateway 转发到 TaoToken,再返回模型响应。

先确认 Gateway 的地址:

kubectl get gateway ai-gateway -n kgateway-system

拿到 ADDRESS 字段后,用 port-forward 把网关端口映射到本地:

kubectl port-forward -n kgateway-system svc/ai-gateway 8080:80

然后发一个 chat completions 请求:

curl -s http://localhost:8080/v1/chat/completions \ -H "Content-Type: application/json" \ -d '{ "model": "gpt-4o-mini", "messages": [{"role": "user", "content": "用一句话解释 Kubernetes Gateway API"}], "max_tokens": 64 }'

如果返回的 JSON 里有 choices 数组,并且 content 字段有内容,说明网关到模型的链路是通的。这一步验证的是 kgateway 的路由和鉴权注入是否生效。

接下来验证 kagent 的 Agent 是否能正常调用模型。用 kagent CLI 进入交互模式:

kagent chat --agent k8s-inspector

在交互界面里输入「列出 kagent 命名空间下的所有 Pod」,Agent 会调用 get-resources 工具,然后通过 TaoToken 通道让模型生成回答。如果能看到 Pod 列表和模型生成的解释,说明 kagent 的 LLM 提供商配置正确。

验证 agentgateway 的时候,可以起一个简单的 MCP 工具服务,然后通过 agentgateway 代理调用。kmcp 生成的脚手架项目自带测试用例,部署后可以用 MCP Inspector 直接测试。这部分验证的是 Agent 到工具的通信链路。

我在实测中发现,最容易出问题的是 TLS 和 header 注入这两个环节。kgateway 转发到外部 HTTPS 服务时,需要确保 Backend 的 TLS 配置正确,否则会报证书错误。另外,Authorization header 的注入如果没生效,TaoToken 会返回 401,这时候要检查 TrafficPolicy 的 targetRefs 是否指向了正确的 HTTPRoute。

还有一个细节是模型 ID 的映射。kgateway 的 InferencePool 里配置的模型名称,和 TaoToken 实际接受的 Model ID 必须一致。如果 InferencePool 里写的是自定义名称,需要在路由层做一次映射,或者直接在请求里用 TaoToken 支持的 Model ID。

5. 常见报错排查:401、local proxy failed 与 OAuth

这一节整理我在实验过程中遇到的几个典型报错,以及对应的排查思路。

第一个是 401 Unauthorized。这个报错通常出现在两个位置:一是 curl 直接调 TaoToken 时,二是经过 kgateway 转发后。直接调用时报 401,检查 API Key 是否正确、是否有多余空格、是否在请求头里正确设置了 Bearer 前缀。经过网关时报 401,检查 TrafficPolicy 的 header 注入是否生效,可以用 kubectl logs 查看 kgateway 的访问日志,确认请求头里有没有 Authorization 字段。

第二个是 local proxy failed。这个报错在 kagent 调用模型时比较常见,原因是 kagent 的 provider 配置里 Base URL 写错了,或者网络策略阻止了出站请求。检查 kagent 的 ConfigMap 或者 Helm values,确认 baseUrl 是 https://taotoken.net/api ,不要写成 https://taotoken.net/api/v1 。另外,如果集群用了 NetworkPolicy,需要允许 kagent 命名空间出站到 taotoken.net 的 443 端口。

第三个是 reading choices 相关的报错,比如 "error reading choices field" 或者 "choices is empty"。这个通常说明请求发出去了,但返回的 JSON 结构不符合预期。可能的原因是模型 ID 写错了,TaoToken 返回了错误信息而不是正常的 completions 响应。检查请求体里的 model 字段,确认是 TaoToken 支持的 Model ID。另外,如果 max_tokens 设置得太小,比如 1 或 2,有些模型可能返回空 choices,把 max_tokens 调到 16 以上再试。

第四个是 OAuth 相关的报错。kagent 在某些配置下会尝试用 OAuth 流程获取 token,如果你用的是 API Key 方式,需要在 provider 配置里明确指定 authType 为 apiKey,避免它走 OAuth 流程。具体的配置项在 kagent 的 Helm values 里,设置 providers.openai.authType=apiKey 即可。

还有一个容易忽略的点是 CC Switch 和 Cline MCP 的配置。如果你在本地用 CC Switch 管理多个模型通道,需要确保 Base URL、API Key、Model ID 这三件套都指向 TaoToken。CC Switch 的配置文件里,Base URL 填 https://taotoken.net/api ,Key 填控制台创建的 Key,Model ID 填对应的模型标识。Cline 的 MCP 配置类似,在 settings.json 里配置好这三项之后,Agent 调用工具时就会走 TaoToken 通道。

Codex 的 auth.json 配置也是同样的逻辑。在 auth.json 里填入 Base URL 和 Key,Model ID 按需选择。这样 Codex 在执行编码任务时,模型调用会统一走 TaoToken,方便集中管理用量和额度。

排查的时候,我习惯先用 curl 直接验证 TaoToken 通道,排除 Key 和 Base URL 的问题;然后再从集群内部发请求,排除网络策略和 DNS 的问题;最后检查网关和 Agent 的配置,确认 header 注入和 provider 设置正确。这个顺序能快速定位问题出在哪一层。

6. 把统一接入固化到日常开发流程

跑通整套链路之后,我建议把 TaoToken 的接入配置固化到日常开发流程里。具体做法是,把 API Key 存进 Kubernetes Secret,把 Base URL 和 Model ID 写进 ConfigMap,然后在 kgateway、kagent、agentgateway 的配置里引用这些 Secret 和 ConfigMap。这样换模型或者换 Key 的时候,只需要改一处,不用逐个组件去改。

对于长期在集群里跑 Agent 和推理服务的场景,用 Coding Plan 的额度比按量计费更划算,控制台可以查看用量和剩余额度。如果你还在选模型阶段,可以先用模型对话页面测试不同模型的效果,确定之后再写进配置。

接入文档里有各个组件的详细配置说明,包括 kgateway 的 TrafficPolicy 写法、kagent 的 Agent CR 示例、agentgateway 的 MCP 代理配置等。遇到配置问题时,先对照文档检查字段名和格式,大部分报错都是拼写或者路径问题。

我在实验里最大的体会是,Kubernetes 上的 AI 基础设施,难点不在单个组件的安装,而在组件之间的衔接。kgateway 负责入口流量,kagent 负责 Agent 编排,agentgateway 负责 Agent 通信,kmcp 负责工具服务交付,这四个环节的配置需要保持一致,尤其是模型接入点。用 TaoToken 统一 Key 和 Base URL 之后,这个一致性问题就简化成了改一个地方,维护成本降了很多。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询