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

如何解决Cert-Manager中配置Let's Encrypt ClusterIssuer后执行kubectl get issuer无资源返回的问题?

问题分析与解决方案

嘿,我来帮你拆解下遇到的问题:

核心问题:ClusterIssuer vs Issuer 资源混淆

你执行 kubectl get issuer 看不到资源,是因为你创建的是ClusterIssuer(集群级资源),而 issuer 命令对应的是命名空间级的 Issuer 资源——这是cert-manager里两个完全不同的CRD(自定义资源定义)。

要查看你创建的ClusterIssuer,得用这个命令:

kubectl get clusterissuers

或者更简洁的缩写:

kubectl get clusterissuer

你的YAML配置里的两个潜在问题

除了资源类型的误解,你的配置还有两个需要修正的地方:

  1. 过时的API版本
    你用的 cert-manager.io/v1alpha2 是旧版API,现在cert-manager的稳定版本已经用 cert-manager.io/v1 了,建议把apiVersion改成这个,避免后续出现兼容性问题。

  2. DNS Solver的Token配置错误
    在 digitalocean.tokenSecretRef.key 字段里,你直接写了DigitalOcean的token值——这是错误的用法。这个字段应该指向你提前创建的Kubernetes Secret里的key名称,而不是直接填token内容。

正确的操作步骤是:

  • 先创建存储DigitalOcean Token的Secret:
kubectl create secret generic digitalocean-dns --from-literal=token=5XXXX31d821ba586302ff5d38647b701de750823711ff55b2a776c60d8eXXXXX
  • 然后修改ClusterIssuer配置里的key字段为你刚才设置的key名(比如这里是token):
apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
  name: letsencrypt-prod
spec:
  acme:
    email: ykaratoprak@sphereinc.com
    server: https://acme-v02.api.letsencrypt.org/directory
    privateKeySecretRef:
      name: letsencrypt-prod
    solvers:
    - dns01:
        digitalocean:
          tokenSecretRef:
            name: digitalocean-dns
            key: token  # 这里填Secret里的key名称,不是token值

关于“部分证书存在”的说明

你提到有部分证书存在,大概率是这些证书是通过其他Issuer/ClusterIssuer签发的,或者是手动创建的证书资源。你可以用以下命令排查它们的签发来源:

# 查看所有命名空间的证书
kubectl get certificates -A
# 查看具体证书的详情,找到Issuer字段
kubectl describe certificate <你的证书名称> -n <证书所在命名空间>

在describe输出里,Issuer字段会明确显示该证书使用的是哪个签发者资源。


内容的提问来源于stack exchange,提问作者loki

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 22:02:32