Kubernetes Ingress无法找到CertManager生成的带随机后缀SSL Secret如何解决?
问题根因
cert-manager默认不会给用户指定的Secret名称添加随机后缀,你看到的tls-secret-fjrm5这类带随机后缀的资源是证书签发流程中的临时中间资源。如果最终没有生成Ingress中指定的tls-cert Secret,说明证书签发流程失败,没有完成最后一步正式Secret的创建操作。
排查步骤
- 首先确认cert-manager版本,建议使用v1.8及以上的稳定版本,部分历史版本存在临时Secret残留、正式Secret生成失败的已知bug
- 检查Certificate资源状态,执行命令
kubectl get certificates.cert-manager.io -n default,查看READY列状态:- 如果状态为False,执行
kubectl describe certificate tls-cert -n default查看具体错误信息,根据错误提示修复对应问题 - 如果没有返回对应的Certificate资源,说明Ingress到Certificate的自动转换逻辑异常,可检查cert-manager的Ingress Shim组件是否正常运行
- 如果状态为False,执行
- 进一步关联查看CertificateRequest、Order、Challenge资源的状态,确认是域名验证失败、Scaleway Issuer配置错误还是网络不通导致的签发失败
解决方案
方案1:修复证书签发流程(最优解)
证书签发流程修复成功后,cert-manager会自动生成你在Ingress中指定名称的Secret,无需修改现有Ingress配置:
- 确认Scaleway Issuer配置正确:API密钥是否有效、对应权限是否开通、区域配置是否和域名托管区域匹配
- 若使用HTTP01验证:确认集群80端口对外暴露正常,NGINX Ingress控制器可以正常接收Let's Encrypt的验证请求
- 若使用DNS01验证:确认Scaleway DNS的操作权限配置正确,cert-manager可以自动添加域名解析记录完成验证
方案2:手动创建Certificate资源(稳定可控)
如果Ingress自动触发签发的逻辑持续异常,可以绕过自动转换逻辑,手动创建Certificate资源显式指定Secret名称:
apiVersion: cert-manager.io/v1 kind: Certificate metadata: name: tls-cert namespace: default spec: # 这里指定的名称就是最终生成的Secret的固定名称,不会添加随机后缀 secretName: tls-cert issuerRef: name: scaleway # 如果使用的是集群级Issuer,这里改为ClusterIssuer kind: Issuer dnsNames: - <替换为你的实际域名>
创建资源后等待签发完成,确认tls-cert Secret生成后,原Ingress配置即可正常关联使用。
方案3:临时变通方案
如果证书已经成功签发到带随机后缀的Secret中,可手动复制为指定名称的Secret应急使用:
kubectl get secret tls-secret-fjrm5 -n default -o yaml | sed 's/name: tls-secret-fjrm5/name: tls-cert/' | kubectl apply -f -
注意该方案为临时方案,证书到期续期后需要重新复制,不建议长期使用。
内容的提问来源于stack exchange,提问作者joe1531
相关产品推荐
相关产品推荐

