You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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组件是否正常运行
  • 进一步关联查看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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 17:15:02