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

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

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

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

正好借着这个情况捋一下 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 在线证书办理服务,目前用的不多。
External 外部 cert-manager Issuer 的一种
ACME 自动证书管理环境 Automated Certificate Management Environment 的缩写;
cert-manager Issuer, 包括 HTTP01 和 DNS01

Cert Manager 简介

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

它可以从各种支持的来源签发证书,包括 Let's EncryptHashiCorp VaultVenafi 以及私人 PKI。

📝Notes:

常用的主流来源是:Let's Encrypt

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

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

Issuer(证书颁发者)

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

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

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

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

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

SelfSigned

如下:

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

如下:

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

如下:

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 

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

系列文章

📚️ 参考文档

三人行, 必有我师; 知识共享, 天下为公. 本文由东风微鸣技术博客 EWhisper.cn 编写.

发表评论

相关文章