Kubernetes Ingress错误定位SSL证书Secret问题排查
从你给出的信息来看,问题的核心在于你的TLS Secret不符合Kubernetes Ingress对证书Secret的标准要求,导致Ingress Controller无法正常识别它。
问题根源
Kubernetes的nginx-ingress Controller要求TLS证书Secret必须满足两个硬性条件:
- Secret的类型必须是
kubernetes.io/tls(而非你当前的Opaque类型) - Secret必须同时包含
tls.crt(证书文件)和tls.key(私钥文件)两个数据项
看你kubectl describe secrets/tls-keycloak-czv9g的输出:
Type: Opaque
Datatls.key: 1704 bytes
这个Secret不仅类型不对,还缺少了关键的tls.crt证书文件——这就是Ingress Controller报错“local SSL certificate default/tls-keycloak-czv9g was not found”的直接原因。
排查与修复步骤
检查cert-manager证书状态
你配置了cert-manager.io/cluster-issuer自动签发证书,先确认对应的证书资源是否正常就绪:kubectl get certificates如果证书状态不是
Ready,说明cert-manager在签发过程中出了问题,需要查看cert-manager的日志定位原因:kubectl logs -n cert-manager -l app=cert-manager常见问题包括:HTTP-01挑战的临时Ingress无法访问、DNS-01挑战的域名解析失败、ClusterIssuer配置错误(比如ACME服务器地址或邮箱设置有误)等。
重新生成标准TLS Secret
如果证书状态已经是Ready,但Secret仍异常,可以手动删除现有Secret,让cert-manager自动重新生成符合标准的Secret:kubectl delete secret tls-keycloak-czv9gcert-manager会重新创建一个类型为
kubernetes.io/tls、同时包含tls.crt和tls.key的标准TLS Secret。验证修复结果
重新生成Secret后,用以下命令确认它的类型和数据项:kubectl describe secrets/tls-keycloak-czv9g正常情况下应该看到:
Type: kubernetes.io/tls
Datatls.crt: XXXX bytes
tls.key: XXXX bytes这时再查看Ingress Controller的日志,证书找不到的报错应该就消失了。
额外提示
你的Keycloak Helm Chart配置整体没问题,但要确保cert-manager已正确安装,且keycloak-issuer这个ClusterIssuer配置正确——比如使用Let's Encrypt时,测试环境要指定 staging 服务器地址,生产环境用正式地址,同时邮箱信息要准确。
内容的提问来源于stack exchange,提问作者xeLL

