AKS更新证书后仍显示Kubernetes伪造证书问题求助
验证Secret与Ingress的命名空间匹配:确保证书Secret和Ingress资源在同一个命名空间下。如果Secret在其他命名空间,Ingress默认无法跨域引用,部分Ingress控制器需要额外配置才能支持跨命名空间证书引用。
检查Secret内的证书内容有效性:
- 执行命令查看证书明文:
kubectl get secret <your-secret-name> -o jsonpath='{.data.tls\.crt}' | base64 -d,确认证书的有效期是新的,且包含GoDaddy的完整中间证书链(缺少中间链可能导致证书不被识别,控制器 fallback 到假证书)。 - 验证私钥匹配:
kubectl get secret <your-secret-name> -o jsonpath='{.data.tls\.key}' | base64 -d,确保私钥和新证书是一对。
- 执行命令查看证书明文:
确认Ingress Controller已加载新证书:
进入Ingress Controller Pod内部,检查证书挂载目录(以NGINX为例,路径为/etc/nginx/secrets/<secret-name>)的文件修改时间和内容,确认是否为新证书。如果未更新,可能需要强制滚动重启控制器Pod(kubectl rollout restart deployment <ingress-controller-deployment-name> -n <controller-namespace>),而非简单重启。检查Ingress的TLS配置细节:
确认Ingress的spec.tls块中,hosts字段完全匹配测试域名(无拼写错误、多余空格),且secretName与证书Secret的名称完全一致。排除缓存干扰:
SSL Labs测试存在缓存机制,建议使用openssl s_client -connect <your-domain>:443直接从终端测试证书,查看返回的证书主题和有效期,确认是否为假证书。同时检查是否有前端CDN或负载均衡器缓存了旧证书。排查SSL Passthrough配置:
如果使用的是NGINX Ingress Controller且启用了ssl-passthrough功能,Ingress会直接转发SSL流量到后端服务,此时Ingress的Secret配置不会生效,证书需要配置在后端服务中。确认Secret类型:
执行kubectl get secret <your-secret-name> -o yaml,检查type字段是否为kubernetes.io/tls,非该类型的Secret无法被Ingress控制器识别为证书资源。
内容的提问来源于stack exchange,提问作者ZLI

