ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

用 k8s+Ingress+Traefik 搭建外网可访问 Web 服务:TaoToken 统一 Key 接入与配置骨架

用 k8s+Ingress+Traefik 搭建外网可访问 Web 服务:TaoToken 统一 Key 接入与配置骨架 1. 从 Pod 到公网为什么单靠 Service 不够在 k8s 里把 nginx 跑起来再挂一个 Service集群内部访问没问题但一旦要让外网用户通过域名访问事情就变得麻烦起来。Service 工作在四层只能按 IP 和端口转发没法根据域名或路径做分流。你总不能给每个微服务都开一个 NodePort然后让用户记一堆IP:端口吧。Ingress 解决的就是这个问题。它工作在七层能根据 Host 和 Path 把请求转发到不同的 Service。但 Ingress 本身只是一堆路由规则真正干活的是 Ingress Controller。minikube 默认用的是 ingress-nginx而我想试试 Traefik因为它用 Go 写的启动快自带 Dashboard配置也相对直观。这篇要做的是在 k8s 集群里用 Ingress Traefik 暴露一个 Web 服务同时把 AI 工具链的 Key 统一走 TaoToken 的 API 通道。你会拿到可复制的 IngressRoute 配置、settings.json 和 config.toml 骨架以及用 curl 验证外网访问和 Key 生效的完整步骤。适合已经在跑 k8s、想让 AI 编码工具稳定接入统一 Key 的开发者。2. TaoToken 前置统一 Key 与 API 通道TaoToken 在这里扮演的是「统一入口」的角色。你不需要在每台机器、每个工具里分别填不同的 Key而是把模型调用统一指向一个 API 地址用同一个 Key 管理。官网入口是 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content API 地址是 https://taotoken.net/api 。具体操作上先在控制台创建一个 API Key。打开 https://taotoken.net/console?utm_sourcetaotoken_aicg_blog_endutm_contentconsoleutm_campaignrewrite 登录后进入 API Keys 页面点新建复制生成的 Key。这个 Key 后面会写进 settings.json 和 config.toml。如果你用的是 Claude Code 这类编码工具可以走 Coding Plan 通道地址是 https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding-planutm_campaignrewrite 。它适合长期编码和 Agent 场景Key 的管理方式和普通 API 一致。注意API 地址不要加 UTM 参数直接用 https://taotoken.net/api 即可。Key 只存在服务端配置文件里不要提交到 Git。3. 可复制配置IngressRoute 与工具链骨架3.1 部署 nginx 与 Service先创建命名空间和 Deployment。下面这份 YAML 可以直接kubectl apply -fapiVersion: v1 kind: Namespace metadata: name: test-ns --- apiVersion: apps/v1 kind: Deployment metadata: labels: app: my-dep name: my-dep namespace: test-ns spec: replicas: 3 selector: matchLabels: app: my-dep template: metadata: labels: app: my-dep spec: containers: - image: nginx name: nginx --- apiVersion: v1 kind: Service metadata: labels: app: my-dep name: my-dep namespace: test-ns spec: selector: app: my-dep ports: - port: 8000 protocol: TCP targetPort: 80 type: NodePort按顺序创建后用kubectl get pod,svc -n test-ns确认三个 Pod 都是 RunningService 的 NodePort 已经分配。3.2 Traefik 的 IngressRouteTraefik 用 CRD 定义路由比原生 Ingress 更灵活。下面这份 IngressRoute 把/my-dep/路径的请求转发到my-depServiceapiVersion: traefik.io/v1alpha1 kind: IngressRoute metadata: name: my-dep-route namespace: test-ns spec: entryPoints: - web routes: - match: PathPrefix(/my-dep) kind: Rule services: - name: my-dep port: 8000 middlewares: - name: strip-my-dep --- apiVersion: traefik.io/v1alpha1 kind: Middleware metadata: name: strip-my-dep namespace: test-ns spec: stripPrefix: prefixes: - /my-dep这里的关键是stripPrefix它把/my-dep前缀去掉再转发给后端否则 nginx 会因为路径不匹配返回 404。我踩过的坑就是忘了加这个中间件结果一直 404翻日志才发现请求路径带着前缀打到了 nginx。3.3 settings.json 骨架如果你用 Claude Code 或类似工具settings.json 里这样写{ apiKey: 你的TaoToken Key, baseUrl: https://taotoken.net/api, model: claude-sonnet-4-20250514, maxTokens: 8192, timeout: 60000 }baseUrl指向 TaoToken 的 API 地址apiKey填控制台生成的 Key。这样工具链的所有请求都走统一通道换 Key 只需要改这一个文件。3.4 config.toml 骨架有些工具用 TOML 格式比如部分 CLI 编码助手[api] base_url https://taotoken.net/api api_key 你的TaoToken Key timeout 60 [model] name claude-sonnet-4-20250514 max_tokens 8192 [proxy] enabled falseproxy.enabled保持 false因为 TaoToken 本身就是统一入口不需要额外转发。4. 验证请求curl 测外网访问与 Key 生效4.1 验证 Ingress 外网访问先拿到 minikube 的 IPminikube ip假设返回192.168.49.2。然后在宿主机/etc/hosts里加一行192.168.49.2 java4ye.test接着用 curl 测试curl -H Host: java4ye.test http://192.168.49.2/my-dep/如果返回 nginx 的欢迎页 HTML说明 Ingress 路由生效了。如果返回 404检查 IngressRoute 的match规则和 Middleware 的stripPrefix是否配对。4.2 验证 TaoToken Key 生效用 curl 直接调 TaoToken 的 API确认 Key 能用curl -X POST https://taotoken.net/api/v1/messages \ -H Content-Type: application/json \ -H x-api-key: 你的TaoToken Key \ -H anthropic-version: 2023-06-01 \ -d { model: claude-sonnet-4-20250514, max_tokens: 100, messages: [{role: user, content: ping}] }返回 JSON 里如果有content字段说明 Key 和 API 通道都正常。如果返回 401检查 Key 是否复制完整返回 404 则确认 API 地址没有多余路径。4.3 验证工具链接入把 settings.json 放到工具配置目录后跑一次简单对话。如果工具能正常返回模型输出说明从 k8s 暴露的 Web 服务到 TaoToken 的整条链路都通了。你也可以在模型对话页面 https://taotoken.net/model-chat?utm_sourcetaotoken_aicg_blog_endutm_contentmodel-chatutm_campaignrewrite 直接测试 Key 是否生效省去本地配置的步骤。5. 本篇常见错排查404 但 nginx 日志正常大概率是 Traefik 转发时 Host 头丢了。Ingress 的规则里指定了host: java4ye.test如果 Traefik 转发时不带这个 Hostingress-nginx 就匹配不到规则。解决办法是在 Traefik 的 Middleware 里加customRequestHeaders把 Host 补上apiVersion: traefik.io/v1alpha1 kind: Middleware metadata: name: add-host namespace: test-ns spec: headers: customRequestHeaders: Host: java4ye.testIngress 地址一直为空minikube 的 ingress addon 有时需要等几分钟才分配地址。先minikube addons enable ingress然后kubectl get ingress -n test-ns -w持续观察。如果超过五分钟还是空重启 minikube 再试。Key 返回 401检查 settings.json 里apiKey字段有没有多余空格或者 Key 是否已经过期。重新在控制台生成一个替换后重启工具。Traefik Dashboard 打不开确认--api.insecuretrue已经加到启动参数里并且 8080 端口没有被占用。Dashboard 只是调试用生产环境建议关掉。路径匹配不生效Traefik 的PathPrefix和Path行为不同。PathPrefix(/my-dep)会匹配/my-dep和/my-dep/xxx而Path(/my-dep)只匹配精确路径。如果你要转发子路径用PathPrefix更稳妥。6. 接入文档与后续步骤整条链路跑通后日常维护其实很简单改 IngressRoute 加新路由改 settings.json 换 Key其他不用动。如果你要长期跑编码 Agent建议把 Key 放在 Coding Plan 里统一管理地址是 https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding-planutm_campaignrewrite 。接入文档在 https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite 里面有各工具的配置示例。API Keys 管理页面是 https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi-keysutm_campaignrewrite 建议定期轮换 Key。Claude Code 的接入说明在 https://taotoken.net/claude-code-anthropic?utm_sourcetaotoken_aicg_blog_endutm_contentclaude-code-anthropicutm_campaignrewrite 如果你用 Anthropic 协议的工具可以参考那份配置。最后提醒一句Traefik 的 Middleware 顺序会影响结果stripPrefix要放在headers之前否则 Host 补上了但路径没去掉后端还是 404。这个顺序问题我调了半天才反应过来希望你别再踩。
返回列表