在 K8S 中使用 cert-manager 签发免费的 HTTPS 证书
cert-manager 是 Kubernetes 上的全能证书管理工具,支持利用 cert-manager 基于 ACME 协议与 Let's Encrypt 签发免费证书并为证书自动续期,实现永久免费使用证书。
准备条件
- Kubernetes 1.28+
- Helm 3.8.0+
版本选择
本地 K8S 集群版本为 v1.28.3 ,根据 Supported Releases 选择 cert-manager v1.16.4
Helm 快速安装 cert-manager
在安装 Chart 之前,必须先安装 CustomResourceDefinition
资源,此操作在单独的步骤中执行。
wget -c https://github.com/cert-manager/cert-manager/releases/download/v1.16.4/cert-manager.crds.yaml
添加仓库:
helm repo add jetstack https://charts.jetstack.io --force-update
helm repo update
查看版本:
$ helm search repo jetstack/cert-manager --versions
NAME CHART VERSION APP VERSION DESCRIPTION
jetstack/cert-manager v1.17.1 v1.17.1 A Helm chart for cert-manager
jetstack/cert-manager v1.17.0 v1.17.0 A Helm chart for cert-manager
jetstack/cert-manager v1.16.4 v1.16.4 A Helm chart for cert-manager
jetstack/cert-manager v1.16.3 v1.16.3 A Helm chart for cert-manager
jetstack/cert-manager v1.16.2 v1.16.2 A Helm chart for cert-manager
jetstack/cert-manager v1.16.1 v1.16.1 A Helm chart for cert-manager
jetstack/cert-manager v1.16.0 v1.16.0 A Helm chart for cert-manager
....
# 获取离线 Chart
helm pull jetstack/cert-manager --version v1.16.4
# 获取 values
helm show values cert-manager-v1.16.4.tgz > values-cert-manager.yaml
查看目录结构:
$ ls -l
total 1116
-rw-r--r-- 1 root root 948285 Feb 13 20:12 cert-manager.crds.yaml
-rw-r--r-- 1 root root 136958 Mar 12 11:00 cert-manager-v1.16.4.tgz
-rw-r--r-- 1 root root 52411 Mar 12 11:10 values-cert-manager.yaml
创建名称空间
kubectl create namespace cert-manager
安装
$ helm -n cert-manager install cert-manager cert-manager-v1.16.4.tgz -f values-cert-manager.yaml
NAME: cert-manager
LAST DEPLOYED: Wed Mar 12 11:24:14 2025
NAMESPACE: cert-manager
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
cert-manager v1.16.4 has been deployed successfully!
In order to begin issuing certificates, you will need to set up a ClusterIssuer
or Issuer resource (for example, by creating a 'letsencrypt-staging' issuer).
More information on the different types of issuers and how to configure them
can be found in our documentation:
https://cert-manager.io/docs/configuration/
For information on how to configure cert-manager to automatically provision
Certificates for Ingress resources, take a look at the `ingress-shim`
documentation:
https://cert-manager.io/docs/usage/ingress/
安装提示中了解到 Issuer Configuration,安装完成后需要配置 ClusterIssuer
或 Issuer
来签发 SSL 证书
Issuer 和 ClusterIssuer
Issuer/ClusterIssuer:用于指示 cert-manager 签发证书的两种方式
- ClusterIssuer 可以签发所有 namespace 的 SSL 证书
- Issuers 只可以签发对应 namespace 中的 SSL 证书
校验方式
在了解签发方式后,还需要知道两种校验域名所有权方式:
HTTP-01
校验方式的优点是配置简单通用,不同 DNS 提供商均可使用相同的配置方法。缺点是需要依赖 Ingress,若仅适用于服务支持 Ingress 暴露流量,不支持泛域名证书。DNS-01
校验方式的优点是不依赖 Ingress,并支持泛域名。缺点是不同 DNS 提供商的配置方式不同,DNS 提供商过多而 cert-manager 的 Issuer 不能全部支持。部分可以通过部署实现 cert-manager 的 Webhook 服务来扩展 Issuer 进行支持。例如 DNSPod 和 阿里 DNS,详情请参见 Webhook 列表。
本文使用 DNS-01 方式,其限制较少,功能较全。
查看部署状态
$ kubectl -n cert-manager get pods
NAME READY STATUS RESTARTS AGE
cert-manager-76df74df6d-4sr99 1/1 Running 0 12m
cert-manager-cainjector-56889765c6-k2zxt 1/1 Running 0 12m
cert-manager-webhook-84f6d5b45c-nw9h5 1/1 Running 0 12m
cert-manager 本身是不支持国内 DNS解析服务商的,但官方给出了一些社区的提供方案:cert-manager Webhook
在接下来的文章中,将介绍为腾讯云 DnsPort 和 阿里云云解析 管理的域名签发免费的 SSL 证书。