续签KES证书

alt

MiniO KES(密钥加密服务)是 MinIO 开发的一项服务,旨在弥合在 Kubernetes 中运行的应用程序与集中式密钥管理服务 (KMS) 之间的差距。中央 KMS 服务器包含所有状态信息,而 KES 在需要执行与获取新密钥或更新现有密钥相关的任何操作时与 KMS 通信。一旦它获取了密钥,只要不需要更新或删除它,它就会缓存在 KES 中,因此后续调用会快得多。

那么,为什么要使用 KES 而不是直接使用 KMS?根据所使用的 KMS 及其需要处理的负载,有时 KMS 系统没有能力或支持来处理大型部署,在这些部署中,它必须来回管理数百甚至数千个密钥,而 Kubernetes 集群会给它们带来巨大的负载。在这些情况下,使用 KES 至关重要,因为它可以非常轻松地进行水平扩展,这与传统的 KMS 系统不同。

alt

应用程序 <-> KES 之间以及 KES <-> KMS 之间的所有 KES 操作都使用 mTLS 身份验证进行身份验证和授权功能。这是使用一对公钥/私钥和 X.509 证书完成的。证书的问题是它们有一个非常普遍的问题,它们往往会过期,当它们过期时,周围的服务都会以几乎没有韵律或理由的方式失败。这是什么意思?

alt

我们的意思是,一旦证书过期,您将开始在 KES 日志中看到此类错误


{"message":"2024/01/04 02:23:21 http: TLS handshake error from 10.244.2.9:32816: remote error: tls: bad certificate"}

{"message":"2024/01/04 02:23:28 http: TLS handshake error from 10.244.3.11:53456: remote error: tls: bad certificate"}

{"message":"2024/01/04 02:23:28 http: TLS handshake error from 10.244.1.9:56722: remote error: tls: bad certificate"}

{"message":"2024/01/04 02:23:28 http: TLS handshake error from 10.244.4.11:34152: remote error: tls: bad certificate"}

{"message":"2024/01/04 02:23:28 http: TLS handshake error from 10.244.2.9:55300: remote error: tls: bad certificate"}

{"message":"2024/01/04 02:23:28 http: TLS handshake error from 10.244.4.11:34160: remote error: tls: bad certificate"}

此外,当 MinIO 尝试执行定期 IAM 刷新时,这些刷新也会失败,并在 MinIO 日志中显示以下消息

Error: Failure in periodic refresh for IAM (took 0.03s): Post "https://kes-tenant-kes-hl-svc.default.svc.cluster.local:7373/v1/key/decrypt/my-minio-key": x509: certificate has expired or is not yet valid: current time 2024-01-04T02:27:31Z is after 2024-01-04T02:12:40Z (*errors.errorString)


如果幸运的话,您会看到一条明显的消息,例如 certificate has expired .其他时候,它并不那么明显,在尝试创建或删除密钥时,您还可能会看到边缘情况问题以及许多其他问题。最快的解决方案是尽快使用新证书续订和更新 KES。在这篇文章中,我们将向您展示如何做到这一点。

如何续费

让我们首先创建一个新的私钥

openssl genrsa -out private.key 2048

创建一个名为 cert.cnf 的文件,该文件将用于 openssl 创建证书签名请求 (CSR)

[req]

distinguished_name = req_distinguished_name

req_extensions = req_ext

prompt = no


[req_distinguished_name]

O = "system:nodes"

C = US

CN  = "system:node:*.kes-tenant-kes-hl-svc.default.svc.cluster.local"


[req_ext]

subjectAltName = @alt_names


[alt_names]

DNS.1 = kes-tenant-kes-0.kes-tenant-kes-hl-svc.default.svc.cluster.local

DNS.2 = kes-tenant-kes-hl-svc.default.svc.cluster.local

请务必修改 Common Name CN 和 Subject Alternative Names SAN (在 下 [alt_names] ),以匹配 KES 节点的 FQDN。请务必使用正确的 FQDN,而不是 IP 地址。

使用以下命令创建 CSR

openssl req -new -config cert.cnf -key private.key -out kes.csr

将 CSR 转换为编码字符串,以便将其作为 CertificateSigningRequest 资源添加到 Kubernetes。

cat kes.csr | base64 | tr -d "\n"

使用以下内容创建一个文件 kes-csr.yaml ,并将上述编码的 CSR 粘贴到 request 字段中。证书已被截断,因此您可以看到整个 yaml。

apiVersion: certificates.k8s.io/v1

kind: CertificateSigningRequest

metadata:

  name: kes-csr

spec:

  expirationSeconds: 604800

  groups:

  - system:serviceaccounts

  - system:serviceaccounts:minio-operator

  - system:authenticated

  - system:nodes

  request: LS0tLS1CRUdJTiBDRV…FUVVFU1QtLS0tLQo=

  signerName: kubernetes.io/kubelet-serving

  usages:

  - digital signature

  - key encipherment

  - server auth

  username: system:serviceaccount:minio-operator:minio-operator

添加编码的 CSR 并设置其他设置后,应用 yaml。

kubectl apply -f kes-csr.yaml

请务必批准上面创建的 kes-csr CSR

kubectl certificate approve kes-csr

csr 资源获取公共证书

kubectl get csr kes-csr -o jsonpath='{.status.certificate}'| base64 -d > public.crt

将(从过程开始)和 private.key public.crt (从上一步开始)转换为编码字符串。

cat private.key | base64 | tr -d "\n"
cat public.crt | base64 | tr -d "\n"

使用上面的编码字符串,我们将更新现有的 Secret kes-tenant-kes-tls ,为此,请按照以下步骤操作。

复制现有过期证书所在的现有密钥。

kubectl get secret kes-tenant-kes-tls -o yaml > kes-tls-secret.yaml

备份现有密钥后,将其删除

kubectl delete secret kes-tenant-kes-tls

使用过期的证书打开 kes-tls-secret.yaml ,并将以下两个字段替换为其各自的 base64 编码字符串。


data:

  private.key: >-

 LS0tLS1CRUd…ZLS0tLS0

  public.crt: >-

 LS0tLS1CRUdJTi…tLS0K

添加新证书后,应用 , Secret 这将重新创建 kes-tenant-kes-tls

kubectl apply -f kes-tls-secret.yaml

添加有效证书后,请务必重启 KES 服务,应看到如下所示的输出:

'http://vault.default.svc.cluster.local:8200' ...

Endpoint: https://127.0.0.1:7373     https://10.244.4.16:7373   


Admin: _  [ disabled ]

Auth:  off   [ any client can connect but policies still apply ]


Keys:  Hashicorp Vault: http://vault.default.svc.cluster.local:8200


CLI:   export KES_SERVER=https://127.0.0.1:7373

       export KES_CLIENT_KEY=   // e.g. $HOME/root.key

       export KES_CLIENT_CERT=  // e.g. $HOME/root.cert

       kes --help

MinIO 日志也应该是干净的,不应再显示任何 TLS 错误。

Waiting for all MinIO sub-systems to be initialized.. lock acquired

Automatically configured API requests per node based on available memory on the system: 221

All MinIO sub-systems initialized successfully in 15.44125ms

MinIO Object Storage Server

Copyright: 2015-2024 MinIO, Inc.

License: GNU AGPLv3 

Version: RELEASE.2024-01-04T09-40-09Z (go1.19.4 linux/arm64)


Status:      4 Online, 0 Offline.

API: https://minio.default.svc.cluster.local

Console: https://10.244.3.12:9443 https://127.0.0.1:9443   


Documentation: https://min.io/docs/minio/linux/index.html

最后的思考

在管理用于加密对象的密钥时,KES 是一个不可或缺的部分。以最快的方式对对象进行加密和解密非常重要,因为执行这些操作所需的每纳秒,最终用户获取对象的速度就会慢得多。是的,最终,低效和缓慢的 KMS 系统会降低集群的整体性能。因此,确保执行这些操作的服务快速、精简、高性能和可扩展至关重要。MinIO 的 KES 使任何 KMS 都成为高性能和可扩展的服务,而无需对现有 KMS 进行任何修改。按照上述步骤操作,您可以立即让 KES 恢复到拥有有效的未过期证书!

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Unity 工厂方法模式(实例详解)

文章目录 在Unity中&#xff0c;工厂方法模式是一种创建对象的常用设计模式&#xff0c;它提供了一个接口用于创建对象&#xff0c;而具体的产品类是由子类决定的。这样可以将对象的创建过程与使用过程解耦&#xff0c;使得代码更加灵活和可扩展。 工厂模式的主要优点如下&…

Unity中实现捏脸系统

前言 目前市面上常见的捏脸一般是基于BlendShapes和控制骨骼点坐标两种方案实现的。后者能够控制的精细程度更高&#xff0c;同时使用BlendShapes来控制表情。 控制骨骼点坐标 比如找到控制鼻子的骨骼节点修改localScale缩放&#xff0c;调节鼻子大小。 BlendShapes控制表…

gin中间件篇

1. 全局中间件 所有请求都经过此中间件 package mainimport ("fmt""time""github.com/gin-gonic/gin" )// 定义中间 func MiddleWare() gin.HandlerFunc {return func(c *gin.Context) {t : time.Now()fmt.Println("中间件开始执行了&quo…

OceanBase集群扩缩容

​ OceanBase 数据库采用 Shared-Nothing 架构&#xff0c;各个节点之间完全对等&#xff0c;每个节点都有自己的 SQL 引擎、存储引擎、事务引擎&#xff0c;天然支持多租户&#xff0c;租户间资源、数据隔离&#xff0c;集群运行的最小资源单元是Unit&#xff0c;每个租户在每…

常用设计模式(工厂方法,抽象工厂,责任链,装饰器模式)

前言 有关设计模式的其他常用模式请参考 单例模式的实现 常见的设计模式(模板与方法&#xff0c;观察者模式&#xff0c;策略模式) 工程方法 定义 定义一个用于创建对象的接口&#xff0c;让子类决定实例化哪一个类。Factory Method使得一个类的实例化延迟到子类。 ——《设…

Unity -简单键鼠事件和虚拟轴

简单键鼠事件 — “Test_03” KeyTest 键鼠事件每帧都要监听&#xff0c;要放在Update()中处理 public class KeyTest : MonoBehaviour {// Start is called before the first frame updatevoid Start(){}// Update is called once per framevoid Update(){// 【鼠标点击事件…

C++ :命名空间域

目录 冲突与命名&#xff1a; 举个例子&#xff1a; 全局与局部&#xff1a; 域作用限定符&#xff1a; 命名空间域&#xff1a; 冲突与命名&#xff1a; 在C语言中&#xff0c;我们通常会使用stdlib.h 而stdlib.h 本质上是一个函数的库&#xff0c;在程序中使用的大多数…

java面试——juc篇

目录 一、线程基础 1、进程与线程的区别&#xff1f;&#xff08;⭐⭐⭐&#xff09; 2、并行和并发的区别&#xff08;⭐&#xff09; 3、创建线程的方式有哪些&#xff1f;&#xff08;⭐⭐⭐⭐&#xff09; runnable和Callable的区别&#xff1a; 线程中的run()和 star…

自然语言处理研究的内容

一.基础技术 1.1 词法分析 词法分析&#xff08;Lexical Analysis&#xff09;&#xff0c;也称为词法扫描或扫描器&#xff0c;是自然语言处理&#xff08;NLP&#xff09;中的基础步骤之一&#xff0c;用于将输入的文本分割成词法单元&#xff08;Token&#xff09;。词法单…

条件风险价值CVaR内容介绍(MATLAB例程)

在对微电网优化调度过程中&#xff0c;由于新能源机组出力和负荷的不确定性&#xff0c;若采用确定性的优化调度方案会存在一定的风险。当风电和光伏输出功率的实际值低于预测值时&#xff0c;需要增加可控机组出力或切除部分负荷&#xff1b;反之&#xff0c;若风电和光伏输出…

php array_diff 比较两个数组bug避坑 深入了解

今天实用array_diff出现的异常问题&#xff0c;预想的结果应该是返回 "integral_initiate">"0"&#xff0c;实际没有 先看测试代码&#xff1a; $a ["user_name">"测","see_num">0,"integral_initiate&quo…

数据操作——缺失值处理

缺失值处理 缺失值的处理思路 如果想探究如何处理无效值, 首先要知道无效值从哪来, 从而分析可能产生的无效值有哪些类型, 在分别去看如何处理无效值 什么是缺失值 一个值本身的含义是这个值不存在则称之为缺失值, 也就是说这个值本身代表着缺失, 或者这个值本身无意义, 比如…

Hylicos - MINI2440 - 中断控制

中断 中断源管理 中断是一种异步异常&#xff0c;CPU需要处理很多来自设备的中断请求&#xff0c;而CPU引出的line只有IRQ线和FIQ线&#xff0c;所以就得引入中断控制器帮助CPU搞清楚是中断的来源。 MINI2440的中断控制器&#xff0c;可以接受来自60个中断源的请求。提供这些…

MySQL面试总结

MySQL优化 1.MySQL如何定位慢查询 1.1开源工具 1.2MySQL自带慢日志 1.3解答 2.EXPLAIN 2.1解答 3.什么是索引 4.B树 4.1数据结构对比 5.聚簇索引&#xff08;聚集索引&#xff09; 6.覆盖索引 7.索引创建原则 8.什么情况下索引失效 9.你对sql优化经验 10.事务 11.MVCC 11.主从…

开源堡垒机JumpServer本地安装并配置公网访问地址

文章目录 前言1. 安装Jump server2. 本地访问jump server3. 安装 cpolar内网穿透软件4. 配置Jump server公网访问地址5. 公网远程访问Jump server6. 固定Jump server公网地址 前言 JumpServer 是广受欢迎的开源堡垒机&#xff0c;是符合 4A 规范的专业运维安全审计系统。JumpS…

Python多线程爬虫——数据分析项目实现详解

前言 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家&#xff1a;https://www.captainbed.cn/z 「个人网站」&#xff1a;雪碧的个人网站 ChatGPT体验地址 文章目录 前言爬虫获取cookie网站爬取与启动CS…

Spring boot项目java bean和xml互转

Spring boot项目实现java bean和xml互转 项目场景&#xff1a;互转方法使用jackson进行互转使用jaxws进行xml与bean的互转 搞定收工&#xff01; 项目场景&#xff1a; 工作中需要给下游第三方收费系统做数据挡板&#xff0c;由于下游系统使用的是soap webservice,里面涉及各种…

牛客周赛 Round 21 解题报告 | 珂学家 | 堆栈的妙用

前言 整体评价 从A题中的Baidu, 可以猜到这场有几道题来自于百度校招。 其实B题有点意思&#xff0c;如果把十字星的范围放大&#xff0c;那就可以成为一个hard题。 D题也挺意思的&#xff0c;大概有两种思路&#xff0c;一种是从左到右枚举右端点&#xff0c;增量累加&…

【C/C++】C/C++编程——为什么学习 C++?

当提到C的时候&#xff0c;很多人会觉得语法复杂、学习曲线陡峭&#xff0c;并且好像与C语言还有点"纠缠不清"。尽管如此&#xff0c;C仍然是当今世界上最受欢迎和最有影响力的编程语言之一。特别是在当今快速发展的人工智能&#xff08;AI&#xff09;领域&#xff…

利用GPU加速自定义风格图像生成-利用GPU加速结合了ControlNet/ Lora的Stable Diffusion XL

点击链接完成注册&#xff0c;参加本次在线研讨会 https://www.nvidia.cn/webinars/sessions/?session_id240124-31319 随着AI技术的发展, 数字内容创建业务也变得越来越火热。生成式AI模型的发布, 让我们看到了人工智能在各行各业的潜力。您只需要用语言简单描述自己希望看…