续签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.hqwc.cn/news/422908.html

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

相关文章

docker运行redis,jdk,nginx

Redis 1.查询redis [rootlocalhost ~]# docker search redis NAME DESCRIPTION STARS OFFICIAL redis Redis is an open source key-value store that… 12620 …

网络安全全栈培训笔记(WEB攻防-51-WEB攻防-通用漏洞验证码识别复用调用找回密码重定向状态值)

第51天 WEB攻防-通用漏洞&验证码识别&复用&调用&找回密码重定向&状态值 知识点&#xff1a; 1、找回密码逻辑机制-回显&验证码&指向 2、验证码验证安全机制-爆破&复用&识别 3、找回密码客户端回显&Response状态值&修改重定向 4、…

革新区块链:代理合约与智能合约升级的未来

作者 张群&#xff08;赛联区块链教育首席讲师&#xff0c;工信部赛迪特聘资深专家&#xff0c;CSDN认证业界专家&#xff0c;微软认证专家&#xff0c;多家企业区块链产品顾问&#xff09;关注张群&#xff0c;为您提供一站式区块链技术和方案咨询。 代理合约&#xff08;Prox…

地方债务余额数据,Shp、excel格式,2008-2020年,含公共财政收入、支出、负债率等多个字段

基本信息&#xff1a; 数据名称: 地方债务余额数据 数据格式: Shp、excel 数据时间: 2008-2020年 数据几何类型: 面 数据坐标系: WGS84 数据来源&#xff1a;网络公开数据 数据字段&#xff1a; 序号字段名称字段说明1zfzqsl地方政府债-债券数量(只)2zfzqye地方政府…

顶顶通呼叫中心中间件如何实现自己呼叫自己并且放音:一步步配置(mod_cti基于FreeSWITCH)

介绍 顶顶通呼叫中心中间件如何实现自己呼叫自己并且放音&#xff1a;一步步配置 一、配置acl.conf 打开ccadmin-》点击配置文件并且打开acl.conf-》配置好了点击提交XML。 注意&#xff1a;acl.conf的服务器IP必须是内网IP 添加了之后在运维调试输入reloadacl 在运维调试执…

w23靶场安装

一、实验环境 服务器&#xff1a;phpstudyv8.1.13 靶场&#xff1a;Bees二、实验目的 提供一个靶场环境 三、实验步骤 bees靶场安装 1.启动小皮的apache和mysql 2.在小皮V8.1.1.3版本上创建bees网站&#xff0c;选择的php版本最好在5.x&#xff0c;不然会有php解析错误。…

739.每日温度 496.下一个更大元素 I

739.每日温度 496.下一个更大元素 I 739.每日温度 力扣题目链接(opens new window) 请根据每日 气温 列表&#xff0c;重新生成一个列表。对应位置的输出为&#xff1a;要想观测到更高的气温&#xff0c;至少需要等待的天数。如果气温在这之后都不会升高&#xff0c;请在该位…

【Android】TypedArray的使用

介绍 看电池电量组件BatteryMeterView的时候看到的。 Array是个数组&#xff0c;所有TypedArray也是个容器&#xff0c;基本是用于自定义View里面的&#xff08;至少我目前见过的全部都在自定义View里面&#xff09;。 使用 1.自定义View public class RoundSeekbarView e…

陪玩系统:最新商业版游戏陪玩语音聊天系统3.0商业升级独立版本源码

首发价值29800元的最新商业版游戏陪玩语音聊天系统3.0商业升级独立版本源码 &#xff08;价值29800&#xff09;最新陪玩3.0独立版本 &#xff0c;文件截图 结尾将会附上此系统源码以及详细搭建教程包含素材图仅用于学习使用 陪玩系统3.0独立升级版正式发布&#xff0c;此版本…

计算机视觉的应用

计算机视觉&#xff08;Computer Vision&#xff09;是一门研究如何让计算机能够理解和分析数字图像或视频的学科。简单来说&#xff0c;计算机视觉的目标是让计算机能够像人类一样对视觉信息进行处理和理解。为实现这个目标&#xff0c;计算机视觉结合了图像处理、机器学习、模…

【立创EDA-PCB设计基础】5.布线设计规则设置

前言&#xff1a;本文详解布线前的设计规则设置。经过本专栏中的【立创EDA-PCB设计基础】前几节已经完成了布局&#xff0c;接下来开始进行布线&#xff0c;在布线之前&#xff0c;要设置设计规则。 目录 1.间距设置 1.1 安全间距设置 1.2 其它间距设置 2.物理设置 2.1 导…

工业相机+镜头选型及靶面、焦距计算等相关详解

工业相机镜头选型及靶面、焦距计算等相关详解 着重讲述相机的各个参数及使用意义总结相机镜头选型主要参数的推理计算 0. 工业相机相关概念简介 相机与镜头一览 工业相机与镜头实物图如下图所示&#xff1a; 常见的相机有两种供电方式&#xff1a;一种是电源线供电&#xff0…