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 在线证书办理服务,目前用的不多。 | ||
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、HashiCorp Vault 和 Venafi 以及私人 PKI。
📝Notes:
常用的主流来源是:Let’s Encrypt
它将确保证书是有效的和最新的,并试图在到期前的一个配置时间内更新证书。
解释 cert-manager 架构的高层次概览图
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: {} YAML |
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: {} YAML |
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 YAML |
接下来看看 证书的申请流程.
系列文章
📚️ 参考文档
- cert-manager - cert-manager Documentation
- 使用 cert-manager 为 dnspod 的域名签发免费证书 | kubernetes 学习笔记 (imroc.cc)