在Kubernetes中使用YAML配置Traefik 2.9 TLS的问题排查
核心问题分析与修复步骤
1. TLS Secret 类型与键名错误
你的comptech-cert Secret类型为Opaque,但Kubernetes Ingress和Traefik要求TLS证书Secret必须是kubernetes.io/tls类型,且仅需包含tls.crt(证书链)和tls.key(私钥)两个标准键。当前自定义的comptech.crt/comptech.key键名无法被Traefik识别,导致自定义证书不生效。
修正后的Secret配置:
apiVersion: v1 data: tls.crt: <contents of comptech.crt base64 encoded> tls.key: <contents of comptech.key base64 encoded> kind: Secret metadata: name: comptech-cert namespace: default type: kubernetes.io/tls
注:无需保留comptech.pem,将证书链内容直接合并到tls.crt即可
2. HTTPS Ingress 的 TLS 配置缩进错误
control-api-secure-ingress中tls块的缩进层级错误,且未指定hosts字段,导致Traefik无法将证书与目标域名绑定,只能使用默认证书。tls块需与rules同级,且必须明确关联对应域名。
修正后的HTTPS Ingress配置:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: control-api-secure-ingress annotations: traefik.ingress.kubernetes.io/router.entrypoints: websecure traefik.ingress.kubernetes.io/router.tls: "true" spec: rules: - host: sub.domain.com http: paths: - path: / pathType: Prefix backend: service: name: control-api-service port: name: http # 改为HTTP端口:Traefik已完成TLS终止,后端用HTTP通信即可 tls: # 与rules同级 - hosts: - sub.domain.com # 必须指定对应域名 secretName: comptech-cert
3. 后端服务端口配置错误
你的.NET服务将https端口(443)指向容器5000端口,但默认情况下.NET容器的5000端口为HTTP服务(除非你在容器内单独配置了HTTPS)。如果Traefik强制用HTTPS连接后端未开启HTTPS的端口,会导致请求失败,服务无法接收请求。
修正后的.NET服务配置(可选,若后端未开启HTTPS):
apiVersion: v1 kind: Service metadata: name: control-api-service spec: ports: - name: http port: 80 targetPort: 5000 protocol: TCP selector: app: control-api
4. 验证与后续检查
修复完成后,通过Traefik Dashboard确认:
- HTTPS路由的TLS配置已关联
comptech-cert - 后端服务端口指向正确的HTTP端口
补充说明
- CORS问题:若后续仍存在CORS错误,可在Ingress中添加Traefik CORS注解(如
traefik.ingress.kubernetes.io/router.middlewares: default-cors@kubernetescrd),并提前创建对应CORS中间件资源。 - 防火墙:你已更新配置允许HTTPS流量,此环节无问题。
内容的提问来源于stack exchange,提问作者BillHaggerty
相关产品推荐
相关产品推荐

