1. 从 Claude 官方视频到容器 Secret:TaoToken 接入决策树
最近 Claude 官方视频把 Claude Slides、Claude Design、Claude Docs 放在同一波更新里,视频没有附正文文本,具体能力细节以视频内容为准。云原生开发真正要落地的是:把 TaoToken 写进 Kubernetes Secret,让容器内文档生成任务通过https://taotoken.net/api跑 Claude Docs。创建 Key 先看 TaoToken 官网,拿到YOUR_API_KEY后,再把客户端 Base URL 设为https://taotoken.net/api。这样镜像里没有凭证,Secret 可独立轮换,真正消耗 Token 的只是容器内文档生成任务对 Claude 模型的调用。
这篇文章按云原生开发的视角,把链路拆成四段:官网创建 Key、Kubernetes Secret 配置、Deployment 注入、运行日志排障。最终可复现的产出是:一份taotoken-secret、一份taotoken-config、一个可运行的 Deployment 片段,以及能从kubectl logs判断请求是否真的走到 TaoToken 的日志。整个过程不需要把 Key 写进 Dockerfile,也不需要在业务代码里硬编码 Base URL。
如果你正在做文档生成、Claude Docs 风格输出、仓库 README 整理、接口文档补全,这套结构可以直接改成 CronJob 或 Job。重点只有一个:容器里的模型客户端必须读到ANTHROPIC_BASE_URL=https://taotoken.net/api,而 API Key 必须来自 Secret,不要来自镜像层。
2. 在 TaoToken 官网创建 Key,并校准 Base URL 与模型名
先到 TaoToken 官网 登录并创建 API Key。创建时建议按环境拆 Key,例如claude-docs-dev、claude-docs-prod,不要用同一个 Key 跑本地调试和集群任务。复制出来的值在本文里统一写成YOUR_API_KEY,不要直接提交到 Git。
接着校准三个值:
- Base URL:
https://taotoken.net/api。 - API Key:
YOUR_API_KEY。 - 模型名:以 TaoToken 控制台模型列表为准,本文用
YOUR_MODEL_ID占位。
注意 Base URL 是客户端配置项,不要带 UTM。Anthropic SDK 会把 Base URL 和/v1/messages组合起来;如果你手写curl,要用完整路径https://taotoken.net/api/v1/messages。先把本地验证跑通,再写进 Kubernetes Secret,能避免后面把 Key 问题和网络问题混在一起。
本地验证可以这样做:
export TAOTOKEN_API_KEY="YOUR_API_KEY" export ANTHROPIC_BASE_URL="https://taotoken.net/api" curl -sS "${ANTHROPIC_BASE_URL}/v1/messages" \ -H "x-api-key: ${TAOTOKEN_API_KEY}" \ -H "anthropic-version: 2023-06-01" \ -H "content-type: application/json" \ -d '{ "model": "YOUR_MODEL_ID", "max_tokens": 128, "messages": [ {"role": "user", "content": "只回复:taotoken-container-ok"} ] }'如果返回 JSON,说明 Key、Base URL、模型名三者对齐。如果返回 401,优先检查 Key 是否复制完整、是否有尾随空格;如果 404,检查 Base URL 是否被写成了其他路径,或者代码里又重复拼了一次/v1;如果 429,检查是否并发过高或重试策略太激进。真正的 Token 消耗从这条请求开始,后面容器里的messages.create也是同一条计费链路。
3. Secret 与 ConfigMap 分层:Key 只在 Secret,Base URL 放 ConfigMap
在 Kubernetes 里,不建议把 Key 和普通配置混在一个 Secret 里。更清晰的做法是:Secret 只放TAOTOKEN_API_KEY,ConfigMap 放ANTHROPIC_BASE_URL和ANTHROPIC_MODEL。这样审计时能快速看到哪些对象含敏感值,轮换时也只动 Secret。
先创建命名空间:
kubectl create namespace ai-docs创建 Secret:
apiVersion: v1 kind: Secret metadata: name: taotoken-secret namespace: ai-docs type: Opaque stringData: TAOTOKEN_API_KEY: "YOUR_API_KEY"创建 ConfigMap:
apiVersion: v1 kind: ConfigMap metadata: name: taotoken-config namespace: ai-docs data: ANTHROPIC_BASE_URL: "https://taotoken.net/api" ANTHROPIC_MODEL: "YOUR_MODEL_ID"应用:
kubectl apply -f taotoken-secret.yaml kubectl apply -f taotoken-config.yaml这里使用stringData,kubectl 会自动转成 base64 存储。但要注意,Secret 默认 base64 只解决“不要明文写在 YAML 里”的问题,不等同于加密。生产环境还应该考虑 etcd 加密、RBAC 最小权限、审计日志,以及不要把kubectl get secret -o yaml的结果截图或贴到工单里。
容器里的应用通常认ANTHROPIC_API_KEY或ANTHROPIC_AUTH_TOKEN。为了兼容不同 SDK 版本,我们会在 Deployment 里把 Secret 的TAOTOKEN_API_KEY同时映射成这两个变量。Secret 本身只保存一个源 Key,后续轮换时只更新 Secret,然后重启 Deployment。
4. Deployment 片段:让 worker 容器通过 Secret 环境变量跑 Claude Docs
下面是一个最小可用的 Deployment。它假设镜像里有一个python -m worker.docs入口,负责调用 Claude 模型生成文档。envFrom读取 ConfigMap,secretKeyRef读取 Secret,两者职责分开。
apiVersion: apps/v1 kind: Deployment metadata: name: claude-docs-worker namespace: ai-docs spec: replicas: 1 selector: matchLabels: app: claude-docs-worker template: metadata: labels: app: claude-docs-worker spec: containers: - name: worker image: your-registry/claude-docs-worker:0.1.0 imagePullPolicy: IfNotPresent command: ["python", "-m", "worker.docs"] envFrom: - configMapRef: name: taotoken-config env: - name: ANTHROPIC_API_KEY valueFrom: secretKeyRef: name: taotoken-secret key: TAOTOKEN_API_KEY - name: ANTHROPIC_AUTH_TOKEN valueFrom: secretKeyRef: name: taotoken-secret key: TAOTOKEN_API_KEY resources: requests: cpu: "250m" memory: "512Mi" limits: cpu: "1" memory: "1Gi"容器内代码不要写死 Key,也不要打印请求头。一个最小 Python 调用示例如下:
import os from anthropic import Anthropic api_key = os.environ.get("ANTHROPIC_AUTH_TOKEN") or os.environ["ANTHROPIC_API_KEY"] base_url = os.environ["ANTHROPIC_BASE_URL"] model = os.environ.get("ANTHROPIC_MODEL", "YOUR_MODEL_ID") client = Anthropic( api_key=api_key, base_url=base_url, ) resp = client.messages.create( model=model, max_tokens=4096, messages=[ { "role": "user", "content": "为当前仓库生成 Claude Docs 风格的结构化文档,包含概述、安装、API 示例和排障。" } ], ) print(resp.content[0].text)这段代码里,base_url来自 ConfigMap,值必须是https://taotoken.net/api。api_key来自 Secret,值必须是YOUR_API_KEY对应的真实 Key。每次client.messages.create都会消耗 Token,因此批量文档任务要控制并发、设置超时和重试上限,避免一个失焦的循环把配额打满。
5. 运行日志:从 Secret 注入到 Claude Docs 文件落地
部署后先看 Pod 是否正常启动:
kubectl -n ai-docs apply -f claude-docs-worker.yaml kubectl -n ai-docs get pods -w然后跟踪日志:
kubectl -n ai-docs logs deploy/claude-docs-worker --tail=120期望看到类似下面的运行日志:
INFO worker.boot app=claude-docs-worker namespace=ai-docs INFO provider.config base_url=https://taotoken.net/api model=YOUR_MODEL_ID INFO secret.inject keys=ANTHROPIC_API_KEY,ANTHROPIC_AUTH_TOKEN present=true INFO docs.task.start source=repo://workspace target=claude-docs INFO request.start model=YOUR_MODEL_ID max_tokens=4096 INFO request.done status=ok stop_reason=end_turn INFO docs.write path=/workspace/out/claude-docs.md INFO worker.done task=claude-docs关键看三行:provider.config确认 Base URL 是https://taotoken.net/api;secret.inject确认 Key 已注入且没有缺失;request.done status=ok确认容器内文档生成任务真正调用了 Claude 模型。如果只有worker.boot没有request.start,问题在任务入口;如果有request.start没有request.done,问题在模型调用、网络出口或超时。
常见排障可以按这个表处理:
| 现象 | 优先检查 | 处理 |
|---|---|---|
| 401 | Secret 是否注入、Key 是否有空格 | 重新 apply Secret,再rollout restart |
| 404 | Base URL 是否是https://taotoken.net/api | 不要在客户端 Base URL 后再手动拼错路径 |
| 429 | 并发、重试、配额策略 | 降低并发,加指数退避,分批跑文档任务 |
| 连接超时 | 集群 DNS、出口网络、NetworkPolicy | 检查 Pod 网络策略和 DNS 解析 |
| 空响应或提前停止 | 模型名、max_tokens | 用控制台模型 ID,适当调大 max_tokens |
如果确认不是集群网络问题,可以回到 TaoToken 官网 检查 Key 状态、模型权限和用量情况。不要让排障脚本把完整 Key 打印到日志里,必要时只输出present=true/false。
6. Claude Code、Codex、CC Switch:三套配置不要互相套用
容器 worker 解决的是批处理文档生成,Claude Code 解决的是交互式开发,Codex 又是另一套配置体系。三者都指向同一个 TaoToken Base URL,但环境变量和配置文件格式不同,不能互相套。
Claude Code 使用settings.json,核心是ANTHROPIC_*:
{ "env": { "ANTHROPIC_BASE_URL": "https://taotoken.net/api", "ANTHROPIC_AUTH_TOKEN": "YOUR_API_KEY", "ANTHROPIC_MODEL": "YOUR_MODEL_ID" } }这里 Base URL 仍然是https://taotoken.net/api,Key 用YOUR_API_KEY。如果你在容器里跑 Claude Code,也可以把ANTHROPIC_AUTH_TOKEN从 Secret 注入,但不要把交互式配置文件和集群 Secret 混在一起维护。
Codex 使用config.toml,不要套用ANTHROPIC_*:
model = "YOUR_MODEL_ID" model_provider = "taotoken" [model_providers.taotoken] name = "TaoToken" base_url = "https://taotoken.net/api" env_key = "TAOTOKEN_API_KEY" wire_api = "chat"Codex 的env_key指向它自己的环境变量,例如TAOTOKEN_API_KEY。如果你把ANTHROPIC_AUTH_TOKEN塞进 Codex,最常见的结果是配置读取不到或请求路径不匹配。容器 Secret 可以保存同一个 Key,但不同客户端要用各自约定的变量名。
如果你使用 CC Switch 管理多套供应商,核心三件套可以理解为:供应商、Base URL、Key/模型。
provider: name: taotoken baseUrl: https://taotoken.net/api apiKey: YOUR_API_KEY model: YOUR_MODEL_ID不同版本的字段名可能略有差异,但这三件套不会变:切到 TaoToken 时,Base URL 统一是https://taotoken.net/api,Key 用YOUR_API_KEY,模型名以控制台为准。容器 worker 用 Secret 注入,Claude Code 用settings.json,Codex 用config.toml,CC Switch 只做切换管理,不要互相复制环境变量名。
7. Secret 轮换与 CI 检查:容器跑 Claude Docs 后要守住什么
Secret 写进容器之后,安全边界并没有自动完成。至少要守住三件事:Key 不进镜像、日志不泄露 Key、轮换后能快速重启。
轮换 Key 可以用kubectl create secret --dry-run=client的方式覆盖:
kubectl -n ai-docs create secret generic taotoken-secret \ --from-literal=TAOTOKEN_API_KEY='YOUR_API_KEY' \ --dry-run=client -o yaml | kubectl apply -f - kubectl -n ai-docs rollout restart deploy/claude-docs-worker检查环境变量是否注入成功,但不要打印完整 Key:
kubectl -n ai-docs exec deploy/claude-docs-worker -- sh -c 'env | grep -E "ANTHROPIC_BASE_URL|ANTHROPIC_MODEL|ANTHROPIC_AUTH_TOKEN" | sed "s/ANTHROPIC_AUTH_TOKEN=.*/ANTHROPIC_AUTH_TOKEN=***/"'你应该看到ANTHROPIC_BASE_URL=https://taotoken.net/api,以及ANTHROPIC_AUTH_TOKEN=***。如果看不到 Base URL,说明 ConfigMap 没有被正确挂载;如果看不到 token,说明 Secret 键名或 Deployment 引用不匹配。
另外,CI 里不要输出 Secret。文档生成任务如果由 CI 触发,建议 CI 只负责构建镜像和提交 Job,真正的模型调用放在集群内 worker 容器里,通过 Secret 读取 Key。这样 CI 日志里不会出现凭证,Token 消耗也能集中到容器任务上。更多 Key 管理入口可以在 TaoToken 官网 查看。
8. 下一步:从模型对话到 Claude Code 文档
回到最初的目标:Claude 官方视频带来了 Claude Slides、Claude Design、Claude Docs 这些新话题,但云原生团队要把它们变成可运行能力,核心还是 Secret、Base URL、Deployment 和日志。你现在已经有一套可复现路径:在 TaoToken 官网创建YOUR_API_KEY,把客户端 Base URL 设为https://taotoken.net/api,用 Secret 注入容器,通过 Deployment 跑文档生成任务,再用kubectl logs确认request.done status=ok。
如果你想先验证模型返回,可以直接去 模型对话 试一条请求。如果你准备把文档生成任务长期放进集群,建议先看 Coding Plan,再按环境创建或轮换 Key:API Keys。如果你还想把交互式开发也接上,继续看 Claude Code 文档。
还没有 Key 的话,先从 TaoToken 官网 创建YOUR_API_KEY。容器 worker、Claude Code、Codex 配置里的 Base URL 都保持https://taotoken.net/api,但环境变量和配置文件按各自体系写。最后用运行日志确认provider.config base_url=https://taotoken.net/api和request.done status=ok同时出现,再把批量 Claude Docs 任务逐步放量。