续签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.mzph.cn/news/640420.shtml

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

相关文章

Med-YOLO:3D + 医学影像 + 检测框架

Med-YOLO&#xff1a;3D 医学影像 检测框架 提出背景设计思路网络设计训练设计讨论分析 魔改代码&#xff1a;加强小目标检测总结 提出背景 论文链接&#xff1a;https://arxiv.org/abs/2312.07729 代码链接&#xff1a;https://github.com/JDSobek/MedYOLO 提出背景&…

一文梳理Windows自启动位置

不同版本的Windows开机自启动的位置略有出入&#xff0c;一般来说&#xff0c;Windows自启动的位置有&#xff1a;自启动文件夹、注册表子键、自动批处理文件、系统配置文件等。如果计算机感染了木马&#xff0c;很有可能就潜伏于其中&#xff01;本文将说明这些常见的Windows开…

理想架构的非对称高回退Doherty功率放大器理论与仿真

Doherty理论—理想架构的非对称高回退Doherty功率放大器理论与仿真 参考&#xff1a; 三路Doherty设计 01 射频基础知识–基础概念 Switchmode RF and Microwave Power Amplifiers 目录 Doherty理论---理想架构的非对称高回退Doherty功率放大器理论与仿真0、高回退Doherty功率…

UVT音乐证书考试时间确定,学习氛围渐浓

美国职业资格与人才管理中心&#xff08;UVT&#xff09;音乐证书考试时间正式确定&#xff0c;学习氛围逐渐浓厚。众多热爱音乐的从业者和学生开始积极备考&#xff0c;希望通过这一考试获得音乐领域的宝贵证书。音乐证书被认为是音乐人才展示个人专业水平的重要机会&#xff…

【K8S 云原生】K8S的包包管理器-helm

目录 一、helm概念 1、什么是helm 2、helm的概念&#xff1a; 二、实验部署&#xff1a; 1、安装helm&#xff1a; 2、对chart仓库的基本使用&#xff1a; 2.1、查看和更新chart仓库 2.2、安装chart 2.3、卸载chart&#xff1a; 3、helm自定义模版&#xff1a; 3.1、…

常规二分查找中遇到的问题

以前我们写二分查找的时候&#xff0c;是这么写的&#xff1a; public static int binarySearch2(int []a,int target){int i0,ja.length-1;while(i<j){int mid(ij)/2;if(a[mid]target){return mid;}else if(a[mid]<target){imid1;}else {jmid-1;}}return -1;} 这么写&…

签名不对,请检查包名是否与开放平台上填写的一致。微信分享 errorCode 为-6(方法有两种)

微信分享 errorCode 为-6 解决办法1.自己编译&#xff0c;把MD5加密文件改成小写且去掉&#xff1a;如下图 解决方法2 下载GenSignature 输入包名 然后生成应用签名 在微信开放平台创建应用&#xff0c;填写应用签名

74.MySQL 分页原理与优化(下)

文章目录 前言一、一次分页查询的演进二、分页数据在不同页反复出现的坑 前言 上一篇文章介绍了分页原理与优化&#xff1a;73.MySQL 分页原理与优化&#xff08;上&#xff09; 但分页还有一个“坑”需要注意&#xff0c;本文细细道来&#xff0c;可能很多朋友都踩过这个坑还…

REVIT二次开发批量编号

步骤1 步骤2 步骤3 实现代码using System; using System.Collections.Generic; using System.Linq; using Syste

基于springboot+vue的教师工作量管理系统(前后端分离)

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容&#xff1a;毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 项目背景…

Mybatis-Generator-1.4.2

知道代码自动化原理&#xff0c;可以自己搞的&#xff0c;连客户端js html一起弄掉 Low Code Development Platform(LCDP)_cms lcdp-CSDN博客

一种行之有效的防错策略:在支付系统中实施防呆设计的实践

聊个支付人都会碰到的问题&#xff1a;资损防控。做支付如果还没有碰到过资损&#xff0c;那就是做得时间还不够久。资损防控是一个很大的话题&#xff0c;需要开几篇文章才能讲完&#xff0c;今天只从一件小事入手聊一个简单而又行之有效的防错策略&#xff1a;防呆设计的实践…

论文阅读_tinyllama_轻量级大模型

英文名称: TinyLlama: An Open-Source Small Language Model中文名称: TinyLlama: 一个开源的小型语言模型链接: http://arxiv.org/abs/2401.02385v1代码: https://github.com/jzhang38/TinyLlama作者: Peiyuan Zhang, Guangtao Zeng, Tianduo Wang, Wei Lu机构: 新加坡科技与设…

【C++】list容器迭代器的模拟实现

list容器内部基本都是链表形式实现&#xff0c;这里的迭代器实现的逻辑需要注意C语言中指针的转换。 list容器如同数据结构中的队列&#xff0c;通常用链式结构进行存储。在这个容器中&#xff0c;我们可以模仿系统的逻辑&#xff0c;在头结点后设置一个“ 哨兵 ”&#xff0c;…

14.2搭建ASP运行环境

14.2搭建ASP运行环境 可以使用WinXP来搭建ASP的运行环境&#xff0c;不过&#xff0c;WinXP不适宜作为商业用Web服务器。目前比较常用的Web服务器操作系统是Windows2003 Server&#xff0c;在Windows2003 Server上安装完IIS6.0并进行相关设置后&#xff0c;即完成了ASP运行环境…

【lettuce-排行榜】

背景&#xff1a; 这次游戏中台采用lettuce的zset完成游戏内的本服和跨服排行榜&#xff0c;因此写一下案例。 pom.xml <dependency><groupId>io.lettuce</groupId><artifactId>lettuce-core</artifactId><version>6.2.4.RELEASE</ve…

【Redis】Redis基础

Redis基础 初识Redis 认识NoSQL SQL&#xff1a;结构化查询语言 > 关系型数据库 NoSQL&#xff1a;非关系型数据库 SQL与NoSQL的差异&#xff1a; 数据结构 SQL结构化&#xff1a;表的信息依赖于表的结构NoSQL非结构化&#xff1a;存储的信息为KV形式 数据关联 SQL关联…

Kubernetes实战(十八)-Pod亲和与反亲和调度

1 调度Pod的主要方式 Pod调度到指定Node的方式主要有4种&#xff1a; nodeName调度&#xff1a;直接在Pod的yaml编排文件中指定nodeName&#xff0c;调度到指定name的节点上。nodeSelector调度&#xff1a;直接在Pod的yaml编排文件中指定nodeSelector&#xff0c;调度到带有指…

Java和Redis实现一个简单的热搜功能

1. 前言 我们有一个简单的需求&#xff1a; 搜索栏展示当前登陆的个人用户的搜索历史记录&#xff0c;删除个人历史记录。用户在搜索栏输入某字符&#xff0c;则将该字符记录下来 以zset格式存储的redis中&#xff0c;记录该字符被搜索的个数以及当前的时间戳 &#xff08;用…

Qt5.12.0 与 VS2017 在 .pro文件转.vcxproj文件

一、参考资料 stackoverflow qt - How to generate .sln/.vcproj using qmake - Stack Overflowhttps://stackoverflow.com/questions/2339832/how-to-generate-sln-vcproj-using-qmake?answertabtrending#tab-topqt - 如何使用 qmake 生成 .sln/.vcproj - IT工具网 (coder.wo…