如何在ClusterIssuer中引用指定命名空间的Secret?
问题解答
1. ClusterIssuer 默认查找的命名空间
是的,ClusterIssuer 默认只会在 cert-manager 命名空间中查找指定的 secretName。
ClusterIssuer 是集群级资源,cert-manager 控制器运行在自身专属的命名空间(通常就是 cert-manager),处理 ClusterIssuer 的 CA 配置时,会默认从这个命名空间读取对应的 Secret。所以你在 postgres 命名空间创建的 postgres-operator-ca-certificate Secret,当前的 ClusterIssuer 无法访问到。
2. 是否建议用 Issuer 替代 ClusterIssuer?
这取决于你的实际使用场景:
- 如果仅需为
postgres命名空间内的 Certificate 签名:完全建议替换为 Issuer。将 Issuer 创建在postgres命名空间中,其spec.ca.secretName指向同命名空间的postgres-operator-ca-certificate,就能正常读取到所需的 CA Secret,配置示例如下:
apiVersion: cert-manager.io/v1 kind: Issuer metadata: name: postgres-operator-ca-certificate-issuer namespace: postgres spec: ca: secretName: postgres-operator-ca-certificate
- 如果需要跨多个命名空间为 Certificate 签名:Issuer 不适用(Issuer 是命名空间级资源,仅能为同命名空间的资源签名)。这种情况下,你可以将
postgres命名空间中的 CA Secret 复制一份到cert-manager命名空间(保持secretName一致),ClusterIssuer 就能正常找到该 Secret。复制命令示例:
kubectl get secret postgres-operator-ca-certificate -n postgres -o yaml | sed 's/namespace: postgres/namespace: cert-manager/' | kubectl apply -f -
内容的提问来源于stack exchange,提问作者Vishrant
相关产品推荐
相关产品推荐

