首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Cert Manager 申请 SSL 证书流程及相关概念 - 一

Cert Manager 申请 SSL 证书流程及相关概念 - 一

作者头像
东风微鸣
发布2022-06-14 15:01:56
发布2022-06-14 15:01:56
1.3K0
举报

2022.3.9 用 cert-manager 申请成功通配符证书 (*.ewhisper.cn), 2022.4.30 该证书距离过期还有 30 天,cert-manager 进行自动续期,但是却失败了。😱😱😱

然后过了几天,在 2022.5.8, 最终成功了。如下图:

续期成功的 ewhisper.cn 通配符证书

正好借着这个情况捋一下 cert-manager 的 SSL 证书申请流程以及过程中涉及到的相关概念。

中英文对照表

英文

英文 - K8S CRD

中文

备注

certificates

Certificate

证书

certificates.cert-manager.io/v1

certificate issuers

Issuer

证书颁发者

issuers.cert-manager.io

ClusterIssuer

集群证书颁发者

clusterissuers.cert-manager.io

certificate request

CertificateRequest

证书申请

certificaterequests.cert-manager.io

order

Order

(证书)订单

orders.acme.cert-manager.io

challenge

Challenge

(证书)挑战

challenges.acme.cert-manager.io

SelfSigned

自签名

cert-manager Issuer 的一种

CA

证书颁发机构

Certificate Authority 的缩写;cert-manager Issuer 的一种

Vault

金库

cert-manager Issuer 的一种,即 Hashicorp Vault

Venafi

Venafi[1] 在线证书办理服务,目前用的不多。

External

外部

cert-manager Issuer 的一种

ACME

自动证书管理环境

Automated Certificate Management Environment 的缩写;cert-manager Issuer, 包括 HTTP01 和 DNS01

Cert Manager 简介

cert-manager 在 Kubernetes 集群中添加了证书 (certificates) 和证书颁发者 (certificate issuers) 作为资源类型,并简化了获取、更新和使用这些证书的过程。

它可以从各种支持的来源签发证书,包括 Let's Encrypt[2]、HashiCorp Vault[3] 和 Venafi[4] 以及私人 PKI。

📝Notes: 常用的主流来源是:Let's Encrypt[5]

它将确保证书是有效的和最新的,并试图在到期前的一个配置时间内更新证书。

解释 cert-manager 架构的高层次概览图

Issuer(证书颁发者)

在安装了 cert-manager 之后,需要配置的第一件事是一个证书颁发者,然后你可以用它来签发证书。

cert-manager 带有一些内置的证书颁发者,它们被表示为在cert-manager.io组中。除了内置类型外,你还可以安装外部证书颁发者。内置和外部证书颁发者的待遇是一样的,配置也类似。

有以下几种证书颁发者类型:

•自签名 (SelfSigned)•CA(证书颁发机构)•Hashicorp Vault(金库)•Venafi (SaaS 服务)•External(外部)•ACME(自动证书管理环境)•HTTP01•DNS01

这里先不做详细介绍,目前我的环境有的证书颁发者示例如下:

SelfSigned

如下:

代码语言:javascript
复制
apiVersion: cert-manager.io/v1
kind: Issuer
metadata:
  annotations:
    meta.helm.sh/release-name: cert-manager-webhook-dnspod
    meta.helm.sh/release-namespace: cert-manager
  labels:
    app: cert-manager-webhook-dnspod
    app.kubernetes.io/managed-by: Helm
    chart: cert-manager-webhook-dnspod-1.2.0
    heritage: Helm
    release: cert-manager-webhook-dnspod
  name: cert-manager-webhook-dnspod-selfsign
  namespace: cert-manager
status:
  conditions:
    - lastTransitionTime: '2022-03-01T13:38:53Z'
      observedGeneration: 1
      reason: IsReady
      status: 'True'
      type: Ready
spec:
  selfSigned: {}

ACME - HTTP01

如下:

代码语言:javascript
复制
apiVersion: cert-manager.io/v1
kind: Issuer
metadata:
  annotations:
    meta.helm.sh/release-name: rancher
    meta.helm.sh/release-namespace: cattle-system
  generation: 2
  labels:
    app: rancher
    app.kubernetes.io/managed-by: Helm
    chart: rancher-2.6.4
    heritage: Helm
    release: rancher
  name: rancher
  namespace: cattle-system
status:
  acme: {}
  conditions:
    - lastTransitionTime: '2022-03-08T14:34:08Z'
      message: The ACME account was registered with the ACME server
      observedGeneration: 2
      reason: ACMEAccountRegistered
      status: 'True'
      type: Ready
spec:
  acme:
    preferredChain: ''
    privateKeySecretRef:
      name: letsencrypt-production
    server: https://acme-v02.api.letsencrypt.org/directory
    solvers:
      - http01:
          ingress: {}

ACME - DNS01

如下:

代码语言:javascript
复制
apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
  annotations:
    meta.helm.sh/release-name: cert-manager-webhook-dnspod
    meta.helm.sh/release-namespace: cert-manager
  labels:
    app: cert-manager-webhook-dnspod
    app.kubernetes.io/managed-by: Helm
    chart: cert-manager-webhook-dnspod-1.2.0
    heritage: Helm
    release: cert-manager-webhook-dnspod
status:
  acme:
    lastRegisteredEmail: cuikaidong@foxmail.com
    uri: https://acme-v02.api.letsencrypt.org/acme/acct/431637010
  conditions:
    - lastTransitionTime: '2022-03-01T13:38:55Z'
      message: The ACME account was registered with the ACME server
      observedGeneration: 1
      reason: ACMEAccountRegistered
      status: 'True'
      type: Ready
spec:
  acme:
    email: cuikaidong@foxmail.com
    preferredChain: ''
    privateKeySecretRef:
      name: cert-manager-webhook-dnspod-letsencrypt
    server: https://acme-v02.api.letsencrypt.org/directory
    solvers:
      - dns01:
          webhook:
            config:
              secretId: <my-secret-id>
              secretKeyRef:
                key: secret-key
                name: cert-manager-webhook-dnspod-secret
              ttl: 600
            groupName: acme.imroc.cc
            solverName: dnspod

接下来看看证书的申请流程

📚️ 参考文档

•cert-manager - cert-manager Documentation[6]•使用 cert-manager 为 dnspod 的域名签发免费证书 | kubernetes 学习笔记 (imroc.cc)[7]

References

[1] Venafi: https://vaas.venafi.com/ [2] Let's Encrypt: https://letsencrypt.org/ [3] HashiCorp Vault: https://www.vaultproject.io/ [4] Venafi: https://www.venafi.com/ [5] Let's Encrypt: https://letsencrypt.org/ [6] cert-manager - cert-manager Documentation: https://cert-manager.io/docs/ [7] 使用 cert-manager 为 dnspod 的域名签发免费证书 | kubernetes 学习笔记 (imroc.cc): https://imroc.cc/k8s/trick/cert-manager-webhook-dnspod/

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-05-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 东风微鸣技术博客 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 中英文对照表
  • Cert Manager 简介
  • Issuer(证书颁发者)
    • SelfSigned
    • ACME - HTTP01
    • ACME - DNS01
  • 📚️ 参考文档
    • References
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档