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

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

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

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

正好借着这个情况捋一下 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 EncryptHashiCorp VaultVenafi 以及私人 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: {}

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 编写.

要为 Harbor 自动申请 SSL 证书,可以使用 cert-manager 工具。cert-manager 是一个 Kubernetes 上的证书管理工具,可以自动为您的应用程序生成和更新 SSL 证书。 以下是为 Harbor 自动申请 SSL 证书的步骤: 1. 安装 cert-manager 工具。可以使用以下命令安装: ``` kubectl apply --validate=false -f https://github.com/jetstack/cert-manager/releases/download/v1.0.4/cert-manager.yaml ``` 2. 创建一个 Issuer。Issuer 是一个 Kubernetes 资源,用于定义证书颁发机构 (CA) 的详细信息。可以使用以下 YAML 文件创建 Issuer: ```yaml apiVersion: cert-manager.io/v1 kind: Issuer metadata: name: letsencrypt namespace: cert-manager spec: acme: email: your-email@example.com server: https://acme-v02.api.letsencrypt.org/directory privateKeySecretRef: name: letsencrypt solvers: - http01: ingress: class: nginx ``` 在此 YAML 文件中,您需要将 `your-email@example.com` 替换为您的电子邮件地址。该文件使用 Let's Encrypt 作为证书颁发机构,因此您需要使用 Let's Encrypt 帐户来签署证书申请。此文件还配置了 HTTP-01 验证器,以便 cert-manager 可以验证您拥有该域名。 3. 创建一个 Certificate。Certificate 是一个 Kubernetes 资源,用于定义 SSL 证书的详细信息。可以使用以下 YAML 文件创建 Certificate: ```yaml apiVersion: cert-manager.io/v1 kind: Certificate metadata: name: harbor-cert namespace: harbor spec: secretName: harbor-tls dnsNames: - your-domain.com issuerRef: name: letsencrypt kind: Issuer ``` 在此 YAML 文件中,您需要将 `your-domain.com` 替换为您要为其颁发证书的域名。此文件还指定了要使用的 Issuer。 4. 创建一个 Ingress。Ingress 是一个 Kubernetes 资源,用于将 HTTP(S) 流量路由到您的应用程序。可以使用以下 YAML 文件创建 Ingress: ```yaml apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: harbor-ingress namespace: harbor annotations: kubernetes.io/ingress.class: nginx cert-manager.io/issuer: "letsencrypt" spec: tls: - secretName: harbor-tls hosts: - your-domain.com rules: - host: your-domain.com http: paths: - path: / pathType: Prefix backend: service: name: harbor port: name: http ``` 在此 YAML 文件中,您需要将 `your-domain.com` 替换为您的域名。此文件还使用了之前创建的 Issuer 和 Certificate。 5. 部署 Harbor。可以使用 Helm 安装 Harbor,如以下命令所示: ``` helm install harbor harbor/harbor --version=1.5.2 -f harbor-values.yaml ``` 在此命令中,`harbor-values.yaml` 是一个 YAML 文件,用于配置 Harbor 的各种选项。 这样,您就可以使用 cert-manager 工具自动申请和更新 Harbor 的 SSL 证书了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值