一、安装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 令牌申请

  1. 登录 Cloudflare 控制台 → 选择你的域名 → 点击概述→获取您的API令牌
  2. 点击创建令牌,选择模板「编辑区域 DNS」
  3. 权限配置:区域 → DNS → 编辑 ,包括 → 特定区域 → 选择你的域名
  4. 创建令牌并复制 API Token(仅显示一次)
  5. 在域名概览页复制 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)

    标签: none

    添加新评论