相信很多小伙伴对于 Cert Manager 不陌生,Cert Manager 是 Kubernetes 上的证书管理工具,基于 ACME 协议与 Let's Encrypt 签发免费证书并为证书自动续期,实现永久免费使用证书。

本文将介绍如何使用 Cert Manager 实现自动签发证书并与 Rainbond 结合使用。

Cert Manager 概述

工作机制概述

在将 Cert Manager 部署到 Kubernetes 集群后,可以通过创建支持的自定义资源 CRD 来实现证书的签发和自动续期功能。以下是 Cert Manager 的工作机制概览:

Issuer 是 Cert Manager 用于定义证书签发方式的资源类型。它支持以下多种证书颁发机构:

  • Let's Encrypt:广泛使用的免费证书颁发机构,支持 ACME 协议。
  • HashiCorp Vault:适用于企业级密钥管理和证书签发。
  • Venafi:支持企业环境中更复杂的证书管理需求。
  • 自签发证书:适合内部使用场景。

Certificate 是 Cert Manager 的核心资源之一,用于定义需要签发的域名证书及其相关配置。它包含以下关键信息:

  • 域名信息:需要绑定证书的具体域名。
  • 配置参数:指定签发证书所需的额外信息,例如有效期、密钥长度等。
  • Issuer 的引用:关联到某个具体的 IssuerClusterIssuer

Secrets 是 Kubernetes 的资源对象,签发完成的证书最终会存储在 Secrets 中,供其他组件引用。

证书签发概述

本文使用 Let’s Encrypt 作为证书颁发机构,Let’s Encrypt 利用 ACME 协议校验域名的归属,校验成功后可以自动颁发免费证书。免费证书有效期只有90天,默认情况下 Cert Manager 会在证书到期前30天自动续期,即实现永久使用免费证书。校验域名归属的两种方式分别是 HTTP-01DNS-01

HTTP-01:通过向域名的 HTTP 服务发送请求验证域名归属,适用于使用 Ingress 暴露流量的服务,但不支持泛域名证书。Cert Manager 会动态创建或修改 Ingress 规则,添加临时路径以响应 Let’s Encrypt 的验证请求。验证通过后颁发证书。

DNS-01:通过在 DNS 提供商处添加 TXT 记录验证域名归属,支持泛域名证书且无需 Ingress。Cert Manager 使用 DNS 提供商的 API 自动更新记录。Let’s Encrypt 查询 TXT 记录后完成验证并颁发证书。

校验方式对比

特性 HTTP-01 DNS-01
是否依赖 Ingress
是否支持泛域名
配置难度 简单,适用于所有 DNS 提供商 配置复杂,依赖 DNS 提供商的 API 支持
典型适用场景 仅服务通过 Ingress 暴露流量 需要泛域名证书或无 Ingress 的服务

部署 Cert Manager 和 Rainbond

使用 Helm 安装 Cert Manager,更多请参考Cert Manager 部署文档

$ helm repo add jetstack https://charts.jetstack.io
$ helm install \
cert-manager jetstack/cert-manager \
--namespace cert-manager \
--create-namespace \
--version v1.16.2 \
--set crds.enabled=true

执行以下命令,快速安装 Rainbond

curl -o install.sh https://get.rainbond.com && bash ./install.sh

创建 Issuer

Issuer 是 Cert Manager 的核心资源,用于定义证书的签发方式和配置。以下是一个示例,使用 HTTP-01 校验方式结合 Ingress 签发证书。

$ kubectl apply -f issuer.yaml
apiVersion: cert-manager.io/v1
kind: Issuer
metadata:
name: issuer # Issuer 的名称
namespace: default # 所在的命名空间
spec:
acme:
server: https://acme-v02.api.letsencrypt.org/directory # Let's Encrypt 的生产环境 ACME 服务地址
privateKeySecretRef:
name: issuer-account-key # 保存 ACME 私钥的 Kubernetes Secret
solvers: # 域名校验方式
- http01:
ingress:
ingressClassName: apisix # 使用 APISIX 作为 Ingress 控制器

创建 Certificate

Certificate 是 Cert Manager 的核心资源之一,用于指定需要签发的域名证书及其相关配置。以下是一个完整的配置示例,结合前面创建的 Issuer,为指定域名自动签发和续期证书。

以下 YAML 文件创建了一个 Certificate 资源,为域名 test.rainbond.com 签发证书:

$ kubectl apply -f certificate.yaml
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
name: test-rainbond-com # Certificate 资源的名称
namespace: default # 所在的命名空间
spec:
dnsNames:
- test.rainbond.com # 需要绑定证书的域名
issuerRef:
kind: Issuer # 引用的 Issuer 类型
name: issuer # 引用的 Issuer 名称
secretName: test-rainbond-com-tls # 存储签发的证书和私钥的 Secret 名称

获取和查看证书

创建 Certificate 后,可以通过以下步骤检查签发状态并获取证书内容:

  1. 检查 Certificate 签发状态,使用 kubectl get certificate 命令查看 Certificate 的状态:
$ kubectl get certificate -n default
NAME READY SECRET AGE
test-rainbond-com True test-rainbond-com-tls 1m
  • READY 为 True:表示证书签发成功。证书已保存在指定的 Secret 中。
  • READY 为 False:表示签发失败。需要进一步排查原因。
  1. 排查签发失败原因,如果 READY 状态为 False,可以使用以下命令查看详细事件日志:
kubectl describe certificate test-rainbond-com -n default

日志中会显示失败的原因,例如域名校验失败、配置错误或 Issuer 不可用。

  1. 查看生成的 Secret,当 READY 状态为 True 时,证书和密钥将保存在指定的 Secret 中。可以通过以下命令查看:
$ kubectl get secret test-rainbond-com-tls -n default
NAME TYPE DATA AGE
test-rainbond-com-tls kubernetes.io/tls 2 1m
  • tls.crt: 证书内容。
  • tls.key: 证书对应的私钥。
  1. 获取具体证书和密钥内容,使用以下命令查看或提取证书和私钥内容:
$ kubectl get secret test-rainbond-com-tls -n default -o yaml
apiVersion: v1
kind: Secret
metadata:
name: test-rainbond-com-tls
namespace: default
data:
tls.crt: <base64 encoded certificate>
tls.key: <base64 encoded private key>

可以使用 base64 解码证书内容:

echo "<base64 encoded certificate>" | base64 -d

在 Rainbond 中使用证书

Rainbond v6 版本采用 APISIX 作为默认的 Ingress 控制器,通过配置 ApisixTls 资源即可轻松绑定证书,APISIX 会根据网关中的域名自动匹配对应的证书。

$ kubectl apply -f tls.yaml
apiVersion: apisix.apache.org/v2
kind: ApisixTls
metadata:
name: test-rainbond-com # 资源名称
namespace: default # 所在命名空间
spec:
hosts:
- test.rainbond.com # 绑定的域名
ingressClassName: apisix # 指定 Ingress 类名
secret:
name: test-rainbond-com-tls # 引用存储证书的 Secret 名称
namespace: default # 引用的 Secret 所在命名空间

添加路由

在 Rainbond 页面上添加网关路由。进入网关管理 > 路由设置,创建一个新的路由,填写域名(如 test.rainbond.com)并完成路由配置。

Rainbond 会自动检测网关路由的域名是否与 ApisixTls 中的 hosts 匹配。如果匹配成功,将自动为该域名启用 HTTPS,并绑定对应的证书。

最后

通过本文的介绍,我们详细了解了如何使用 Cert Manager 在 Kubernetes 中实现证书的自动签发与续期,并将其与 Rainbond 集成。Cert Manager 的灵活性与 Rainbond 的易用性结合,可以大大简化 HTTPS 的部署流程,为服务提供安全性保障。

还不会 Cert Manager 自动签发证书?一文掌握的更多相关文章

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

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

  2. Cert Manager 申请SSL证书流程及相关概念-三

    中英文对照表 英文 英文 - K8S CRD 中文 备注 certificates Certificate 证书 certificates.cert-manager.io/v1 certificate ...

  3. 在阿里云托管kubernetes上利用 cert-manager 自动签发 TLS 证书[无坑版]

    前言 排错的过程是痛苦的也是有趣的. 运维乃至IT,排错能力是拉开人与人之间的重要差距. 本篇会记录我的排错之旅. 由来 现如今我司所有业务都运行在阿里云托管kubernetes环境上,因为前端需要对 ...

  4. APISIX Ingress 如何使用 Cert Manager 管理证书

    Apache APISIX Ingress Controller 是一款以 Apache APISIX 作为数据面的 Kubernetes Ingress Controller 开源工具,目前已经更新 ...

  5. 自动签发https证书工具 cert manager

    最近cert manager进行升级,不再支持0.11以下的版本了,所以进行升级.但是发现不能直接通过更改镜像版本来升级,在Apps里的版本也是旧版本,部署后发现不支持,于是自已动手,根据文档整理了一 ...

  6. IIS 配置集中式证书模块实现网站自动绑定证书文件

    在 Windows 环境下如果采用 IIS 作为 网站服务器时,常规的网站绑定 HTTPS 需要一个一个站点手动选择对应的证书绑定,而且证书过期之后更换证书时也是需要一个个重新绑定操作,无法便捷的做到 ...

  7. Excel VBA自动添加证书

    ---恢复内容开始--- 在说这个话题之前,我先解释一下为什么要加数字证书签名,它有什么作用,后面再解释如何添加.首先解释下证书添加的位置,如下图所示: 1.单击左上角的Office 按钮,选择右下角 ...

  8. httpsclient 自动获取证书 无证书访问 验证过能直接用

    首先实现写一个 实现接口SecureProtocolSocketFactory的类. /** *ClassName: bcde *date: 2015年2月26日 下午4:51:01 * *@auth ...

  9. https学习笔记三----OpenSSL生成root CA及签发证书

    在https学习笔记二,已经弄清了数字证书的概念,组成和在https连接过程中,客户端是如何验证服务器端的证书的.这一章,主要介绍下如何使用openssl库来创建key file,以及生成root C ...

  10. openssl 自建CA签发证书 网站https的ssl通信

    <<COMMENTX509 文件扩展名 首先我们要理解文件的扩展名代表什么.DER.PEM.CRT和CER这些扩展名经常令人困惑.很多人错误地认为这些扩展名可以互相代替.尽管的确有时候有些 ...

随机推荐

  1. numpy的一些基本操作

    文章目录 1.numpy数组的多种创建方式 1.1使用np.array()创建 1.2使用plt创建 1.3使用np的routine函数创建 2.numpy的常用属性 2.1shape 2.2ndim ...

  2. Graphische Datenverarbeitung Ⅰ 学习笔记

    1. Pipeline 1.1 Graphische Primitive 1.2 Model and View Transform 1.3 Vertex Shading 1.4 Clipping 1. ...

  3. Sealos Devbox 使用教程:使用 Cursor 开发一个高仿苹果官网

    本教程将通过实战案例,详细介绍如何利用 Cursor 和 Devbox 开发环境,在一天内完成专业企业官网的开发和部署.适合产品经理.初级开发者或任何想要快速搭建网站的人群. 因为业务的需要,我需要开 ...

  4. 阿里云免费SSL证书申请全过程(图文详解)

    下面我们来详细说下阿里云的域名是如何注册购买,解析绑定的. 首先,打开阿里云官网 ​万网早就被阿里云收购了,所以是同一家.输入你想购买的域名,我这里是随便输入了"aliyun.com&quo ...

  5. springboot的基本使用

    SpringBoot简介 SpringBoot是由Pivotal团队提供的全新框架,其设计目的是用来简化Spring应用的初始搭建以及开发过程. 使用了Spring框架后已经简化了我们的开发,而Spr ...

  6. 零基础入门Hadoop:IntelliJ IDEA远程连接服务器中Hadoop运行WordCount

    今天我们来聊一聊大数据,作为一个Hadoop的新手,我也并不敢深入探讨复杂的底层原理.因此,这篇文章的重点更多是从实际操作和入门实践的角度出发,带领大家一起了解大数据应用的基本过程.我们将通过一个经典 ...

  7. (Python基础教程之三)Python代码中添加注释

    Python基础教程 在SublimeEditor中配置Python环境 Python代码中添加注释 Python中的变量的使用 Python中的数据类型 Python中的关键字 Python字符串操 ...

  8. java中的集合包简要分析

    1.集合包 集合包是java中最常用的包,它主要包括Collection和Map两类接口的实现. 对于Collection的实现类需要重点掌握以下几点: 1)Collection用什么数据结构实现? ...

  9. 基于python的文件监控watchdog

    实时监控第三方库watchdog,其原理通过操作系统的时间触发的,不需要循环和等待 使用场景: 1.监控文件系统中文件或目录的增删改情况 2.当特定的文件被创建,删除,修改,移动时执行相应的任务 1. ...

  10. Codeforces Round 855 (Div

    Problem - E2 - Unforgivable Curse (hard version) 给定一个初始字符串s和目标字符串t,我们可以对字符串s进行以下任意次操作: 对于位置\(i\),如果\ ...