1 环境准备
在使用 cert-manager 申请证书前需要完成两点环境准备:
1.1 安装 helm 工具
helm 工具安装可参考文章 《Helm 快速安装》。
1.2 部署 cert-manager 组件
在 kubernetes 中部署 cert-manager 组件可参考文章 《Kubernetes 中部署 Cert Manager 证书管理工具》。
2 申请 Cloudflare 域名证书
cert-manager 在 DNS-01 的申请上默认集成了 Cloudflare DNS 的支持,可直接申请托管在 Cloudflare 上域名的证书。
2.1 创建 Cloudflare API Token
访问 Cloudflare Dashboard,在 User Profile > API Tokens > API Tokens 中完成 API Token 创建,创建涉及选型按照如下要求设置:
Permissions:
Zone - DNS - Edit
Zone - Zone - Read
Zone Resources:
Include - All Zones
随后保存生成的 Cloudflare API Token。
2.2 在 K8s 中创建 Cloudflare API Token 密钥
在 Kubernetes 中创建 Cloudflare API Token 密钥:
nano cloudflare-secret.yaml
apiVersion: v1
kind: Secret
metadata:
name: cloudflare-secret
namespace: cert-manager
type: Opaque
stringData:
api-token: <API Token>
kubectl apply -f cloudflare-secret.yaml
2.3 在 K8s 中创建 Cloudflare 的证书申请器
在 Kubernetes 中创建指向 Cloudflare API Token 密钥的证书申请器:
nano cloudflare-clusterissuer.yaml
apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
name: cloudflare
spec:
acme:
privateKeySecretRef:
name: cloudflare-letsencrypt
email: youremail@example.com
server: <https://acme-v02.api.letsencrypt.org/directory>
solvers:
- dns01:
cloudflare:
email: youremail@example.com
apiTokenSecretRef:
name: cloudflare-secret
key: api-token
kubectl apply -f cloudflare-clusterissuer.yaml
2.4 在 K8s 中申请 Cloudflare 域名证书
在 Kubernetes 中创建使用 let’s encrypt DNS-01 认证的托管在 Cloudflare DNS 上域名的 TLS 证书:
nano cert-astralor-com.yaml
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
name: cert-astralor-com
spec:
secretName: cert-astralor-com
issuerRef:
name: cloudflare
kind: ClusterIssuer
group: cert-manager.io
dnsNames:
- "astralor.com"
- "*.astralor.com"
kubectl apply -f cert-astralor-com.yaml
创建后等待证书完成申请:
kubectl get certificates/cert-astralor-com -w
申请后证书状态如下所示: