还不会 Cert Manager 自动签发证书?一文掌握
相信很多小伙伴对于 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 的引用:关联到某个具体的
Issuer
或ClusterIssuer
。
Secrets
是 Kubernetes 的资源对象,签发完成的证书最终会存储在 Secrets
中,供其他组件引用。
证书签发概述
本文使用 Let's Encrypt 作为证书颁发机构,Let's Encrypt 利用 ACME 协议校验域名的归属,校验成功后可以自动颁发免费证书。免费证书有效期只有90天,默认情况下 Cert Manager 会在证书到期前30天自动续期,即实现永久使用免费证书。校验域名归属的两种方式分别是 HTTP-01
和 DNS-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
后,可以通过以下步骤检查签发状态并获取证书内容:
- 检查 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
:表示签发失败。需要进一步排查原因。
- 排查签发失败原因,如果
READY
状态为False
,可以使用以下命令查看详细事件日志:
kubectl describe certificate test-rainbond-com -n default
日志中会显示失败的原因,例如域名校验失败、配置错误或 Issuer 不可用。
- 查看生成的 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
: 证书对应的私钥。
-
获取具体证书和密钥内容,使用以下命令查看或提取证书和私钥内容:
$ 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 的部署流程,为服务提供安全性保障。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
【GreatSQL优化器-10】find_best_ref
【GreatSQL优化器-10】find_best_ref 一、find_best_ref介绍 GreatSQL的优化器对于join的表需要根据行数和cost来确定最后哪张表先执行哪张表后执行,这里面就涉及到预估满足条件的表数据,在keyuse_array数组有值的情况下,会用find_best_ref函数来通过索引进行cost和rows的估计,并且会找出最优的索引。这样就可能不会继续用后面的calculate_scan_cost()进行全表扫描计算cost,可以节省查询时间。 这个功能是对之前【优化器05-条件过滤】的补充功能,二者有可能一起用,也有可能只选择一种计算,要看具体条件。 下面用一个简单的例子来说明find_best_ref函数获得的结果。 CREATE TABLE t1 (c1 INT PRIMARY KEY, c2 INT,date1 DATETIME); INSERT INTO t1 VALUES (1,10,'2021-03-25 16:44:00.123456'),(2,1,'2022-03-26 16:44:00.123456'),(3,4,'2023-...
- 下一篇
2025 年 AI 与数据工程领域十大趋势前瞻
编者按: 在这篇文章中,作者从行业趋势剖析的视角指出:当前 AI 领域正处于一个转折点,其发展虽然不如预期迅猛,但正在朝着更加务实和可持续的方向演进。 文章深入探讨了 AI 和数据工程领域的十大关键趋势:从 AI 推理能力的局限性,到流程重于工具的重要性;从 AI 投资回报率的现状,到 AI 普及速度低于预期但领导者在静待时机;从小模型和专有模型之争,到分析师和工程师角色的融合;从合成数据的机遇与挑战,到非结构化数据技术栈的崛起;从 Agentic AI 对话虽表现出色但部署成问题,到数据管道规模扩大导致的质量保障挑战。 展望 2025 年,AI 技术的发展或将更加注重实际价值的创造。对于企业而言,如何在这个转型期找准定位、把握机遇,将是决定成败的关键因素。 作者 | Barr Moses 编译 | 岳扬 Image credit: Monte Carlo 业内专家们曾预言,2024 年将成为生成式 AI 的里程碑之年。实际应用案例不断涌现,技术进步使得进入该领域的门槛不断降低,而通用人工智能似乎也近在咫尺。 那么,这些预测都实现了吗? 部分实现了。站在 2024 年的尾声,其中一些预...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Windows10,CentOS7,CentOS8安装Nodejs环境
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- 2048小游戏-低调大师作品
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- 设置Eclipse缩进为4个空格,增强代码规范
- CentOS关闭SELinux安全模块