ARTICLE DETAIL

资讯详情

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

K8s 对外服务之 Ingress 实战:用 TaoToken 统一 Key 打通 Traefik 与 HTTPS 配置

K8s 对外服务之 Ingress 实战:用 TaoToken 统一 Key 打通 Traefik 与 HTTPS 配置 1. 从 Service 到 Ingress为什么集群里的服务总是“出不去”很多人第一次把应用部署进 K8sPod 跑起来了日志也正常可一到浏览器里访问就卡住。原因通常不在应用本身而在“对外暴露”这条链路上。K8s 里负责这件事的两个核心对象是 Service 和 Ingress它们分工完全不同。Service 解决的是“集群内部怎么找到一组 Pod”。它有四种常见类型ClusterIP 是默认值只能在集群内访问NodePort 会在每个节点开一个 30000-32767 的端口四层转发能对外但只能靠 IP端口没法按域名区分LoadBalancer 依赖云厂商的负载均衡器ExternalIPs 则把外部 IP 路由到指定节点。你会发现除了 LoadBalancer其余方式都很难优雅地支撑“多个域名、多个服务、统一 HTTPS”这种需求。Ingress 就是来补这个缺口的。它本质是一组七层转发规则可以理解成“Service 的 Service”外部请求先到 Ingress ControllerController 按域名和 URL 路径匹配到某个 ServiceService 再把流量转发到对应的 Pod。这样只需要一个或少量公网入口就能把多个 HTTP 服务暴露出去还能统一处理 HTTPS。这篇就以 Traefik 作为 Ingress Controller把 Service、Ingress、TLS 证书这条链路走通同时用 TaoToken 的统一 Key 通道对接 AI 工具让集群外的 HTTPS 访问和集群内的 AI 调用形成闭环。适合已经会写基础 Deployment、想搞懂对外暴露细节的同学。2. 前置准备TaoToken 统一 Key 与 Traefik 的角色分工在动手写 YAML 之前先把两个“入口”分清楚。一个是集群对外的流量入口由 Traefik 承担另一个是 AI 工具调用模型的鉴权入口由 TaoToken 的统一 Key 承担。两者互不干扰但都遵循“一个入口、统一管理”的思路。TaoToken 在这里的作用是你不需要在每台机器、每个工具里分别配置不同厂商的 Key而是用一套统一的 Key 通道去对接模型能力。官网入口在 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content API 地址是 https://taotoken.net/api 。拿到 Key 之后无论是命令行工具还是编辑器插件都可以指向同一个地址。Traefik 这边它和 nginx-ingress 最大的区别是nginx-ingress 需要不断轮询 K8s API 来感知 Endpoint 变化而 Traefik 能实时监听 API 更新和 K8s 的适配更顺滑还自带图形化 Dashboard排查路由时很直观。代价是它在超大并发场景下不如 nginx-ingress 能扛所以小集群、中等并发用 Traefik 体验更好。部署方式上面向内部服务常用 Deployment NodePort面向外部服务更推荐 DaemonSet hostNetwork nodeSelector让 Controller 直接用宿主机网络和 80/443 端口少一层转发。下面我以 DaemonSet 方式为主因为它更贴近生产对外暴露的形态。先给节点打标签让 Controller 只调度到指定节点kubectl label nodes node2 ingresstraefik kubectl get nodes --show-labels | grep ingress确认标签生效后再准备 Traefik 的 RBAC 和 DaemonSet 配置。RBAC 部分负责让 Traefik 有权限监听 Ingress、Service、EndpointSlice 等资源缺了它 Dashboard 里会一直报 403。3. 可复制配置Traefik DaemonSet、Service 与 Ingress YAML 骨架先写 Traefik 的 DaemonSet。关键点是 hostNetwork: true、dnsPolicy: ClusterFirstWithHostNet以及 nodeSelector 匹配刚才的标签。容器端口用 80 和 443另外暴露 8080 给 Dashboard。apiVersion: apps/v1 kind: DaemonSet metadata: name: traefik namespace: kube-system labels: app: traefik spec: selector: matchLabels: app: traefik template: metadata: labels: app: traefik spec: hostNetwork: true dnsPolicy: ClusterFirstWithHostNet nodeSelector: ingress: traefik serviceAccountName: traefik containers: - name: traefik image: traefik:v2.10 args: - --providers.kubernetesingresstrue - --entrypoints.web.address:80 - --entrypoints.websecure.address:443 - --api.dashboardtrue - --api.insecuretrue ports: - name: web containerPort: 80 - name: websecure containerPort: 443 - name: dashboard containerPort: 8080接着是后端应用的 Deployment 和 Service。这里用一个 nginx 示例Service 用 ClusterIP 即可因为对外暴露交给 Ingress。apiVersion: apps/v1 kind: Deployment metadata: name: web-demo spec: replicas: 2 selector: matchLabels: app: web-demo template: metadata: labels: app: web-demo spec: containers: - name: nginx image: nginx:1.25 ports: - containerPort: 80 --- apiVersion: v1 kind: Service metadata: name: web-demo-svc spec: selector: app: web-demo ports: - port: 80 targetPort: 80然后是 Ingress 规则。Traefik 通过 ingressClassName 识别自己规则里用 host 区分域名path 区分路径。apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: web-demo-ingress spec: ingressClassName: traefik rules: - host: demo.taotoken.local http: paths: - path: / pathType: Prefix backend: service: name: web-demo-svc port: number: 80应用顺序建议是先 RBAC 和 DaemonSet再 Deployment/Service最后 Ingress。这样 Traefik 起来后能立刻感知到后端变化。4. HTTPS 配置自签证书、Secret 与 Ingress TLS 字段HTTP 通了之后下一步就是 HTTPS。TLS 的作用有三个加密通信内容、通过数字证书验证服务端身份、做完整性校验防止篡改。证书可以自签也可以从正规 CA 申请。实验环境用自签最方便。先生成证书和私钥。这条命令里 -x509 表示生成自签名证书-nodes 表示私钥不加密-subj 里的 CN 是证书名称O 是组织信息。openssl req -x509 -sha256 -nodes -days 365 \ -newkey rsa:2048 \ -keyout tls.key -out tls.crt \ -subj /CNdemo.taotoken.local/Otaotoken把证书存进 Secret类型必须是 kubernetes.io/tls键名固定为 tls.crt 和 tls.keykubectl create secret tls web-demo-tls \ --certtls.crt --keytls.key然后在 Ingress 里加 tls 字段并补上 websecure 入口的注解apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: web-demo-ingress annotations: traefik.ingress.kubernetes.io/router.entrypoints: web,websecure spec: ingressClassName: traefik tls: - hosts: - demo.taotoken.local secretName: web-demo-tls rules: - host: demo.taotoken.local http: paths: - path: / pathType: Prefix backend: service: name: web-demo-svc port: number: 80最后在本地做域名映射把 demo.taotoken.local 指向 node2 的 IP。Linux/macOS 改 /etc/hostsWindows 改 hosts 文件。访问 https://demo.taotoken.local 时浏览器会提示自签证书不受信任这是正常的实验环境点继续即可。5. 验证请求从 curl 到 AI 工具连通性检查先验证集群侧。用 curl 带 -k 跳过证书校验看返回头和内容curl -k -I https://demo.taotoken.local curl -k https://demo.taotoken.local | head -n 5如果返回 200 和 nginx 欢迎页说明 Ingress → Service → Pod 这条链路通了。再打开 Traefik Dashboardhttp://node2:8080在 Routers 里能看到 web-demo-ingress 的状态Services 里能看到后端 Endpoint 数量这比翻日志快得多。接着验证 TaoToken 侧。拿到 Key 后先用最直接的方式确认通道可用curl https://taotoken.net/api/v1/models \ -H Authorization: Bearer $TAOTOKEN_KEY返回模型列表就说明 Key 和地址都没问题。然后在编辑器或命令行工具里配置。以常见的 settings.json 骨架为例{ apiKey: 你的TaoTokenKey, baseUrl: https://taotoken.net/api, model: claude-sonnet-4-20250514 }如果用 config.toml 风格的工具对应写法是[provider] api_key 你的TaoTokenKey base_url https://taotoken.net/api model claude-sonnet-4-20250514配置完发一条测试请求确认能正常返回内容。这一步和 Ingress 验证是两条独立链路但都遵循“先确认入口可达再确认鉴权有效”的顺序。6. 本篇常见错排查404、503 与证书不生效Ingress 配完最常见的报错是 404。优先检查三处host 是否和请求的域名完全一致包括有没有带端口、pathType 是 Prefix 还是 Exact、ingressClassName 是否写成了 traefik。Traefik 的 Dashboard 里 Router 如果显示 no matching rule基本就是 host 或 path 写错了。503 通常意味着 Ingress 匹配到了规则但后端 Service 没有可用 Endpoint。用kubectl get endpoints web-demo-svc看一眼如果 ENDPOINTS 是 none说明 Service 的 selector 和 Pod 的 label 对不上或者 Pod 没 Ready。这是标签选择器最经典的坑。证书不生效先确认 Secret 类型是 kubernetes.io/tls键名是 tls.crt/tls.key再确认 Ingress 的 tls.hosts 和 rules.host 一致。如果浏览器一直用旧证书可能是本地缓存换个无痕窗口试。另外 Traefik 的 entrypoints 注解别漏只写 web 不写 websecure443 就不会走 TLS。还有一个容易忽略的点DaemonSet hostNetwork 模式下宿主机 80/443 被占用会导致 Pod 起不来。用ss -lntp | grep -E :80|:443查一下有冲突就先停掉占用进程。7. 语义一致 CTA把统一 Key 接进你的日常工具链集群对外这条链路走通后Traefik 负责把外部 HTTPS 请求稳定地送到 ServiceTLS 负责加密和身份验证。同样的“统一入口”思路放到 AI 工具链上就是 TaoToken 的统一 Key不用在每个工具里重复配不同厂商的凭证改一处即可全局生效。如果你还在调 Ingress 和证书建议先把 API Key 和接入文档过一遍确认请求格式和鉴权头没问题再去配工具能省掉很多“到底是网络还是鉴权”的来回排查。接入文档在 https://taotoken.net/doc Key 管理在 https://taotoken.net/api-keys 。想先验证模型通不通直接开模型对话页面发一条消息最快https://taotoken.net/chat 。如果是要长期跑编码任务、接 Agent 工作流Coding Plan 更适合地址是 https://taotoken.net/coding-plan 。用 Claude Code 这类工具的话Anthropic 兼容入口在 https://taotoken.net/ClaudeCodeAnthropic 控制台总览在 https://taotoken.net/console 。我自己的习惯是集群侧改完 Ingress 先用 curl 和 Dashboard 双重确认工具侧改完配置先发一条最小请求。两步都过了再去做复杂路由和长任务返工最少。
返回列表