本站支持搜索的镜像仓库:Docker Hub、gcr.io、ghcr.io、quay.io、k8s.gcr.io、registry.gcr.io、elastic.co、mcr.microsoft.com
cert-manager 是一个 Kubernetes 插件,用于自动化管理和签发来自各种签发源的 TLS 证书。
cert-manager 概述
商标声明:本软件列表由 Bitnami 打包。产品中提及的相关商标归各自公司所有,使用这些商标并不意味着任何关联或背书。
helm install my-release oci://registry-1.docker.io/bitnamicharts/cert-manager
如需在生产环境中使用 cert-manager?请尝试 VMware Tanzu Application Catalog,即 Bitnami 目录的商业版。
自 2025 年 8 月 28 日起,Bitnami 将升级其公共目录,通过新的 Bitnami Secure Images 计划 提供精选的强化、安全聚焦的镜像。作为此次过渡的一部分:
这些变更旨在通过推广软件供应链完整性和最新部署的最佳实践,提高所有 Bitnami 用户的安全态势。更多详情,请访问 Bitnami Secure Images 公告。
Bitnami Helm 图表经过精心设计、积极维护,是在 Kubernetes 集群上部署容器的最快、最简单方式,可直接用于生产工作负载。
本图表使用 Helm 包管理器在 Kubernetes 集群中引导 cert-manager 部署。
要使用发布名称 my-release 安装图表:
helm install my-release oci://REGISTRY_NAME/REPOSITORY_NAME/cert-manager
注意:需将占位符
REGISTRY_NAME和REPOSITORY_NAME替换为 Helm 图表仓库和仓库名称。例如,对于 Bitnami,需使用REGISTRY_NAME=registry-1.docker.io和REPOSITORY_NAME=bitnamicharts。 提示:使用helm list列出所有发布。
Bitnami 图表允许为图表部署中的所有容器设置资源请求和限制,这些配置位于 resources 值中(参见参数表格)。设置请求对于生产工作负载至关重要,应根据具体使用场景调整。
为简化此过程,图表包含 resourcesPreset 值,可根据不同预设自动设置 resources 部分。可在 bitnami/common 图表 中查看这些预设。但在生产工作负载中,不建议使用 resourcesPreset,因其可能无法完全适应具体需求。有关容器资源管理的更多信息,请参阅 Kubernetes 官方文档。
强烈建议在生产环境中使用不可变标签。这可确保如果相同标签更新为不同镜像时,部署不会自动变更。
如果主容器有新版本、重大变更或存在严重漏洞,Bitnami 将发布新图表更新其容器。
要在 Kubernetes 上备份和恢复 Helm 图表部署,需使用 Velero(Kubernetes 备份/恢复工具)备份源部署的持久卷,并将其附加到新部署。有关使用 Velero 的说明,请参阅 此指南。
如需添加额外环境变量(用于高级操作,如自定义初始化脚本),可使用 extraEnvVars 属性:
extraEnvVars: - name: LOG_LEVEL value: DEBUG
或者,可使用包含环境变量的 ConfigMap 或 Secret。为此,使用 extraEnvVarsCM 或 extraEnvVarsSecret 值。
通过将 metrics.enabled 设置为 true,可将本图表与 Prometheus 集成。这将在服务中公开 cert-manager 原生 Prometheus 端点,并添加必要注解以实现 Prometheus 自动抓取。
需安装 Prometheus 或 Prometheus Operator 才能使集成生效。可安装 Bitnami Prometheus Helm 图表 或 Bitnami Kube Prometheus Helm 图表,轻松在集群中部署 Prometheus。
本图表可部署 ServiceMonitor 对象,用于与 Prometheus Operator 集成。为此,将 metrics.serviceMonitor.enabled 设置为 true。确保集群中已安装 Prometheus Operator 自定义资源定义(CRDs),否则将失败并显示以下错误:
no matches for kind "ServiceMonitor" in version "monitoring.coreos.com/v1"
安装 Bitnami Kube Prometheus Helm 图表 可获取必要的 CRDs 和 Prometheus Operator。
如需在 cert-manager 应用的同一 Pod 中运行额外容器(如额外指标或日志导出器),可通过 sidecars 配置参数定义。只需根据 Kubernetes 容器规范定义容器:
sidecars: - name: your-image-name image: your-image imagePullPolicy: Always ports: - name: portname containerPort: 1234
类似地,可使用 initContainers 参数添加额外 Init 容器:
initContainers: - name: your-image-name image: your-image imagePullPolicy: Always ports: - name: portname containerPort: 1234
cert-manager 支持通过不同签发者签发证书。例如,可使用自签名签发者(Self Signed Issuer)签发证书。
自签名签发者本身并不代表证书颁发机构,而是表示证书将使用给定私钥“自签名”。
注意:有关可用签发者的列表,请参阅 cert-manager 官方文档。
要配置 cert-manager,需创建 Issuer 对象。对象结构因签发者类型而异。自签名签发者的配置非常简单。
要创建自签名签发者以生成自签名证书,请声明如下的 Issuer、ClusterIssuer 和 Certificate:
apiVersion: cert-manager.io/v1 kind: ClusterIssuer metadata: name: letsencrypt-prod spec: selfSigned: {} --- apiVersion: cert-manager.io/v1 kind: Issuer metadata: name: letsencrypt-ca namespace: sandbox spec: ca: secretName: letsencrypt-ca --- apiVersion: cert-manager.io/v1 kind: Certificate metadata: name: letsencrypt-ca namespace: sandbox spec: isCA: true commonName: osm-system secretName: letsencrypt-ca issuerRef: name: letsencrypt-prod kind: ClusterIssuer group: cert-manager.io
接下来,使用 ClusterIssuer 为 Kubernetes 集群中的应用生成证书。了解如何保护 Ingress 资源。
Ingress 资源就绪后,cert-manager 将创建包含生成的 TLS 证书的 Secret。可通过以下命令检查:
$ kubectl get secret --namespace=sandbox NAME TYPE DATA AGE letsencrypt-ca kubernetes.io/tls 3 Xs
cert-manager 支持通过不同签发者签发证书。例如,可使用公共 ACME(自动化证书管理环境)服务器签发证书。
注意:有关可用签发者的列表,请参阅 cert-manager 官方文档。
要配置 cert-manager,需创建 Issuer 对象。对象结构因签发者类型而异。对于 ACME,需包含在 ACME 证书颁发机构服务器中注册的单个账户信息。
配置 cert-manager 使用 ACME 后,它将验证您是否是所请求证书域名的所有者。cert-manager 使用两种不同的挑战来验证域名所有权:HTTP01 或 DNS01。了解更多关于 ACME 挑战。
注意:有关解决挑战的流程,请参阅 官方文档。
要创建用于 Let's Encrypt 的 ACME 签发者,请声明如下 ClusterIssuer:
apiVersion: cert-manager.io/v1alpha2 kind: ClusterIssuer metadata: name: letsencrypt-prod spec: acme: # 必须将此电子邮件地址替换为您自己的地址。 # Let's Encrypt 将通过此地址联系您,通知证书过期或账户相关问题。 # 将 EMAIL-ADDRESS 占位符替换为正确的电子邮件账户 email: EMAIL-ADDRESS server: [***] privateKeySecretRef: name: letsencrypt-prod # 添加单个挑战解决器,使用 nginx 的 HTTP01 solvers: - http01: ingress: class: nginx
接下来,使用 ClusterIssuer 为 Kubernetes 集群中的应用生成证书。了解如何保护 Ingress 资源。
Ingress 资源就绪后,cert-manager 将通过 HTTP01/DNS01 挑战验证域名。验证过程中,可通过控制器日志检查状态:
$ kubectl get certificates NAME READY SECRET AGE letencrypt-ca False letencrypt-ca X
验证进行中时,状态为 False。HTTP01 验证成功完成后,状态将变为 True:
$ kubectl get certificates NAME READY SECRET AGE letencrypt-ca True letencrypt-ca X $ kubectl get secrets NAME TYPE DATA AGE letencrypt-ca kubernetes.io/tls 3 Xm
配置 cert-manager 的签发者(自签名签发者 或 ACME 签发者)后,cert-manager 将使用该签发者创建包含证书的 TLS Secret。cert-manager 仅在应用已暴露时才能创建此 Secret。一种方法是使用 Ingress 资源暴露应用,并包含 cert-manager 的相应注解。
通过 Ingress 控制器暴露应用并使用 cert-manager 管理 TLS 证书有两种方式:
部署另一个支持通过 Ingress 控制器暴露应用的 Helm 图表。例如,使用 Bitnami WordPress Helm 图表 并 为 WordPress 配置 Ingress。要启用与 cert-manager 的集成,需将以下注解添加到 ingress.annotations 参数:
# 下方设置 ingress.class(本示例使用 nginx ingress 控制器) kubernetes.io/ingress.class: nginx cert-manager.io/cluster-issuer: letsencrypt-prod
创建如下自定义 Ingress 资源:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: ingress-test annotations: # 下方设置 ingress.class(本示例使用 nginx ingress 控制器) kubernetes.io/ingress.class: "nginx" cert-manager.io/issuer: "letsencrypt-prod" spec: tls: # 将 DOMAIN 占位符替换为正确的域名 - hosts: - DOMAIN secretName: letsencrypt-ca rules: # 将 DOMAIN 占位符替换为正确的域名 - host: DOMAIN http: paths: - path: / pathType: Exact backend: service: name: ingress-test port: number: 80
如需部署额外对象(如包含应用配置的 ConfigMap 或应用使用的微服务部署),可使用 extraDeploy 参数添加其他对象的完整规范。
本图表允许使用 controller.affinity、cainjector.affinity 或 webhook.affinity 参数设置自定义亲和性。有关 Pod 亲和性的更多信息,请参阅 Kubernetes 文档。
作为替代方案,可使用 bitnami/common 图表中预设的 Pod 亲和性、Pod 反亲和性和节点亲和性配置。为此,设置 controller.podAffinityPreset、cainjector.podAffinityPreset、webhook.podAffinityPreset、controller.podAntiAffinityPreset、cainjector.podAntiAffinityPreset、webhook.podAntiAffinityPreset、controller.nodeAffinityPreset、cainjector.nodeAffinityPreset 或 webhook.nodeAffinityPreset 参数。
| 名称 | 描述 | 默认值 |
|---|---|---|
global.imageRegistry | 全局 Docker 镜像仓库 | "" |
global.imagePullSecrets | 全局 Docker 仓库密钥名称数组 | [] |
global.defaultStorageClass | 持久卷的全局默认 StorageClass | "" |
global.storageClass | 已弃用:使用 global.defaultStorageClass 替代 | "" |
global.security.allowInsecureImages | 允许跳过镜像验证 | false |
global.compatibility.openshift.adaptSecurityContext | 调整部署的 securityContext 部分以兼容 OpenShift restricted-v2 SCC:移除 runAsUser、runAsGroup 和 fsGroup,让平台使用允许的默认 ID。可能值:auto(如果检测到运行集群为 OpenShift 则应用)、force(始终执行调整)、disabled(不执行调整) | auto |
| 名称 | 描述 | 默认值 |
|---|---|---|
kubeVersion | 覆盖 Kubernetes 版本 | "" |
nameOverride | 部分覆盖 common.names.fullname 的字符串 | "" |
fullnameOverride | 完全覆盖 common.names.fullname 的字符串 | "" |
commonLabels | 添加到所有部署对象的标签 | {} |
commonAnnotations | 添加到所有部署对象的注解 | {} |
extraDeploy | 随发布部署的额外对象数组 | [] |
logLevel | 设置 cert-manager 日志级别 | 2 |
clusterResourceNamespace | 用于存储 ClusterIssuer 资源的 DNS 提供商凭据等的命名空间。若为空,使用控制器部署的命名空间 | "" |
leaderElection.namespace | leaderElection 工作的命名空间 | kube-system |
installCRDs | 安装 cert-manager CRDs 的标志 | false |
replicaCount | cert-manager 副本数 | 1 |
| 名称 | 描述 | 默认值 |
免费版仅支持 Docker Hub 加速,不承诺可用性和速度;专业版支持更多镜像源,保证可用性和稳定速度,提供优先客服响应。
免费版仅支持 docker.io;专业版支持 docker.io、gcr.io、ghcr.io、registry.k8s.io、nvcr.io、quay.io、mcr.microsoft.com、docker.elastic.co 等。
当返回 402 Payment Required 错误时,表示流量已耗尽,需要充值流量包以恢复服务。
通常由 Docker 版本过低导致,需要升级到 20.x 或更高版本以支持 V2 协议。
先检查 Docker 版本,版本过低则升级;版本正常则验证镜像信息是否正确。
使用 docker tag 命令为镜像打上新标签,去掉域名前缀,使镜像名称更简洁。
探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录方式配置轩辕镜像加速服务,包含7个详细步骤
在 Linux 系统上配置轩辕镜像源,支持主流发行版
在 Docker Desktop 中配置轩辕镜像加速,适用于桌面系统
在 Docker Compose 中使用轩辕镜像加速,支持容器编排
在 k8s 中配置 containerd 使用轩辕镜像加速
在宝塔面板中配置轩辕镜像加速,提升服务器管理效率
在 Synology 群晖NAS系统中配置轩辕镜像加速
在飞牛fnOS系统中配置轩辕镜像加速
在极空间NAS中配置轩辕镜像加速
在爱快ikuai系统中配置轩辕镜像加速
在绿联NAS系统中配置轩辕镜像加速
在威联通NAS系统中配置轩辕镜像加速
在 Podman 中配置轩辕镜像加速,支持多系统
配置轩辕镜像加速9大主流镜像仓库,包含详细配置步骤
无需登录即可使用轩辕镜像加速服务,更加便捷高效
需要其他帮助?请查看我们的 常见问题 或 官方QQ群: 13763429