拓十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

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

k8s中部署traefik并开启https支持:TaoToken统一Key接入Ingress网关的配置骨架

k8s中部署traefik并开启https支持:TaoToken统一Key接入Ingress网关的配置骨架 1. 为什么要在 k8s 里用 Traefik 做 HTTPS 入口Traefik 是一个云原生反向代理和负载均衡器原生支持 Kubernetes能直接监听 Ingress、IngressRoute 这类资源变化自动生成路由规则。相比 Nginx Ingress它的 CRD 配置更直观改一条 YAML 就能生效不用反复 reload。适合谁正在用 k8s 跑微服务、需要给内部或外部域名加 HTTPS、又不想手写一堆 Nginx 配置的团队。我这次的目标链路是集群里用 Helm 部署 Traefik开启 80/443 入口用 Secret 存 TLS 证书通过 IngressRoute 把域名流量转发到后端服务最后用 curl 验证 HTTPS 握手和 AI 工具连通性。同时把 TaoToken 的统一 Key 接入 AI 工具的 settings.json 与 config.toml 骨架一并给出方便你在同一套网关后面管理 AI 请求出口。整篇按可复制操作来写命令和 YAML 都能直接改域名后使用。踩过的坑集中在证书 Secret 命名、TLSStore 的 default 名称、以及 HTTP 与 HTTPS 需要两条 IngressRoute 这几个点上后面会逐个说明。2. 前置准备TaoToken 统一 Key 与集群环境TaoToken 在这里的角色是统一 API 通道你不需要在每台机器、每个工具里分别配置不同厂商的 Key而是拿一个统一 Key通过兼容接口访问模型。官网入口是 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content API 基址是 https://taotoken.net/api 。先拿到 Key。打开控制台创建 API Key地址是 https://taotoken.net/console?utm_sourcetaotoken_aicg_blog_endutm_contentconsoleutm_campaignrewrite 创建后复制保存。如果你要验证模型对话是否通可以用模型对话页 https://taotoken.net/models?utm_sourcetaotoken_aicg_blog_endutm_contentmodelsutm_campaignrewrite 做一次在线测试。长期编码或 Agent 场景建议看 Coding Planhttps://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding-planutm_campaignrewrite 。集群侧需要满足kubectl 能连上集群Helm 3 已安装集群有可用的 StorageClass可选用于持久化以及一个你能控制的域名比如my-service.kube.com。本地解析可以先在/etc/hosts里把域名指向 Traefik 的 NodePort 或 LoadBalancer IP方便验证。注意TaoToken 是统一 API 通道不是非法中转也不涉及任何网络访问工具。所有请求走标准 HTTPS 接口。3. 用 Helm 部署 Traefik 并开启 HTTPS3.1 添加仓库与命名空间先加 Traefik 官方 Helm 仓库并创建命名空间。默认装到kube-system也可以但为了干净我习惯单独建traefik命名空间。helm repo add traefik https://traefik.github.io/charts helm repo update kubectl create namespace traefik3.2 生成自签证书并创建 Secret如果没有正式证书先用 openssl 生成一套自签 CA 和服务器证书。注意把xxx.com换成你自己的域名。openssl genrsa -out ca.key 4096 openssl req -x509 -new -nodes -sha512 -days 36500 \ -subj /CCN/STHenan/LHenan/OJoe/OUIT/CNxxx.com \ -key ca.key -out ca.crt openssl genrsa -out tls.key 2048 openssl req -new -key tls.key -out tls.csr -days 36500 openssl x509 -req -in tls.csr -CA ca.crt -CAkey ca.key \ -CAcreateserial -out tls.crt -days 36500把证书放进 Secret。这里 Secret 名我定为traefik-tls后面 TLSStore 会引用它。kubectl create secret generic traefik-tls \ --from-filetls.crt \ --from-filetls.key \ -n traefik3.3 values.yaml 关键配置Helm 安装时用一份 values.yaml 覆盖默认值。下面这份是精简后的骨架重点在 entryPoints、TLS 选项和 dashboard。deployment: replicas: 2 ingressRoute: dashboard: enabled: true ports: web: port: 80 expose: true exposedPort: 80 websecure: port: 443 expose: true exposedPort: 443 tls: enabled: true tlsOptions: default: minVersion: VersionTLS12 maxVersion: VersionTLS13 cipherSuites: - TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 - TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 - TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 - TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 providers: kubernetesCRD: enabled: true kubernetesIngress: enabled: true logs: general: level: WARN access: enabled: true service: type: NodePort安装命令helm install traefik traefik/traefik \ -n traefik \ -f values.yaml装完后看 Pod 和 Servicekubectl get pods -n traefik kubectl get svc -n traefik你应该能看到traefik的 ServiceNodePort 映射到 80 和 443。如果集群支持 LoadBalancer把service.type改成LoadBalancer即可。3.4 配置 TLSStore 指定默认证书在 k8s 里Traefik 的 TLSStore 名称必须是default否则默认证书不生效。这一点和配置文件里写tls.certificates[]完全不同后者在 k8s 中不生效。apiVersion: traefik.io/v1alpha1 kind: TLSStore metadata: name: default namespace: traefik spec: defaultCertificate: secretName: traefik-tls应用kubectl apply -f tlsstore.yaml注意TLSStore 的 namespace 要和 Traefik 实例所在 namespace 一致否则它找不到 Secret。4. 定义 IngressRoute 与 HTTPS 路由4.1 HTTP 与 HTTPS 需要两条 IngressRoute同一个服务如果既要 HTTP 又要 HTTPS需要分别定义两条 IngressRoute。HTTP 那条走web入口HTTPS 那条走websecure入口并带 tls 段。下面是一个后端服务my-service的 HTTPS 路由示例。apiVersion: traefik.io/v1alpha1 kind: IngressRoute metadata: name: my-service-https namespace: dev spec: entryPoints: - websecure routes: - kind: Rule match: Host(my-service.kube.com) services: - name: my-service port: 80 tls: options: name: default namespace: traefik如果你不想用全局默认证书可以在 IngressRoute 所在 namespace 里再建一个 Secret然后在 tls 段写secretName。这样优先级高于全局默认证书。tls: secretName: my-service-tls options: name: default namespace: traefik4.2 验证路由是否生效应用后查看 IngressRoute 状态kubectl get ingressroute -n dev kubectl describe ingressroute my-service-https -n devTraefik 的 dashboard 也能看到路由。如果 dashboard 没开可以用 port-forward 临时访问kubectl port-forward -n traefik svc/traefik 9000:9000然后浏览器打开http://localhost:9000查看 Routers 和 Services。5. 验证 HTTPS 与 AI 工具连通性5.1 curl 验证 HTTPS 握手假设你把域名解析到了 Traefik 的入口 IP或者用--resolve强制指定。自签证书需要加-k跳过校验正式证书可以去掉。curl -vk https://my-service.kube.com \ --resolve my-service.kube.com:443:Traefik_IP返回 200 或后端正常响应说明 TLS 终止和路由都通了。如果返回 404检查 IngressRoute 的 match 规则和 namespace 是否匹配。5.2 AI 工具 settings.json 骨架很多 AI 编码工具用settings.json配置 API 通道。把 base URL 指向 TaoTokenKey 用你创建的统一 Key。{ apiKey: sk-你的TaoTokenKey, baseUrl: https://taotoken.net/api, model: claude-3-5-sonnet, timeout: 60000 }5.3 config.toml 骨架如果是用 config.toml 的工具结构类似[api] key sk-你的TaoTokenKey base_url https://taotoken.net/api model claude-3-5-sonnet timeout 60 [network] proxy verify_ssl true配置好后跑一次简单请求验证curl -s https://taotoken.net/api/v1/models \ -H Authorization: Bearer sk-你的TaoTokenKey能返回模型列表就说明 Key 和通道都正常。更细的接入参数可以看接入文档https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite 。6. 本篇常见错排查证书 Secret 找不到TLSStore 引用的 Secret 必须在同一个 namespace。如果 Traefik 装在traefikSecret 也要在traefik不能放在default。TLSStore 名称不是 defaultk8s 中 Traefik 只认名为default的 TLSStore其他名字不会作为全局默认证书。HTTP 能通 HTTPS 不通检查 IngressRoute 的 entryPoints 是否写了websecure以及 tls 段是否存在。HTTP 和 HTTPS 是两条独立路由不能共用一条。curl 返回证书错误自签证书用-k正式证书检查域名是否匹配 CN/SAN。如果证书链不全浏览器会报错但 curl 加-k能过。AI 工具 401Key 复制时带了空格或者 base URL 写成了带路径的地址。TaoToken 的 API 基址是https://taotoken.net/api不要多加/v1之外的路径。IngressRoute 不生效确认 Traefik 的 providers.kubernetesCRD 已开启并且 CRD 已安装。Helm chart 默认会装 CRD如果是手动部署需要单独 apply。7. 接入与排障入口如果你在配置 IngressRoute 或 TLS 时遇到路由不生效、证书不匹配的问题先检查 API Keys 和接入文档确认 Key 与 base URL 无误API Keys 在 https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi-keysutm_campaignrewrite 接入文档在 https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite 。想先验证模型是否可用直接打开模型对话页发一条消息https://taotoken.net/models?utm_sourcetaotoken_aicg_blog_endutm_contentmodelsutm_campaignrewrite 。长期编码或 Agent 场景建议用 Coding Plan 统一管理额度https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding-planutm_campaignrewrite 。最后提醒一句Traefik 的 dashboard 默认没有认证生产环境记得加 Middleware 做 basicAuth 或 IP 白名单别直接把 9000 端口暴露出去。
返回列表