Runtime 认证
为 Kubernetes 中的 AgentConnect Runtime 配置 API 密钥和模型端点,通过共享 Secret 支持模型发现与 Agent 会话,让无人值守的 Runtime 无需交互式登录。
Daemon 池会在探测沙箱中启动每个已安装的 Runtime,以读取其模型。该探测没有 Agent 身份,因此无法读取组织或 Agent 的密钥。一个安装实例范围内共用的 Secret 可以同时为探测和 Agent 会话提供 API 密钥。对于无人值守的 Runtime,请使用 API 密钥认证;交互式 OAuth 登录无法在池探测中完成。
选择 Runtime 镜像
Chart 默认的 runtime-sandbox 镜像包含 Claude Code、Codex、DeepSeek Harness 和 OpenCode。已发布的 runtime-sandbox-full 镜像额外包含 Qwen Code 和其他 ACP Runtime:
daemonPool:
runtime:
repository: ghcr.io/agentconnect-md/runtime-sandbox-fullChart 会附加所选的 AgentConnect 发布标签。使用 daemonPool.runtime.image 可以固定完整的镜像引用。更改镜像会重新启动 Runtime 发现。
用 Secret 配置任意 Runtime
OpenCode 使用 Anthropic、OpenAI 或 DeepSeek 时,请使用下方的内置模型凭证对。已有的凭证对会自动复用,无需单独添加 OpenCode 环境变量映射。其他提供方或额外的 Runtime 设置可使用以下映射方式。
- 选择一个模型提供方并获取 API 密钥。查阅该 Runtime 的官方文档,了解其 API 密钥环境变量、支持的模型 ID 和端点格式。例如,参见 Qwen Code 认证、OpenCode 提供方和 DeepSeek 的 API 根地址。
- 把密钥、端点以及所有 Runtime 配置放进 AgentConnect Release 命名空间中的一个 Kubernetes Secret。不要把密钥放进 Helm values。
- 在
daemonPool.runtimeEnvironment.runtimes下,把每个 Runtime 的环境变量映射到一个 Secret 条目。使用镜像上报的 Runtime ID。Chart 只把指定名称的条目投射进 Daemon;在探测和会话启动时,它只向每个 Runtime 发送其自身映射的变量。 - 升级 Helm Release。映射发生变化会滚动重启 Daemon 池并重新运行探测。更改 Secret 的值之后,请重启 Daemon 池,使其环境和探测得到刷新。
例如,使用 DeepSeek 的 OpenAI 兼容 API 的安装实例可以在其 Secret 中放入这些条目:
| Secret 条目 | 值 |
|---|---|
PROVIDER_API_KEY | 你的 DeepSeek API 密钥 |
PROVIDER_BASE_URL | https://api.deepseek.com |
QWEN_MODEL | deepseek-flash |
OPENCODE_CONFIG_CONTENT | {"model":"deepseek/deepseek-flash","provider":{"deepseek":{"options":{"baseURL":"https://api.deepseek.com"}}}} |
然后引用这些条目,而无需把它们的值复制进 Helm:
daemonPool:
runtime:
repository: ghcr.io/agentconnect-md/runtime-sandbox-full
runtimeEnvironment:
existingSecret: agentconnect-model-credentials
runtimes:
qwen-code:
OPENAI_API_KEY: PROVIDER_API_KEY
OPENAI_BASE_URL: PROVIDER_BASE_URL
OPENAI_MODEL: QWEN_MODEL
opencode:
DEEPSEEK_API_KEY: PROVIDER_API_KEY
OPENCODE_CONFIG_CONTENT: OPENCODE_CONFIG_CONTENTQwen Code 会根据 OPENAI_API_KEY 选择其 OpenAI 兼容的 API 密钥认证。OpenCode 会根据 OPENCODE_CONFIG_CONTENT 选择 deepseek 提供方和模型,并从环境中读取 DEEPSEEK_API_KEY。这里展示的端点和模型遵循 DeepSeek 当前的 API 文档;如果使用其他服务,请参考你所选提供方的文档。这两个 Runtime 都不需要浏览器登录或已保存的 OAuth 账号。
OpenCode 的 model 设置只是选择默认模型;它不限制提供方列表。对于内置凭证对以外的提供方,把 API 密钥放进 Secret,并在 opencode 下映射对应变量,例如 OpenCode Zen 的 OPENCODE_API_KEY。如果同时配置了内置凭证对,请在 OPENCODE_CONFIG_CONTENT 的 enabled_providers 中显式包含额外的提供方。模型出现在目录中并不代表账号就能调用它;请用该提供方的凭据发起一次请求来验证。
当 daemonPool.modelCredentials.existingSecret 已经指向同一个 Secret 时,可以省略 runtimeEnvironment.existingSecret。每个映射指向的是 Secret 的条目名称,而不是内联的值。缺失或为空的条目会让 Daemon 在启动时停止,而不是在没有预期凭证的情况下静默探测。Runtime 映射会覆盖同名的 Agent 级变量;对于内置模型转换和已签发会话密钥所写入的变量,它们保留原有的优先级。
内置模型凭证对与其他来源
Chart 还支持用 daemonPool.modelCredentials.existingSecret 进行内置的凭证转换:
| Runtime | 令牌条目 | 基础 URL 条目 |
|---|---|---|
Claude Code 与 OpenCode 的 anthropic 提供方 | ANTHROPIC_MODEL_TOKEN | ANTHROPIC_MODEL_BASE_URL |
Codex 与 OpenCode 的 openai 提供方 | OPENAI_MODEL_TOKEN | OPENAI_MODEL_BASE_URL |
DeepSeek Harness 与 OpenCode 的 deepseek 提供方 | DEEPSEEK_MODEL_TOKEN | DEEPSEEK_MODEL_BASE_URL |
MODEL_TOKEN 和 MODEL_BASE_URL 是这些已识别 Runtime 的共享回退。Runtime 专用的凭证对会整体替换共享的凭证对。Daemon 会在探测和启动时把每个凭证对转换为对应 Runtime 的配置;它不会为 Qwen Code 或任意 Runtime 转换凭证对。对于这些 Runtime,以及密钥和 URL 之外的设置(例如模型选择或提供方配置),请使用 runtimeEnvironment。
OpenCode 默认启用通过这些凭证对配置的提供方。OPENCODE_CONFIG_CONTENT 中显式设置的 enabled_providers、模型限制和自定义模型定义会保留。Anthropic 复用 Claude Code 的基础 URL:AgentConnect 会为 OpenCode 的 SDK 补上 /v1,已有该后缀时不会重复添加。OpenAI 和 DeepSeek 的基础 URL 保持不变。
使用密钥服务器时,只含端点的凭证对就足以完成模型发现。发现过程不会发起模型请求;每个实际会话会获得所选提供方的签发密钥。跨提供方切换会在当前工作结束后的下次 Runtime 启动时生效,使用新提供方的密钥。不使用密钥服务器时,OpenCode 会收到各提供方独立的静态密钥,可以直接在已配置的提供方之间切换。
modelEgress.clients 是面向受支持客户端的另一个安装实例范围的来源。Chart 拒绝将它与 modelCredentials.existingSecret 组合使用,也拒绝在 daemonPool.extraEnv 中再次设置内置凭证对。组织和 Agent 的变量与密钥会到达它们的 Agent 会话,但不会到达独立的池探测。基础设施 → Provider keys 是面向受支持提供方消费者的组织级连接;它们不是 ACP Runtime 的凭证。
OpenCode 也会复用 modelEgress.clients.claude、.codex 和 .deepseek 提供的凭证对。启用 OpenCode 无需修改这些已有条目,也不需要添加单独的 opencode 客户端条目。
对于 Codex 网关,请使用 OPENAI_MODEL_TOKEN 和 OPENAI_MODEL_BASE_URL,并填入该网关的 Codex 兼容 API 根地址。Daemon 会同时配置 Codex 的提供方 URL 和 API 密钥。当端点直接是 DeepSeek 时,使用其文档中的 API 根地址,即 https://api.deepseek.com。
要在部署完成后确认发现结果,请查看 Daemon 池的探测完成日志,并在控制台中检查该 Runtime 的模型选择器。即使镜像中已安装了某个 Runtime,如果它的 API 密钥、模型 ID 或端点有误,其选择器仍然可能为空。
密钥留在 Daemon 池中
端点为 HTTPS 时,安装实例自身的静态密钥不会进入 Agent Pod。Daemon 池从自己的环境中读取这些密钥,Pod 里的 Runtime 只拿到占位符,由池成员在每个发往提供方的请求上换成真实密钥。这只适用于在本 Chart 中配置的密钥:modelCredentials 中的内置凭证对、modelEgress.clients.<client>.apiKey,以及在 runtimeEnvironment 下映射的 ANTHROPIC_API_KEY、OPENAI_API_KEY、DEEPSEEK_API_KEY 和 COPILOT_PROVIDER_API_KEY。
- Daemon 池需要能通过 HTTPS 访问这些密钥用到的每个提供方端点或网关。如果你的集群限制了发布命名空间的出站流量,请放行。
- 以下情况密钥仍会留在 Pod 的环境中:端点是明文
http://;Daemon 无法为该 Runtime 对应到唯一端点;或者另一个变量也携带了这个密钥,例如内嵌了密钥的OPENCODE_CONFIG_CONTENT。Daemon 会记录一次日志。 - 密钥服务器签发的密钥和模型发现探测不受影响。
其他 Daemon 上的同类行为见凭证保护。