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

如何将K8s Secret中的已有证书导入cert-manager的Certificate资源

基于已有K8s Secret创建cert-manager Certificate资源的方案

问题背景

我使用cert-manager管理数十份由私有ACME CA服务器签发的证书,用于入口和出口流量的mTLS场景。现在需要在部分场景使用公共CA签发的证书——cert-manager无法直接签发这类证书,但希望借助它管理证书生命周期(重点是生成Prometheus监控指标)。

已通过以下命令创建包含公共CA证书的K8s Secret:

kubectl create secret generic my-cert \
  --from-file=tls.key=cert.key \
  --from-file=tls.crt=cert.crt

提问

是否可以基于该已存在的Secret创建cert-manager的Certificate自定义资源?

解答

完全可以实现,核心是使用cert-manager的External颁发者类型,该类型专门用于管理外部(非cert-manager签发)的证书,包括公共CA签发的证书。

步骤1:创建External类型的Issuer/ClusterIssuer

首先需要创建一个用于关联外部证书的颁发者,示例(以ClusterIssuer为例,适用于跨命名空间场景):

apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
  name: external-cert-issuer
spec:
  external: {} # 该字段标识这是External类型颁发者

如果仅需要在单个命名空间使用,可替换为Issuer:

apiVersion: cert-manager.io/v1
kind: Issuer
metadata:
  name: external-cert-issuer
  namespace: default # 替换为目标命名空间
spec:
  external: {}

步骤2:创建关联已有Secret的Certificate资源

创建如下Certificate资源,确保spec.secretName与已存在的Secret名称完全一致:

apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
  name: my-public-cert
  namespace: default # 与Secret所在命名空间一致
spec:
  secretName: my-cert # 必须匹配已创建的Secret名称
  issuerRef:
    name: external-cert-issuer
    kind: ClusterIssuer # 若使用Issuer则改为Issuer
    group: cert-manager.io
  usages:
    - server auth
    - client auth # 根据你的实际使用场景调整
  duration: 2160h # 对应90天,匹配公共CA证书的常见有效期
  renewBefore: 360h # 提前15天触发过期提醒(通过Prometheus指标体现)

关键说明

  • cert-manager会自动关联指定的Secret,定期检查证书有效期,并生成标准的Prometheus监控指标(如certmanager_certificate_expiration_timestamp_seconds、certmanager_certificate_ready等),实现生命周期监控。
  • 由于是外部签发的证书,cert-manager不会自动续签,当证书临近过期时,你需要手动获取新的公共CA证书,更新到对应的Secret中即可——cert-manager会自动识别Secret的更新并同步指标。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 01:45:36