本文最后更新于:2024年7月24日 晚上
2022.3.9 用 cert-manager 申请成功通配符证书 (*.ewhisper.cn
), 2022.4.30 该证书距离过期还有 30 天,cert-manager 进行自动续期,但是却失败了。😱😱😱
然后过了几天,在 2022.5.8, 最终成功了。如下图:
正好借着这个情况捋一下 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
它将确保证书是有效的和最新的,并试图在到期前的一个配置时间内更新证书。
Issuer(证书颁发者)
在安装了 cert-manager 之后,需要配置的第一件事是一个证书颁发者,然后你可以用它来签发证书。
cert-manager 带有一些内置的证书颁发者,它们被表示为在 cert-manager.io
组中。除了内置类型外,你还可以安装外部证书颁发者。内置和外部证书颁发者的待遇是一样的,配置也类似。
有以下几种证书颁发者类型:
- 自签名 (SelfSigned)
- CA(证书颁发机构)
- Hashicorp Vault(金库)
- Venafi (SaaS 服务)
- External(外部)
- ACME(自动证书管理环境)
这里先不做详细介绍,目前我的环境有的证书颁发者示例如下:
SelfSigned
如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| 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
如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| 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
如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
| 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
|
接下来看看 证书的申请流程.
系列文章
📚️ 参考文档