一、安装certmanager
1. 安装 cert-manager CRD
kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.14.4/cert-manager.crds.yaml
2. 创建 cert-manager 命名空间
kubectl create namespace cert-manager
3. 使用 Helm 安装 cert-manager
helm repo add jetstack https://charts.jetstack.io
helm repo update
helm install cert-manager jetstack/cert-manager \
--namespace cert-manager \
--version v1.14.4 # 只是参考版本
4. 验证 cert-manager 安装成功
# 检查 Pod 状态(Running 为正常)
kubectl get pods -n cert-manager
# 检查 CRD 是否安装成功
kubectl get crds | grep cert-manager
二、示例:Cloudflare DNS01 验证(泛域名证书)
1. Cloudflare API 令牌申请
- 登录 Cloudflare 控制台 → 选择你的域名 → 点击概述 → 获取您的API令牌
- 点击创建令牌,选择模板「编辑区域 DNS」
- 权限配置:区域 → DNS → 编辑 ,包括 → 特定区域 → 选择你的域名
- 创建令牌并复制 API Token(仅显示一次)
- 在域名概览页复制 Zone ID
2. 创建 Cloudflare 认证 Secret
- 在
cert-manager命名空间存储 API 令牌与区域 ID
# 文件名:cloudflare-api-secret.yaml
apiVersion: v1
kind: Secret
metadata:
name: cloudflare-api-token
namespace: cert-manager
type: Opaque
stringData:
# 填写 Cloudflare API 令牌
api-token: "你的Cloudflare API令牌"
# 填写 Cloudflare 域名 Zone ID
zone-id: "你的Cloudflare区域ID"
- 执行创建命令:
kubectl apply -f cloudflare-api-secret.yaml
3. 创建集群签发器(ClusterIssuer)
- 创建签发器
# 文件名:cluster-issuer-prod.yaml
apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
name: letsencrypt-prod-cloudflare
spec:
acme:
# Let's Encrypt 生产环境地址
server: https://acme-v02.api.letsencrypt.org/directory
email: "yourname@bkj.com"
privateKeySecretRef:
name: letsencrypt-prod-cloudflare
solvers:
- dns01:
cloudflare:
email: "yourname@bkj.com"
apiTokenSecretRef:
name: cloudflare-api-token
key: api-token
- 执行创建命令:
kubectl apply -f cluster-issuer-prod.yaml
4.创建泛域名证书(Certificate)
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
name: envoy-bkj-cert
namespace: gateway
spec:
# 证书最终存储的 Secret 名称
secretName: envoy-wildcard-tls
issuerRef:
name: letsencrypt-prod-cloudflare
kind: ClusterIssuer
group: cert-manager.io
dnsNames:
- "*.bkj.com" # 你的泛域名,不用改
privateKey:
algorithm: RSA
size: 2048
# 过期前 20 天自动续期
renewBefore: 480h
- 执行创建命令
kubectl apply -f wildcard-certificate.yaml
5. 证书签发成功验证步骤
5.1 验证 Cloudflare 认证 Secret
kubectl get secret cloudflare-api-token -n cert-manager
判断标准:能看到名为 cloudflare-api-token 的 Secret 资源。
5.2 验证集群签发器(ClusterIssuer)
kubectl get clusterissuer
判断标准:
- 能看到
letsencrypt-prod-cloudflare - READY 列显示为 True(核心标志,False 表示签发器配置错误)
5.3 验证证书资源(Certificate)
kubectl get certificates -n gateway
判断标准:
- 能看到
envoy-bkj-cert - READY 列显示为 True(核心标志,False 表示签发失败)
- AGE 列有时间(表示资源已创建)
5.4 验证证书存储 Secret
kubectl get secret envoy-wildcard-tls -n gateway
判断标准:
- 能看到名为
envoy-wildcard-tls的 Secret - TYPE 列显示为
kubernetes.io/tls(表示是标准 TLS 证书 Secret)
