还不会 Cert Manager 自动签发证书?一文掌握

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
性能测试 PTS,5000VUM额度
应用实时监控服务-应用监控,每月50GB免费额度
简介: 本文将介绍如何使用 Cert Manager 实现自动签发证书并与 Rainbond 结合使用。

相信很多小伙伴对于 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 的部署流程,为服务提供安全性保障。

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
6天前
|
供应链 监控 安全
对话|企业如何构建更完善的容器供应链安全防护体系
随着云计算和DevOps的兴起,容器技术和自动化在软件开发中扮演着愈发重要的角色,但也带来了新的安全挑战。阿里云针对这些挑战,组织了一场关于云上安全的深度访谈,邀请了内部专家穆寰、匡大虎和黄竹刚,深入探讨了容器安全与软件供应链安全的关系,分析了当前的安全隐患及应对策略,并介绍了阿里云提供的安全解决方案,包括容器镜像服务ACR、容器服务ACK、网格服务ASM等,旨在帮助企业构建涵盖整个软件开发生命周期的安全防护体系。通过加强基础设施安全性、技术创新以及倡导协同安全理念,阿里云致力于与客户共同建设更加安全可靠的软件供应链环境。
141481 10
|
14天前
|
弹性计算 人工智能 安全
对话 | ECS如何构筑企业上云的第一道安全防线
随着中小企业加速上云,数据泄露、网络攻击等安全威胁日益严重。阿里云推出深度访谈栏目,汇聚产品技术专家,探讨云上安全问题及应对策略。首期节目聚焦ECS安全性,提出三道防线:数据安全、网络安全和身份认证与权限管理,确保用户在云端的数据主权和业务稳定。此外,阿里云还推出了“ECS 99套餐”,以高性价比提供全面的安全保障,帮助中小企业安全上云。
201925 14
对话 | ECS如何构筑企业上云的第一道安全防线
|
3天前
|
供应链 监控 安全
|
6天前
|
SQL 安全 前端开发
预编译为什么能防止SQL注入?
SQL注入是Web应用中常见的安全威胁,攻击者通过构造恶意输入执行未授权的SQL命令。预编译语句(Prepared Statements)是一种有效防御手段,它将SQL代码与数据分离,确保用户输入不会被解释为SQL代码的一部分。本文详细介绍了SQL注入的危害、预编译语句的工作机制,并结合实际案例和多语言代码示例,展示了如何使用预编译语句防止SQL注入,强调了其在提升安全性和性能方面的重要性。
|
9天前
|
搜索推荐 物联网 PyTorch
Qwen2.5-7B-Instruct Lora 微调
本教程介绍如何基于Transformers和PEFT框架对Qwen2.5-7B-Instruct模型进行LoRA微调。
417 34
Qwen2.5-7B-Instruct Lora 微调
|
1月前
|
人工智能 自然语言处理 前端开发
从0开始打造一款APP:前端+搭建本机服务,定制暖冬卫衣先到先得
通义灵码携手科技博主@玺哥超carry 打造全网第一个完整的、面向普通人的自然语言编程教程。完全使用 AI,再配合简单易懂的方法,只要你会打字,就能真正做出一个完整的应用。
9940 29
|
3天前
|
机器学习/深度学习 存储 人工智能
【科普向】我们所说的AI模型训练到底在训练什么?
人工智能(AI)模型训练类似于厨师通过反复实践来掌握烹饪技巧。它通过大量数据输入,自动优化内部参数(如神经网络中的权重和偏置),以最小化预测误差或损失函数,使模型在面对新数据时更加准确。训练过程包括前向传播、计算损失、反向传播和更新权重等步骤,最终生成权重文件保存模型参数,用于后续的应用和部署。理解生物神经网络的工作原理为人工神经网络的设计提供了灵感,后者广泛应用于图像识别、自然语言处理等领域。
|
2天前
|
人工智能 算法 搜索推荐
阿里云百炼xWaytoAGI共学课开课:手把手学AI,大咖带你从零搭建AI应用
阿里云百炼xWaytoAGI共学课开课啦。大咖带你从零搭建AI应用,玩转阿里云百炼大模型平台。3天课程,涵盖企业级文本知识库案例、多模态交互应用实操等,适合有开发经验的企业或独立开发者。直播时间:2025年1月7日-9日 20:00,地点:阿里云/WaytoAGI微信视频号。参与课程可赢取定制保温杯、雨伞及磁吸充电宝等奖品。欢迎加入钉钉共学群(群号:101765012406),与百万开发者共学、共享、共实践!
|
15天前
|
机器学习/深度学习 人工智能 安全
通义视觉推理大模型QVQ-72B-preview重磅上线
Qwen团队推出了新成员QVQ-72B-preview,这是一个专注于提升视觉推理能力的实验性研究模型。提升了视觉表示的效率和准确性。它在多模态评测集如MMMU、MathVista和MathVision上表现出色,尤其在数学推理任务中取得了显著进步。尽管如此,该模型仍存在一些局限性,仍在学习和完善中。