Helm 方式安装 cert-manager

1. 添加并拉取 Helm 仓库

1
2
helm repo add jetstack https://charts.jetstack.io --force-update
helm pull jetstack/cert-manager --untar

2. 修改values

按需修改values.yaml文件

1
2
3
4
5
6
7
8
9
10
nodeSelector:
node-role.kubernetes.io/control-plane: ""
# 设置默认的证书颁发者,用于支持 kubernetes.io/tls-acme: "true" 来自动化 TLS
ingressShim:
defaultIssuerName: "cloudflare-dns-issuer"
defaultIssuerKind: "ClusterIssuer"
# 是否安装CRD
crds:
enabled: true
keep: true

IssuersClusterIssuers是 Kubernetes 资源,代表能够通过遵循证书签署请求来生成签名证书的证书颁发机构 (CA)。
Issuer 是一个命名空间资源,无法从不同命名空间中的颁发证书。
ClusterIssuer是非命名空间的,因此它可用于在所有命名空间中颁发证书

3. 安装cert-manager

values.yaml所在目录下执行helm install

1
helm install cert-manager . --name cert-manager --namespace cert-manager --create-namespace

4. 创建ClusterIssuer

ClusterIssuer 是 cert-manager 用来颁发 TLS 证书的一个全局资源。创建一个名为 letsencrypt-prod 的 ClusterIssuer 资源,Kubernetes 将根据这个配置文件创建或更新 ClusterIssuer 资源,使其能够自动管理 TLS 证书。
这里采用 DNS-01 挑战方式,使用 Cloudflare 的API来验证域名所有权。

4.1 创建 Cloudflare API 令牌

Cloudflare 控制台创建 API 令牌,设置权限为所有区域 - DNS:编辑

4.2 创建 Secret

创建一个 Kubernetes Secret,存储 Cloudflare API 令牌

1
kubectl create secret generic cloudflare-dns-api-token --from-literal=api-token=<CLOUDFLARE_API_TOKEN> --namespace cert-manager

4.3 创建 ClusterIssuer

1
vim cluster-issuer.yaml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
name: cloudflare-dns-issuer
spec:
acme:
email: <EMAIL>
server: https://acme-v02.api.letsencrypt.org/directory
# server: https://acme-staging-v02.api.letsencrypt.org/directory
privateKeySecretRef:
name: cloudflare-dns-issuer
solvers:
- dns01:
cloudflare:
apiTokenSecretRef:
name: cloudflare-dns-api-token
key: api-token

5. 验证自签名证书

5.1 创建测试资源

1
vim cert-manager-test.yaml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
apiVersion: v1
kind: Namespace
metadata:
name: cert-manager-test
---
apiVersion: cert-manager.io/v1
kind: Issuer
metadata:
name: test-selfsigned
namespace: cert-manager-test
spec:
selfSigned: {}
---
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
name: selfsigned-cert
namespace: cert-manager-test
spec:
dnsNames:
- example.com
secretName: selfsigned-cert-tls
issuerRef:
name: test-selfsigned

5.2 应用测试资源

1
kubectl apply -f cert-manager-test.yaml

5.3 检查证书状态

1
kubectl describe certificate -n cert-manager-test

5.4 清理测试资源

1
kubectl delete -f cert-manager-test.yaml

6. 卸载

官方文档


Helm 方式安装 cert-manager
https://heeteve-blog.pages.dev/2025/02/Helm部署cert-manager/
作者
Heeteve
发布于
2025年2月27日
许可协议