certmanager自动签发证书(k8s部署)

一、安装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)

    持续更新中~
    暂无评论

    发送评论 编辑评论

    
    				
    |´・ω・)ノ
    ヾ(≧∇≦*)ゝ
    (☆ω☆)
    (╯‵□′)╯︵┴─┴
     ̄﹃ ̄
    (/ω\)
    ∠( ᐛ 」∠)_
    (๑•̀ㅁ•́ฅ)
    →_→
    ୧(๑•̀⌄•́๑)૭
    ٩(ˊᗜˋ*)و
    (ノ°ο°)ノ
    (´இ皿இ`)
    ⌇●﹏●⌇
    (ฅ´ω`ฅ)
    (╯°A°)╯︵○○○
    φ( ̄∇ ̄o)
    ヾ(´・ ・`。)ノ"
    ( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
    (ó﹏ò。)
    Σ(っ °Д °;)っ
    ( ,,´・ω・)ノ"(´っω・`。)
    ╮(╯▽╰)╭
    o(*////▽////*)q
    >﹏<
    ( ๑´•ω•) "(ㆆᴗㆆ)
    😂
    😀
    😅
    😊
    🙂
    🙃
    😌
    😍
    😘
    😜
    😝
    😏
    😒
    🙄
    😳
    😡
    😔
    😫
    😱
    😭
    💩
    👻
    🙌
    🖕
    👍
    👫
    👬
    👭
    🌚
    🌝
    🙈
    💊
    😶
    🙏
    🍦
    🍉
    😣
    Source: github.com/k4yt3x/flowerhd
    颜文字
    Emoji
    小恐龙
    花!
    上一篇