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: ""
ingressShim: defaultIssuerName: "cloudflare-dns-issuer" defaultIssuerKind: "ClusterIssuer" crds: enabled: true keep: true
|
Issuers
和ClusterIssuers
是 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 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 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. 卸载
见官方文档