2022.3.9 用 cert-manager 申请胜利通配符证书 (*.ewhisper.cn), 2022.4.30 该证书间隔过期还有 30 天,cert-manager 进行主动续期,然而却失败了。

而后过了几天,在 2022.5.8, 最终胜利了。如下图:

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

中英文对照表

英文英文 - K8S CRD中文备注
certificatesCertificate证书certificates.cert-manager.io/v1
certificate issuersIssuer证书颁发者issuers.cert-manager.io
ClusterIssuer集群证书颁发者clusterissuers.cert-manager.io
certificate requestCertificateRequest证书申请certificaterequests.cert-manager.io
orderOrder(证书)订单orders.acme.cert-manager.io
challengeChallenge(证书)挑战challenges.acme.cert-manager.io
SelfSigned自签名cert-manager Issuer 的一种
CA证书颁发机构Certificate Authority 的缩写;
cert-manager Issuer 的一种
Vault金库cert-manager Issuer 的一种,即 Hashicorp Vault
VenafiVenafi 在线证书办理服务,目前用的不多。
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/v1kind: Issuermetadata:  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-managerstatus:  conditions:    - lastTransitionTime: '2022-03-01T13:38:53Z'      observedGeneration: 1      reason: IsReady      status: 'True'      type: Readyspec:  selfSigned: {}

ACME - HTTP01

如下:

apiVersion: cert-manager.io/v1kind: Issuermetadata:  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-systemstatus:  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: Readyspec:  acme:    preferredChain: ''    privateKeySecretRef:      name: letsencrypt-production    server: https://acme-v02.api.letsencrypt.org/directory    solvers:      - http01:          ingress: {}

ACME - DNS01

如下:

apiVersion: cert-manager.io/v1kind: ClusterIssuermetadata:  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-dnspodstatus:  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: Readyspec:  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 TAG

️ 参考文档

  • cert-manager - cert-manager Documentation
  • 应用 cert-manager 为 dnspod 的域名签发收费证书 | kubernetes 学习笔记 (imroc.cc)
三人行, 必有我师; 常识共享, 天下为公. 本文由东风微鸣技术博客 EWhisper.cn 编写.