GKE环境下Traefik 2.3 Ingress控制器自定义SSL证书不生效问题求助
问题排查与解决步骤
1. 修复Traefik Service端口配置错误
你当前Traefik Service的443端口targetPort错误指向了80端口,这是最直接的故障原因,443端口需要映射到Traefik容器的websecure端口(443):
apiVersion: v1 kind: Service metadata: name: traefik spec: type: LoadBalancer selector: app: traefik ports: - protocol: TCP port: 80 name: web targetPort: 80 - protocol: TCP port: 443 name: websecure targetPort: 443 # 把原配置的80修改为443 - protocol: TCP port: 8080 name: admin targetPort: 8080
修改后重新apply该Service配置。
2. 修复IngressRoute的TLS配置
日志中的No secret name provided报错是因为IngressRoute的tls字段为空,没有明确指定证书来源,两种修复方案选其一即可:
方案A:直接在IngressRoute中指定证书Secret
apiVersion: traefik.containo.us/v1alpha1 kind: IngressRoute metadata: name: whoami namespace: default spec: tls: secretName: samisaude-tls # 新增此行指定证书Secret entryPoints: - web - websecure routes: - match: Host(`mysubdomain.samisaude.com.br`) && PathPrefix(`/whoami`) kind: Rule services: - name: whoami port: 80
方案B:配置全局默认TLSStore实现证书复用
你已经在静态配置中定义了默认TLSStore,但CRD provider无法直接读取静态配置的TLS规则,需要额外创建对应CRD资源:
apiVersion: traefik.containo.us/v1alpha1 kind: TLSStore metadata: name: default namespace: default spec: defaultCertificate: secretName: samisaude-tls
创建该资源后,所有未指定secretName的IngressRoute都会自动使用这个默认证书。
3. 验证证书有效性
如果修改以上配置后问题依然存在,按以下步骤排查证书本身:
- 进入Traefik Pod验证证书挂载状态:
kubectl exec -it <替换为你的Traefik Pod名称> -- bash # 检查证书文件是否存在、内容完整 ls /var/ssl cat /var/ssl/tls.crt cat /var/ssl/tls.key - 确认Secret中的tls.crt、tls.key是标准base64编码,没有多余换行或格式错误,且证书本身包含
mysubdomain.samisaude.com.br域名的签发记录。
4. 重启Traefik加载配置
所有配置修改完成后,重启Traefik Pod让新配置生效:
kubectl rollout restart deployment traefik
等Pod重启完成后再访问测试地址验证证书是否正常加载。
内容的提问来源于stack exchange,提问作者Pedro Rogério
相关产品推荐
相关产品推荐

