ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

TaoToken 写进容器 Secret,跑 Claude Docs

2026/9/17 22:11:13 拓冰建站 浏览量
TaoToken 写进容器 Secret,跑 Claude Docs 1. 从 Claude 官方视频到容器 SecretTaoToken 接入决策树最近 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_URLhttps://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 URLhttps://taotoken.net/api。API KeyYOUR_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_KEYYOUR_API_KEY export ANTHROPIC_BASE_URLhttps://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 只在 SecretBase URL 放 ConfigMap在 Kubernetes 里不建议把 Key 和普通配置混在一个 Secret 里。更清晰的做法是Secret 只放TAOTOKEN_API_KEYConfigMap 放ANTHROPIC_BASE_URL和ANTHROPIC_MODEL。这样审计时能快速看到哪些对象含敏感值轮换时也只动 Secret。先创建命名空间kubectl create namespace ai-docs创建 SecretapiVersion: v1 kind: Secret metadata: name: taotoken-secret namespace: ai-docs type: Opaque stringData: TAOTOKEN_API_KEY: YOUR_API_KEY创建 ConfigMapapiVersion: 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这里使用stringDatakubectl 会自动转成 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读取 ConfigMapsecretKeyRef读取 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_keyapi_key, base_urlbase_url, ) resp client.messages.create( modelmodel, max_tokens4096, 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 --tail120期望看到类似下面的运行日志INFO worker.boot appclaude-docs-worker namespaceai-docs INFO provider.config base_urlhttps://taotoken.net/api modelYOUR_MODEL_ID INFO secret.inject keysANTHROPIC_API_KEY,ANTHROPIC_AUTH_TOKEN presenttrue INFO docs.task.start sourcerepo://workspace targetclaude-docs INFO request.start modelYOUR_MODEL_ID max_tokens4096 INFO request.done statusok stop_reasonend_turn INFO docs.write path/workspace/out/claude-docs.md INFO worker.done taskclaude-docs关键看三行provider.config确认 Base URL 是https://taotoken.net/apisecret.inject确认 Key 已注入且没有缺失request.done statusok确认容器内文档生成任务真正调用了 Claude 模型。如果只有worker.boot没有request.start问题在任务入口如果有request.start没有request.done问题在模型调用、网络出口或超时。常见排障可以按这个表处理现象优先检查处理401Secret 是否注入、Key 是否有空格重新 apply Secret再rollout restart404Base URL 是否是https://taotoken.net/api不要在客户端 Base URL 后再手动拼错路径429并发、重试、配额策略降低并发加指数退避分批跑文档任务连接超时集群 DNS、出口网络、NetworkPolicy检查 Pod 网络策略和 DNS 解析空响应或提前停止模型名、max_tokens用控制台模型 ID适当调大 max_tokens如果确认不是集群网络问题可以回到 TaoToken 官网 检查 Key 状态、模型权限和用量情况。不要让排障脚本把完整 Key 打印到日志里必要时只输出presenttrue/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/apiKey 用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 chatCodex 的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/apiKey 用YOUR_API_KEY模型名以控制台为准。容器 worker 用 Secret 注入Claude Code 用settings.jsonCodex 用config.tomlCC Switch 只做切换管理不要互相复制环境变量名。7. Secret 轮换与 CI 检查容器跑 Claude Docs 后要守住什么Secret 写进容器之后安全边界并没有自动完成。至少要守住三件事Key 不进镜像、日志不泄露 Key、轮换后能快速重启。轮换 Key 可以用kubectl create secret --dry-runclient的方式覆盖kubectl -n ai-docs create secret generic taotoken-secret \ --from-literalTAOTOKEN_API_KEYYOUR_API_KEY \ --dry-runclient -o yaml | kubectl apply -f - kubectl -n ai-docs rollout restart deploy/claude-docs-worker检查环境变量是否注入成功但不要打印完整 Keykubectl -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_URLhttps://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 statusok。如果你想先验证模型返回可以直接去 模型对话 试一条请求。如果你准备把文档生成任务长期放进集群建议先看 Coding Plan再按环境创建或轮换 KeyAPI Keys。如果你还想把交互式开发也接上继续看 Claude Code 文档。还没有 Key 的话先从 TaoToken 官网 创建YOUR_API_KEY。容器 worker、Claude Code、Codex 配置里的 Base URL 都保持https://taotoken.net/api但环境变量和配置文件按各自体系写。最后用运行日志确认provider.config base_urlhttps://taotoken.net/api和request.done statusok同时出现再把批量 Claude Docs 任务逐步放量。