K3s集群中Ingress关联的TLS Secret未被Traefik使用问题
问题排查与解决方案
针对你在K3s集群中使用Traefik 2.6.2时,Ingress配置了自定义TLS证书但仍加载默认证书的问题,可按以下步骤排查修复:
检查IngressClass匹配情况
K3s默认部署的Traefik依赖特定IngressClass资源,需确认Ingress注解与集群内实际存在的IngressClass一致:- 执行命令查看集群内IngressClass列表:
kubectl get ingressclass - 若输出中无名为
traefik的IngressClass,或IngressClass名称不符,需修改Ingress的kubernetes.io/ingress.class注解,使其与实际IngressClass名称匹配。
- 执行命令查看集群内IngressClass列表:
验证Secret有效性与读取权限
确认Secret内容正确且Traefik有权访问:- 导出证书内容,验证域名覆盖范围与有效期:
检查输出里的kubectl get secret mydomain-cert -n default -o jsonpath='{.data.tls\.crt}' | base64 -d | openssl x509 -textSubject Alternative Name是否包含my-app.mydomain.com,Not After字段是否符合预期有效期。 - 确认Traefik的ServiceAccount具备读取default命名空间Secret的权限:
确保规则中包含kubectl describe clusterrole traefik -n kube-systemsecrets资源的get、list权限。
- 导出证书内容,验证域名覆盖范围与有效期:
调整Traefik自动TLS配置
K3s默认Traefik可能启用了自动Let's Encrypt证书解析器,可能与手动配置的证书冲突:- 查看Traefik的ConfigMap配置:
kubectl get configmap traefik-config -n kube-system -o yaml - 若存在
certificatesResolvers配置,添加域名排除规则,让自动解析器不处理目标域名,示例如下:certificatesResolvers: default: acme: # 原有配置... domains: - exclude: "my-app.mydomain.com" - 修改后重启Traefik部署加载新配置:
kubectl rollout restart deployment traefik -n kube-system
- 查看Traefik的ConfigMap配置:
检查Ingress资源状态
查看Ingress事件日志,确认是否存在配置错误:kubectl describe ingress my-app-ing -n default若事件提示无法读取Secret或TLS配置无效,针对性修复对应问题即可。
内容的提问来源于stack exchange,提问作者Amir Keibi
相关产品推荐
相关产品推荐

