☰
k8s中部署traefik并开启https支持:TaoToken统一Key接入Ingress网关的配置骨架
2026/9/27 16:11:48 网站建设 项目流程

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_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= ,API 基址是 https://taotoken.net/api 。

先拿到 Key。打开控制台创建 API Key,地址是 https://taotoken.net/console?utm_source=taotoken_aicg_blog_end&utm_content=console&utm_campaign=rewrite ,创建后复制保存。如果你要验证模型对话是否通,可以用模型对话页 https://taotoken.net/models?utm_source=taotoken_aicg_blog_end&utm_content=models&utm_campaign=rewrite 做一次在线测试。长期编码或 Agent 场景,建议看 Coding Plan:https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_content=coding-plan&utm_campaign=rewrite 。

集群侧需要满足:kubectl 能连上集群,Helm 3 已安装,集群有可用的 StorageClass(可选,用于持久化),以及一个你能控制的域名,比如my-service.kube.com。本地解析可以先在/etc/hosts里把域名指向 Traefik 的 NodePort 或 LoadBalancer IP,方便验证。

注意:TaoToken 是统一 API 通道,不是非法中转,也不涉及任何网络访问工具。所有请求走标准 HTTPS 接口。

3. 用 Helm 部署 Traefik 并开启 HTTPS

3.1 添加仓库与命名空间

先加 Traefik 官方 Helm 仓库,并创建命名空间。默认装到kube-system也可以,但为了干净,我习惯单独建traefik命名空间。

helm repo add traefik https://traefik.github.io/charts helm repo update kubectl create namespace traefik

3.2 生成自签证书并创建 Secret

如果没有正式证书,先用 openssl 生成一套自签 CA 和服务器证书。注意把xxx.com换成你自己的域名。

openssl genrsa -out ca.key 4096 openssl req -x509 -new -nodes -sha512 -days 36500 \ -subj "/C=CN/ST=Henan/L=Henan/O=Joe/OU=IT/CN=xxx.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-file=tls.crt \ --from-file=tls.key \ -n traefik

3.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 和 Service:

kubectl get pods -n traefik kubectl get svc -n traefik

你应该能看到traefik的 Service,NodePort 映射到 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: traefik

4.2 验证路由是否生效

应用后查看 IngressRoute 状态:

kubectl get ingressroute -n dev kubectl describe ingressroute my-service-https -n dev

Traefik 的 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 指向 TaoToken,Key 用你创建的统一 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_source=taotoken_aicg_blog_end&utm_content=doc&utm_campaign=rewrite 。

6. 本篇常见错排查

证书 Secret 找不到:TLSStore 引用的 Secret 必须在同一个 namespace。如果 Traefik 装在traefik,Secret 也要在traefik,不能放在default。

TLSStore 名称不是 default:k8s 中 Traefik 只认名为default的 TLSStore,其他名字不会作为全局默认证书。

HTTP 能通 HTTPS 不通:检查 IngressRoute 的 entryPoints 是否写了websecure,以及 tls 段是否存在。HTTP 和 HTTPS 是两条独立路由,不能共用一条。

curl 返回证书错误:自签证书用-k,正式证书检查域名是否匹配 CN/SAN。如果证书链不全,浏览器会报错,但 curl 加-k能过。

AI 工具 401:Key 复制时带了空格,或者 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_source=taotoken_aicg_blog_end&utm_content=api-keys&utm_campaign=rewrite ,接入文档在 https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_content=doc&utm_campaign=rewrite 。

想先验证模型是否可用,直接打开模型对话页发一条消息:https://taotoken.net/models?utm_source=taotoken_aicg_blog_end&utm_content=models&utm_campaign=rewrite 。长期编码或 Agent 场景,建议用 Coding Plan 统一管理额度:https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_content=coding-plan&utm_campaign=rewrite 。

最后提醒一句:Traefik 的 dashboard 默认没有认证,生产环境记得加 Middleware 做 basicAuth 或 IP 白名单,别直接把 9000 端口暴露出去。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询