适用于 AI/ML 工作负载的有状态 KES

在此概念验证 (POC) 中,我们将探讨在 Kubernetes (k8s) 生态系统中安装和管理有状态密钥加密服务 (KES)。本指南促进了加密操作的无缝衔接,而不会将敏感的密钥材料暴露给使用型应用程序。

在 Kubernetes 中以有状态配置实现 KES 可确保加密密钥在 Pod 生命周期事件和重新启动期间的持久性。此设置提供了体系结构弹性,这在不依赖外部密钥管理系统 (KMS) 的环境中尤为重要。

当您有数百万亿个对象从 AI/ML 工作负载(例如LLMs)生成时,由于数百个应用程序同时访问它们,您需要确保数据加密/解密层不会成为瓶颈,并且尽可能快,因为每个对象都需要自己唯一的密钥。通过将这些潜在的数十亿个密钥存储在有状态的 KES 后端中,即使 KMS 长时间脱机,密钥也可以保存到 KES,直到 KMS 重新联机。

先决条件

在继续之前,请确保您具备:

  • 已安装并配置 Kubernetes CLI (kubectl)。

  • 使用适当的权限访问 Kubernetes 集群。

  • MinIO Operator 和 CLI (mc) 已准备好部署。

  • Kubernetes 和加密概念的基本知识。

部署 MinIO Operator

设置 Kubernetes 环境

删除上一个集群

若要避免冲突,请删除任何现有群集:

kind delete clusters kind
创建新集群

使用以下 kind-config.yaml 文件设置具有所需配置的全新 Kubernetes 集群:


kind create cluster --config ~/operator/testing/kind-config.yaml
部署 MinIO Operator

使用 kubectl 部署 MinIO Operator 以管理集群中的 MinIO 实例:


kubectl apply -k github.com/minio/operator/
部署 MinIO 租户

使用适合开发和测试目的的轻量级配置部署 MinIO 租户:


kubectl apply -k github.com/minio/operator/examples/kustomization/tenant-lite

配置密钥加密服务 (KES)

创建 Ubuntu Pod

部署 Ubuntu Pod 以在 MinIO 租户命名空间中托管 KES 服务:

cat <<EOF | kubectl apply -f -apiVersion: v1kind: Podmetadata:name: ubuntunamespace: tenant-litelabels:app: ubuntuspec:containers:- image: ubuntucommand:- "sleep"- "604800"imagePullPolicy: IfNotPresentname: ubunturestartPolicy: AlwaysEOF
安装 KES 和 mc

在 Ubuntu pod 中执行以下命令以安装 KES 和 MinIO 客户端 (mc):


apt updateapt install wgetwget https://github.com/minio/kes/releases/latest/download/kes-linux-amd64mv kes-linux-amd64 keschmod +x kesmv kes /usr/local/bin/keswget https://dl.min.io/client/mc/release/linux-amd64/mcchmod +x mcmv mc /usr/local/bin/mc

为 KES 配置持久性存储

持久性目录创建

在 Ubuntu pod 中为 KES 配置和数据文件创建一个目录,其中 KES 位于:

rm -rf ~/kesmkdir ~/kescd ~/kestouch init.yml
身份管理

生成 KES 和 MinIO 身份验证所需的必要标识:

cd ~/keskes identity new --key sys-admin.key --cert sys-admin.crt kes-sys-adminkes identity new --key minio-admin.key --cert minio-admin.crt minio-adminkes identity new --key minio.key --cert minio.crt miniokes identity new --ip "10.244.2.7" localhost # will generate private.key and public.crt||____ IP Address of the Ubuntu Pod.

预期有 4 个标识。

root@ubuntu:/# cd ~/kesroot@ubuntu:~/kes# lsdata  init.yml  minio-admin.crt  minio-admin.key  minio.crt  minio.key  private.key  public.crt  sys-admin.crt  sys-admin.key|           	|          	|      	|                                	|            	||           	|          	|__________|___ minio                       	|________________|___ kes-sys-admin|           	||_______________|___ minio-adminroot@ubuntu:~/kes#

创建 KES 解封密钥。


cat /dev/urandom | head -c 32 | base64 # put the result in the .bashrcvi ~/.bashrcexport KES_UNSEAL_KEY=<VALUE-FROM-ABOVE-COMMAND>source ~/.bashrcecho $KES_UNSEAL_KEY # it should print the value

初始化 KES 部署

KES 配置 - 编辑/创建 KES 配置文件

通过设置必要的配置参数来配置 KES 服务:

cd ~/kesecho "version: v1" > ~/kes/init.ymlecho "address: 0.0.0.0:7373" >> ~/kes/init.ymlecho "" >> ~/kes/init.ymlecho "tls:" >> ~/kes/init.ymlecho "  key: private.key" >> ~/kes/init.ymlecho "  cert: public.crt" >> ~/kes/init.ymlecho "  client:" >> ~/kes/init.ymlecho "	verify_cert: false" >> ~/kes/init.ymlecho "" >> ~/kes/init.ymlecho "system:" >> ~/kes/init.ymlecho "  admin:" >> ~/kes/init.ymlecho "	identity: $(kes identity of sys-admin.crt)" >> ~/kes/init.ymlecho "" >> ~/kes/init.ymlecho "unseal:" >> ~/kes/init.ymlecho "  environment:" >> ~/kes/init.ymlecho "	name: KES_UNSEAL_KEY" >> ~/kes/init.ymlecho "" >> ~/kes/init.ymlecho "enclave:" >> ~/kes/init.ymlecho "  default:" >> ~/kes/init.ymlecho "	admin:" >> ~/kes/init.ymlecho "  	identity: $(kes identity of minio-admin.crt)" >> ~/kes/init.ymlecho "	policy:" >> ~/kes/init.ymlecho "  	minio:" >> ~/kes/init.ymlecho "    	allow:" >> ~/kes/init.ymlecho "    	- /v1/api" >> ~/kes/init.ymlecho "    	- /v1/log/audit" >> ~/kes/init.ymlecho "    	- /v1/log/error" >> ~/kes/init.ymlecho "    	- /v1/key/create/*" >> ~/kes/init.ymlecho "    	- /v1/key/generate/*" >> ~/kes/init.ymlecho "    	- /v1/key/decrypt/*" >> ~/kes/init.ymlecho "    	- /v1/key/bulk/decrypt/*" >> ~/kes/init.yml
初始化

使用新创建的配置文件初始化 KES 服务器:


cd ~/kes # where init.yml is savedkes init --config init.yml ~/kes/data

预期为


root@ubuntu:~/kes# cd ~/kes # where init.yml is savedkes init --config init.yml ~/kes/dataTLS:· Private Key:  private.key· Certificate:  public.crtSystem:· Identity:  1a65f6f86c3268b30528fe4aab88fc6994730346e1c1863052fa3fa192d77d3eUnseal:· Environment:  KES_UNSEAL_KEY╭─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮│                                                    	Initialized KES v0.22.3 in /root/kes/data                                                    	│╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯root@ubuntu:~/kes#

启动 KES 服务器

启动 KES 服务器并验证其是否正常运行:

kes server ~/kes/data

预期为:


root@ubuntu:~/kes# kes server ~/kes/dataCopyright  MinIO, Inc.  https://min.ioLicense	GNU AGPLv3   https://www.gnu.org/licenses/agpl-3.0.htmlVersion	v0.22.3  	linux/amd64Endpoints  https://127.0.0.1:7373https://10.244.4.2:7373mTLS   	skip verify  Client certificates are not verifiedMem Lock   off      	Failed to lock RAM pages. Consider granting CAP_IPC_LOCK

使用 KES 配置 MinIO

分配策略

通过分配适当的策略和标识将 MinIO 和 KES 链接在一起。

在 KES 所在的 Ubuntu Pod 终端中:将 MinIO 标识分配给 MinIO 策略。

cd ~/kesexport KES_SERVER=https://127.0.0.1:7373export KES_CLIENT_KEY=minio-admin.keyexport KES_CLIENT_CERT=minio-admin.crtkes policy assign -k minio $(kes identity of minio.crt)

预期:


root@ubuntu:/# cd ~/kesexport KES_SERVER=https://127.0.0.1:7373export KES_CLIENT_KEY=minio-admin.keyexport KES_CLIENT_CERT=minio-admin.crtkes policy assign -k minio $(kes identity of minio.crt)root@ubuntu:~/kes#root@ubuntu:~/kes#root@ubuntu:~/kes#root@ubuntu:~/kes#root@ubuntu:~/kes#root@ubuntu:~/kes# printenv | grep KES_SERVERKES_SERVER=https://127.0.0.1:7373root@ubuntu:~/kes#
服务器设置

在 MinIO 和 KES 之间建立连接,定义加密端点和凭据:

  • 创建 kes-minio 密钥

  • 将 ~/kes/minio.key 和 ~/kes/minio.crt 从 ubuntu pod 复制到您的笔记本电脑

下面的这两个文件来自以下行: kes identity new --key minio.key --cert minio.crt minio

# /Users/aj/minio/private.key is ~/kes/minio.key# /Users/aj/minio/public.crt is ~/kes/minio.crtkubectl create secret generic kes-minio -n tenant-lite --from-file=/Users/aj/minio/private.key --from-file=/Users/aj/minio/public.crt
  • 创建 kes-minio-public 密钥:

1 . 将 ~/kes/private.key 和 ~/kes/public.crt 从 ubuntu pod 复制到您的笔记本电脑

2 . 下面的这两个文件来自以下行:kes identity new --ip “10.244.2.7” localhost:


# /Users/aj/minio/private.key is ~/kes/private.key# /Users/aj/minio/public.crt is ~/kes/public.crtkubectl create secret generic kes-minio-public -n tenant-lite --from-file=/Users/aj/minio/private.key --from-file=/Users/aj/minio/public.crt

k edit tenant -n tenant-lite

apiVersion: minio.min.io/v2kind: Tenantmetadata:name: storagenamespace: minio-tenantspec:# externalClientCertSecrets is to share the secret with the MinIO Pods:# Under: /tmp/certs/client-0 You will find:# client.crt and client.key# And we can use these files to setup KES in k8sexternalClientCertSecrets:- name: kes-miniotype: Opaque- name: kes-minio-publictype: Opaqueenv:# Set MINIO_KMS_KES_ENDPOINT# It is the IP of the Ubuntu Pod.- name: MINIO_KMS_KES_ENDPOINTvalue: "https://<IP-ADDRESS-OF-UBUNTU-POD>:7373"# Set MinIO Client Credentials, it comes from kes-minio secret- name: MINIO_KMS_KES_CERT_FILEvalue: "/tmp/certs/client-0/client.crt"# Set MinIO Client Credentials, it comes from kes-minio secret- name: MINIO_KMS_KES_KEY_FILEvalue: "/tmp/certs/client-0/client.key"# Set MinIO Default Key- name: MINIO_KMS_KES_KEY_NAMEvalue: "minio-default-key"# Trust the KES Server Certificate, it comes from kes-minio-public secret- name: MINIO_KMS_KES_CAPATHvalue: "/tmp/certs/client-1/client.crt"# Root User- name: MINIO_ROOT_USERvalue: minio# ROOT Password:- name: MINIO_ROOT_PASSWORDvalue: minio123

加密操作

通过创建加密存储桶并配置服务器端加密来执行加密操作:

mc alias set myminio https://minio.tenant-lite.svc.cluster.local:443 minio minio123mc rb myminio/my-bucket --force # remove previous bucket to start freshmc mb myminio/my-bucket # create new bucketmc admin kms key create myminio minio-my-bucket # create keymc encrypt set sse-kms minio-my-bucket myminio/my-bucket # encrypt bucket

结果的验证和测试

通过验证是否可以通过 MinIO 创建和访问密钥,确保您的设置正确:


root@ubuntu:/# mc alias set myminio https://minio.tenant-lite.svc.cluster.local:443 minio minio123Added `myminio` successfully.root@ubuntu:/# mc rb myminio/my-bucket --force # remove previous bucket to start freshmc: <ERROR> Unable to validate target `myminio/my-bucket`. Bucket `my-bucket` does not exist.root@ubuntu:/# mc mb myminio/my-bucket # create new bucketBucket created successfully `myminio/my-bucket`.root@ubuntu:/# mc admin kms key create myminio minio-my-bucket # create keyCreated master key `minio-my-bucket` successfullyroot@ubuntu:/# mc encrypt set sse-kms minio-my-bucket myminio/my-bucket # encrypt bucketAuto encryption configuration has been set successfully for myminio/my-bucketroot@ubuntu:/#

最后的思考

按照概述的步骤操作后,您已在 Kubernetes 集群中成功部署了有状态 KES。通过此配置,您可以管理集群中的加密密钥,从而简化部署并减少对外部 KMS 解决方案的依赖。这可确保您的 AI/ML 工作负载平稳运行,而不会出现依赖于基础架构中这一关键功能的中断。

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

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

相关文章

【2024最新精简版】线程安全/多线程 面试篇

文章目录 一. 线程基础线程和进程什么是进程什么是线程 并发与并行的区别创建线程继承Thread类实现Runable接口实现Callable接口使用线程池 线程状态等待唤醒机制等待方法唤醒方法 二. 线程池线程池作用创建线程池线程池任务调度流程阻塞队列 BlockingQueue线程池拒绝策略核心线…

只有程序员才能看懂的笑话

哈喽&#xff0c;大家好&#xff0c;我是明智 今天又是周五摸鱼日&#xff5e; 咱们不聊技术&#xff0c;看点别的有意思的东西 往期摸鱼记录&#xff1a; 》》》程序员的那些经典段子 》》》写出bug不用怕&#xff0c;世界就是一个巨大的草台班子 【1】二进制 世界上有10种人&…

随机链表的复制 排序链表

随机链表的复制 题目 . - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a; 思路&#xff1a; ①一个结点一个节点去拷贝&#xff0c;当拷贝了第一个节点的时候&#xff0c;把原节点与拷贝节点连接起来&#xff0c;直接到所有的节点拷贝完毕&#xff0c;这样做的目的…

专业技能篇---计算机网络

文章目录 前言计算机网络基础一、网络分层模型 HTTP一、从输入URL到页面显示发生了什么&#xff1f;二、Http的状态码有哪些&#xff1f;三、 HTTP与HTTPS有什么区别&#xff1f;四、URI 和 URL 的区别是什么?五、Cookie和Session有什么区别&#xff1f;六、GET与POST WebSock…

Android自定义View之不得不知道的文件attrs

其中demo_style如下:一般都是放的.9图片&#xff0c;为了方便就放个颜色了 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20190820183209784.png?x-oss-processimage/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLm NzZG4ubmV0L3FxXzQyNzYxMz…

面向服务的架构(Service-Oriented Architecture, SOA)

目录 前言1. SOA的基本概念1.1 定义和特点1.2 核心原则 2. SOA的优势与挑战2.1 优势2.2 挑战 3. SOA的实现技术3.1 Web服务3.2 微服务架构3.3 企业服务总线&#xff08;ESB&#xff09; 4. SOA在现代企业中的应用4.1 金融行业4.2 电子商务4.3 政府和公共服务4.4 医疗健康 结语 …

EE trade:炒伦敦金的注意事项及交易指南

在贵金属市场中&#xff0c;伦敦金因其高流动性和全球认可度&#xff0c;成为广大投资者的首选。然而&#xff0c;在炒伦敦金的过程中&#xff0c;投资者需要注意一些关键点。南华金业小编带您一起来看看。 国际黄金报价 一般国际黄金报价会提供三个价格&#xff1a; 买价(B…

LeetCode 1-两数之和

LeetCode第1题 两数之和 给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出 和为目标值 target 的那 两个 整数&#xff0c;并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是&#xff0c;数组中同一个元素在答案里不能重复出现…

力扣SQL50 各赛事的用户注册率 分组计数 双排序字段

Problem: 1633. 各赛事的用户注册率 &#x1f468;‍&#x1f3eb; 参考题解 Code select contest_id, ROUND(COUNT(user_id) * 100 / (select count(*) from users),2) as percentage from register group by contest_id order by percentage desc, contest_id asc

vue3自动导入---组件库elements-ui,vuetify以及scss样式的自动导入

自动导入 我们在使用第三方组件库和css样式文件时&#xff0c;都需要进行引入&#xff0c;可以在单个组件内单独引用&#xff0c;也可以在全局引入或一次引入所有组件&#xff1b;但是&#xff0c;一般情况下我们都不会全部引入&#xff0c;这会是打包的结果变大&#xff0c;而…

linux挂载硬盘(解决linux不显示硬盘问题)

目录 1.查看系统有几块硬盘2.查看挂载情况3.格式化硬盘4.创建挂载目录用于挂载硬盘5.将硬盘挂载到指定的挂载目录6.随系统自启动挂载查看配置文件&#xff0c;看是否已经把这条命令加入配置 帮同门解决挂载失败问题记录 参考视频&#xff1a;只要6步&#xff01;Linux系统下挂载…

人工智能在影像组学与放射组学中的最新进展|顶刊速递·24-06-22

小罗碎碎念 本期文献速递的主题——人工智能在影像组学中的最新进展。 小罗一直以来的观点&#xff0c;是把大问题分模块拆解——既然我们想做多模态&#xff0c;那么就先了解单模态的研究套路&#xff0c;再去研究不同模态提取的特征如何融合&#xff0c;搞科研的过程也是管理…

获取泛型,泛型擦除,TypeReference 原理分析

说明 author blog.jellyfishmix.com / JellyfishMIX - githubLICENSE GPL-2.0 获取泛型&#xff0c;泛型擦除 下图中示例代码是一个工具类用于生成 csv 文件&#xff0c;需要拿到数据的类型&#xff0c;使用反射感知数据类型的字段&#xff0c;来填充表字段名。可以看到泛型…

miniconda安装教程以及pip换源【Windows版本】

Anaconda包含内容较多&#xff0c;这边采用miniconda进行安装演示。 下载安装包 官网链接&#xff1a;https://docs.anaconda.com/miniconda/ 蓝奏云加速链接&#xff1a;https://wwt.lanzoue.com/i6ts3225vuef 开始安装 配置conda 在Windows开始菜单中&#xff0c;找到刚安…

graalvm jdk和openjdk

下载地址:https://github.com/graalvm/graalvm-ce-builds/releases 官网: https://www.graalvm.org

VBA学习(18):VBA制作任意工作表均可使用的聚光灯

在需要制作聚光的工作簿&#xff0c;按<ALTF11>组合键&#xff0c;打开VBE编辑器。在右侧[工程资源管理器窗格]选中ThisWorkbook模块&#xff0c;将以下代码复制粘贴到该模块的代码窗口。 Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target …

MLP多层感知器:AI人工智能神经网络的基石

MLP 是指多层感知器&#xff08;Multilayer Perceptron&#xff09;&#xff0c;是一种基础人工神经网络模型&#xff08;ANN&#xff0c;Artificial Neural Network&#xff09;。MLP 的核心是通过深度学习从大量数据中学习特征和模式&#xff0c;并训练参数。通过参数与激活函…

3.XSS-DOM型(基础和进阶)

DOM XSS&#xff08;基础&#xff09; 不与后台服务器产生数据交互,通过前端的dom节点形成的XSS漏洞。 进行测试一下&#xff0c;输入111&#xff0c;会显示what do you see 查看元素代码&#xff0c;看到What do you see 根据前端页面语句进行编写弹窗攻击代码 <a hr…

智慧公厕系统厂家的核心技术与光明源应用案例

随着城市化进程的加快和智慧城市建设的推进&#xff0c;智慧公厕系统在提升公共服务质量和用户体验方面发挥了重要作用。智慧公厕系统厂家的核心技术是确保这一系统高效运转和用户满意度的关键。以下将介绍智慧公厕系统厂家的核心技术&#xff0c;并通过光明源的应用案例展示其…

VB验证密码

在文本框中输入密码&#xff0c;“验证密码”按钮检验输入的是否为“123456”。“清空”按钮清空文本框。“结束”按钮关闭窗体。 Public Class Form1Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.ClickDim P$P Trim(TextBox1.Text)If P &…