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

news2024/9/26 5:24:40

中英文对照表

英文英文 - 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 相关 CRD

Issuer(证书颁发者)

IssuersClusterIssuers 是 Kubernetes CRD,代表证书颁发机构(CA),能够通过兑现证书签名请求来生成签名证书。所有 cert-manager 证书都需要一个被引用的签发者,该签发者处于准备就绪的状态,可以尝试兑现请求。

Issuer 类型的一个例子是 "CA"。一个简单的CA Issuer如下。

apiVersion: cert-manager.io/v1
kind: Issuer
metadata:
  name: ca-issuer
  namespace: mesh-system
spec:
  ca:
    secretName: ca-key-pair

这是一个简单的Issuer,将根据私钥(私钥存储在 Secret 的ca-key-pair中)签署证书。

  • Issuer: 限定在一个 NameSpace 的资源;
  • ClusterIssuer: 可以用于在所有命名空间中颁发 "证书"。

Certificate(证书)

cert-manager 有 Certificate 的概念,定义了所需的 X.509 证书,它将被更新并保持最新。一个 Certificate 是一个 Kubernetes 的 CRD,它引用了一个 IssuerClusterIssuer,决定了什么将被授予证书请求。

当一个 Certificate 被创建时,一个相应的 CertificateRequest 资源由 cert-manager 创建,其中包含编码的 X.509 证书请求,Issuer reference,以及其他基于 证书 资源规范的选项。

这个 Certificate 将告诉 cert-manager 尝试使用哪个 Issuer 来获取域名的证书密钥对。如果成功,得到的 TLS 密钥和证书将被保存在一个 secret 中,Key 分别为tls.keytls.crt。这个 Secret 将与Certificate CRD 在同一个命名空间。示例如下:

保存证书密钥对的 Secret

当证书由中间 CA 签发,并且Issuer 可以提供签发的证书链时,tls.crt的内容将是请求的证书,后面是证书链。

此外,如果证书颁发机构是已知的,相应的 CA 证书将被存储在 Secret 中,密钥为ca.crt。例如,对于 ACME 发行者,CA 是不知道的,ca.crt将不存在于acme-crt-secret中。

cert-manager 有意避免在tls.crt中添加根证书,因为在安全进行 TLS 的情况下,这些证书是无用的。

当配置一个客户端连接到具有由私人 CA 签署的服务证书的 TLS 服务器时,你需要向客户端提供 CA 证书,以便它验证服务器。

dnsNames字段指定了与证书相关的 SAN 的列表。

证书生命周期

这张图显示了使用 ACME/Let's Encrypt Issuer 的名为cert-1的证书的生命周期。

证书生命周期

CertificateRequest(证书申请)

CertificateRequest是 cert-manager 中的一个 Kubernetes CRD,用于向 Issuer 申请 X.509 证书。该资源包含一个 Base64 编码的 PEM 编码的证书请求字符串,它被发送到被引用的签发者。一个成功的签发将返回一个基于证书签署请求的签名证书。CertificateRequests通常由控制器或其他系统消费和管理,不应该由人类使用 - 除非特别需要。

CertificateRequestspec内的所有字段,以及任何管理的 cert-manager 注释,都是不可改变的,创建后不能修改。

成功签发证书签署请求将导致对资源的更新,用签署的证书、证书的 CA(如果可用)设置状态,并将 Ready 条件设置为 True。如下图:

`CertificateRequest` Status

无论证书签署请求的签发是否成功,签发的重试都不会发生。管理CertificateRequests的逻辑和生命周期是其他控制器的责任。

条件

CertificateRequests 有一组强定义的条件,控制器或服务应该使用和依赖这些条件来决定下一步对资源采取什么行动。

Ready

每个准备好的条件由一对Ready--一个布尔值,和Reason--一个字符串组成。这组值和含义如下:

ReadyReason条件含义
FalsePendingCertificateRequest目前正处于等待状态,等待其他操作的发生。这可能是由于Issuer'还不存在,或者Issuer'正在签发证书。
FalseFailed证书未能被签发--要么是返回的证书未能被解码,要么是用于签名的参考签发者的实例失败。它的控制器将不会对CertificateRequest采取进一步行动。
TrueIssued被引用的 Issuer 已成功签发了一份经签名的证书。

ACME Orders 和 Challenges

cert-manager 支持从 ACME 服务器请求证书,包括从 Let's Encrypt,使用 ACME Issuer。这些证书通常在公共互联网上被大多数计算机所信任。为了成功申请证书,cert-manager 必须解决 ACME challenge,完成这些 challenge 是为了证明客户拥有被申请的 DNS 地址。

为了完成这些 challenge,cert-manager 引入了两种 CRD 类型:OrdersChallenges

Orders (订单)

Orders资源被 ACME 发行者用来管理 ACME '订单' 的生命周期,以获得签名的 TLS 证书。关于 ACME 订单和域名验证的更多细节可以在 Let's Encrypt 网站 这里 找到。一个订单代表了一个单一的证书请求,一旦一个新的 CertificateRequest 资源引用 ACME 发行人,该订单就会自动创建。一旦 Certificate 资源被创建、规格改变或需要更新,CertificateRequest资源将由 cert-manager 自动创建。

作为终端用户,您将永远不需要手动创建一个 Order 资源。一旦创建,Order 不能被改变。相反,必须创建一个新的 Order资源。

Order 资源封装了该 "订单" 的多个 ACME Challenge,因此,将管理一个或多个 Challenge 资源。

Challenges (挑战)

Challenges 资源被 ACME 发行者用来管理 ACME challenge 的生命周期,为了完成对一个 DNS 名称/标识的 "认证",必须完成 challenge。

当一个 Order 资源被创建时,order 控制器将为每个正在被 ACME 服务器认证的 DNS 名称创建 Challenge资源。

作为终端用户,你永远不需要手动创建一个 Challenge 资源。一旦创建,Challenge就不能被改变。相反,必须创建一个新的 Challenge资源。

Challenge 生命周期

Challenges 资源被创建后,它最初将被排队处理。在 challenge 被 "安排" 开始之前,处理将不会开始。这种调度过程可以防止一次尝试太多的 challenge,或一次尝试对同一 DNS 名称的多个 challenge。

一旦 challenge 被安排,它将首先与 ACME 服务器进行 "同步",以确定其当前状态。如果 challenge 已经有效,它的 status 将被更新为 valid,并且还将设置status.processing = false以 "取消计划"。

如果 challenge 仍然 "pending",challenge 控制器将使用配置的解决方法(HTTP01 或 DNS01 之一)"present" challenge。一旦 challenge 被 "present",它将设置status.presented = true

一旦 "present",challenge 控制器将执行 "self check",以确保 challenge 已经 "propagated(已传播)"(即权威的 DNS 服务器已被更新以作出正确响应,或 ingress 资源的变化已被 ingress controller 观察到并正在使用)。

如果自检失败,cert-manager 将以固定的 10 秒重试时间间隔重试自检。没有完成自检的 challenge 将继续重试,直到用户通过重试 "订单"(通过删除 "订单 "资源)或修改相关的 "证书 "资源来解决任何配置错误进行干预。

一旦自检通过,与此 challenge 相关的 ACME "authorization(认证) "将被 "accepted(接受)"。

接受认证后的最终状态将被复制到 challenge 的status.state 字段,如果 ACME 服务器试图验证 challenge 时发生错误,也会复制 "error reason(错误原因)"。

一旦 challenge 进入 validinvalidexpiredrevoked (撤销)状态,它将设置 status.processing = false,以防止 ACME challenge 的任何进一步处理,如果有积压的 challenge 要完成,允许安排另一个 challenge。

Challenge 调度

cert-manager 并不试图一次处理所有的 challenge ,而是对 challenge 进行 "调度"。

这个调度器对同时进行的 challenge 的最大数量设置了上限,并且不允许对同一 DNS 名称和解算器类型(HTTP01DNS01)的两个 challenge 同时完成。

一次可以处理的最大 challenge 数量是 60 个,原因是 ddff78

系列文章

  • cert-manager TAG

📚️ 参考文档

  • cert-manager - cert-manager Documentation
  • 使用 cert-manager 为 dnspod 的域名签发免费证书 | kubernetes 学习笔记 (imroc.cc)

三人行, 必有我师; 知识共享, 天下为公. 本文由东风微鸣技术博客 EWhisper.cn 编写.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/175594.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

50个你离不开的 CLI 工具

作为开发人员,我们在终端上花费了大量时间。有很多有用的 CLI 工具,它们可以让您在命令行中的生活更轻松、更快速,而且通常更有趣。这篇文章概述了我最依赖的 50 个必备 CLI 工具。如果我遗漏了什么 - 请在评论中告诉我 :)在本文的结尾&#…

二叉树专题汇总

二叉树的前中后序遍历day11|144.二叉树的前序遍历、145.二叉树的后序遍历、94.二叉树的中序遍历_奈川直子的博客-CSDN博客二叉树的层序遍历、翻转二叉树、对称二叉树day12|层序遍历合集、226.翻转二叉树、101.对称二叉树_奈川直子的博客-CSDN博客N叉树最大深度、完全二叉树节点…

LCHub:2023年无代码、低代码8大技术趋势

在数字化转型、新冠疫情、全球经济环境动荡等多因素驱动下,使得组织改变了对低代码、无代码的看法,市场规模和场景化落地实现快速增长。根据Gartner预测,到2025年,70%的应用程序将由低代码和无代码开发平台构建,其中 80%的应用程序由非IT工作者开发而成。 没有编程背景的…

青山不语,碧海无痕,数字山河间的中国脊梁

刚刚过去的2022,对于新农人来说,是不寻常的一年。福建宁德的渔民祖祖辈辈都以外出打鱼为生,渔排生活条件艰苦,娱乐匮乏,销路也不稳定,这种苦闷正随着AI、直播等数字新技术的到来而被消解。青海列卜加村的孙…

Arduino的nodemcu 8266开发板使用MicroPython开发的整体流程

程序安装准备 安装开发板驱动,官网:(https://cn.silabs.com/developers/usb-to-uart-bridge-vcp-drivers?tabdownloads)这里不是CH340驱动,而是CP210x USB to USART 驱动,最终也是在“设备管理器查看COM口…

【LeetCode:33. 搜索旋转排序数组~~~二分】

题目描述 整数数组 nums 按升序排列&#xff0c;数组中的值 互不相同 。 在传递给函数之前&#xff0c;nums 在预先未知的某个下标 k&#xff08;0 < k < nums.length&#xff09;上进行了 旋转&#xff0c;使数组变为 [nums[k], nums[k1], …, nums[n-1], nums[0], nu…

操作系统真相还原_第5章第1节:利用BIOS中断0x15 获取内存信息

文章目录功能号返回信息功能号详解子功能号&#xff1a;0xE820子功能号&#xff1a;0xE801子功能号&#xff1a;0x88内存检测示例当前内存分布说明程序boot.incmbr.sloader.s编译并写入硬盘启动bochs运行功能号 EAX0xE820&#xff1a;遍历主机上全部内存 AX0xE801&#xff1a;…

分享121个ASP源码,总有一款适合您

ASP源码 分享121个ASP源码&#xff0c;总有一款适合您 下面是文件的名字&#xff0c;我放了一些图片&#xff0c;文章里不是所有的图主要是放不下...&#xff0c; 121个ASP源码下载链接&#xff1a;https://pan.baidu.com/s/1wwsIoZidHihm5WHPKjlvMg?pwdew3b 提取码&#x…

如何在linux服务器部署sonar服务?

文章目录前言一、上传sonar插件二、设置sonar插件的权限三、启动插件四、配置环境变量前言 sonar服务是代码质量扫描的工具,我们如何利用sonar进行代码质量扫描还有在linux服务器上部署呢?下面这篇文章详细的记录了我在sonar的使用过程中所遇到的各种坑。 一、上传sonar插件…

十大经典排序算法【算法思想+图解+代码】【数据结构与算法笔记】

前言&#xff1a;文中大部分为本人收集整理&#xff0c;综合学习资料&#xff0c;个人理解……。希望能帮助你少掉写头发&#xff0c;早日走出理解的深渊。因为写作较为仓促文中内容难免会有纰漏&#xff0c;发现可评论区回复&#xff08;无奖&#xff09;。排序(Sort)分析排序…

StudioOne6旗舰版DAW2023跨版本升级新功能介绍

PreSonus2023发布了Studio One 6旗舰级DAW的跨版本升级。他们获奖的DAW软件的这一最新版本引入了大量的新功能和增强功能&#xff0c;包括用户界面的定制选项&#xff0c;PreSonus说这使第6版成为他们迄今为止最个性化的升级。PreSonus发布了旗舰级DAW的跨版本升级&#xff0c;…

Leetcode:131. 分割回文串(C++)

目录 问题描述&#xff1a; 实现代码与解析&#xff1a; 回溯&#xff1a; 原理思路&#xff1a; 问题描述&#xff1a; 给你一个字符串 s&#xff0c;请你将 s 分割成一些子串&#xff0c;使每个子串都是 回文串 。返回 s 所有可能的分割方案。 回文串 是正着读和反着读都…

客快物流大数据项目(一百零六):实时ETL处理

文章目录 实时ETL处理 一、业务流程 二、​​

Kettle简介

一、Kettle基本介绍 Kettle(现更名为Pentaho Data Integration-Pentaho)是一款国外开源的ETL工具&#xff0c;纯java编写&#xff0c;可以在Window、Linux、Unix上运行&#xff0c;绿色无需安装。它允许你管理来自不同数据库的数据&#xff0c;通过提供一个图形化的用户环境来…

盒模型应用 改变宽高范围 改变背景覆盖范围 溢出处理 断词规则 空白处理

目录盒模型应用改变宽高范围改变背景覆盖范围溢出处理断词规则 word-break空白处理 溢出的空白处理盒模型应用 改变宽高范围 默认情况下&#xff0c;width 和 height 设置的是内容盒宽高。 页面重构师&#xff1a;将psd文件&#xff08;设计稿&#xff09;制作为静态页面 衡量…

【竞赛题】6297. 根据第 K 场考试的分数排序

题目 班里有 m 位学生&#xff0c;共计划组织 n 场考试。给你一个下标从 0 开始、大小为 m x n 的整数矩阵 score &#xff0c;其中每一行对应一位学生&#xff0c;而 score[i][j] 表示第 i 位学生在第 j 场考试取得的分数。矩阵 score 包含的整数 互不相同 。 另给你一个整数…

【机器学习】多标签分类

目录&#xff1a;多标签分类一、算法1.1 One-vs-Rest1.2 AdaBoost-MH1.3 ML-KNN一、算法 多标签分类的适用场景较为常见&#xff0c;比如&#xff0c;一份歌单可能既属于标签旅行也属于标签驾车。有别于多分类分类&#xff0c;多标签分类中每个标签不是互斥的。多标签分类算法…

Python使用K-means聚类分析

Python使用K-means聚类分析 文章目录Python使用K-means聚类分析介绍1.集群标签作为特征一、k-均值聚类二、示例 - 加州住房2.KMeans总结介绍 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 本文将使用所谓的无监督学习算法。 无监督算法不使用目标&#xff…

软件测试复习11:自动化测试

专栏&#xff1a;《软件测试》 个性签&#xff1a;顺境不惰&#xff0c;逆境不馁&#xff0c;以心制境&#xff0c;万事可成。——曾国藩 文章目录自动化测试的前提自动化测试的过程自动化测试的5个级别自动化测试的局限自动化测试的前提 自动化测试可以很好地代替人&#xf…

Facebook运营策略中的SEO优化:10个提示

在过去的一年中&#xff0c; Facebook上的品牌营销预算激增&#xff0c;这就是为什么许多人正在使用 Facebook来推广其业务。然而&#xff0c;并非所有新品牌都可以通过在社交媒体上进行成功的 SEO优化而获得成功。如果你想在 Facebook上销售你的产品或服务&#xff0c;你需要从…