公司隐私计算的项目准备使用K8S来运行计算的任务和工作调度,隐私计算的源数据放到分布式文件系统中,通过对接Ranger KMS实现透明数据加密(Transparent Data Encryption,缩写TDE). 前面一篇文章(https://blog.csdn.net/lwlfox/article/details/121068645)已经实现了未开启TDE模式,这篇文章将介绍如何从非TDE模式切换到带TDE模式并与K8S 对接。
必读https://blog.csdn.net/lwlfox/article/details/121068645https://blog.csdn.net/lwlfox/article/details/121068645
修改集群配置1. 将下面的文件复制到所有Ozone的节点中,我的环境中有4个节点。路径为: /opt/hadoop/etc/hadoop/core-site.xml 。
配置中的IP+端口,为KMS服务的地址,Ranger KMS的安装文档参考: Apache Ranger KMS 部署文档_偷闲小苑-CSDN博客
hadoop.security.key.provider.path kms://http@10.228.82.21:9292/kms
KMS地址查看
2. 重启管理节点上的所有服务(停止顺序: RECON->S3G->OM-SCM,启动顺序: SCM->OM->S3G->RECON)
#停止 [root@vm10-50-0-80 hadoop]# ozone --daemon stop recon [root@vm10-50-0-80 hadoop]# ozone --daemon stop s3g [root@vm10-50-0-80 hadoop]# ozone --daemon stop om [root@vm10-50-0-80 hadoop]# ozone --daemon stop scm #启动 [root@vm10-50-0-80 hadoop]# ozone --daemon start scm [root@vm10-50-0-80 hadoop]# ozone --daemon stop om [root@vm10-50-0-80 hadoop]# ozone --daemon stop s3g [root@vm10-50-0-80 hadoop]# ozone --daemon stop recon
3. 重启所有3 个DATANODE节点 ,
ozone --daemon stop datanode ozone --daemon start datanode
4. 检查所有3个DATANODE运行正常,在任意Ozone节点运行以下命令
ozone admin datanode list
5. 创建带KMS地址的ozone镜像
#root 登录到Master节点 git clone https://gitee.com/kevinliu_CQ/ozone-1-1-0-csi.git cd ozone-1-1-0-csi/ozone-docker vi core-site.xml #修改配置文件中的IP 和端口 docker build -t ozone-with-kms:1.1.0 -f Dockerfile_with_KMS . docker tag ozone-with-kms:1.1.0 registry.cn-hangzhou.aliyuncs.com/imagesfromgoogle/ozone-with-kms:1.1.0 #tag为自己的镜像仓库 docker push registry.cn-hangzhou.aliyuncs.com/imagesfromgoogle/ozone-with-kms:1.1.0 #将镜像推送到自己的仓库中
6. 更新CSI使用的镜像
#root 登录到Master节点 git clone https://gitee.com/kevinliu_CQ/ozone-1-1-0-csi.git cd ozone-1-1-0-csi/with-tde vi csi-ozone-datanode-daemonset.yaml #将编排中的zone的镜像替换为刚刚构建的镜像 vi csi-ozone-provisioner-deployment.yaml #将编排中的zone的镜像替换为刚刚构建的镜像 kubectl apply -f . # 等待csi-daemontset和csi-provisioner更新完成
7. 创建加密区
#root登录Ozone 的SCM节点,执行以下命令 #其中test_key1为在KMS里面创建的Key ozone sh bucket create -k test_key1 /s3v/encrypt
[root@vm10-50-0-80 hadoop]# ozone sh bucket list /s3v
{
"metadata" : { },
"volumeName" : "s3v",
"name" : "encrypt",
"storageType" : "DISK",
"versioning" : false,
"usedBytes" : 268435486,
"usedNamespace" : 6,
"creationTime" : "2021-10-31T07:53:09.803Z",
"modificationTime" : "2021-10-31T07:53:09.803Z",
"encryptionKeyName" : "test_key1", #加密区使用的KMS Key
"sourceVolume" : null,
"sourceBucket" : null,
"quotaInBytes" : -1,
"quotaInNamespace" : -1
}
8. 向加密区写入数据
[root@vm10-50-0-80 hadoop]#ozone sh key put /s3v/encrypt/ENcryptedKey Readme.md
9. 制作挂载加密区的镜像
#root 登录到Master节点 git clone https://gitee.com/kevinliu_CQ/ozone-1-1-0-csi.git cd ozone-TDE-docker docker build -t ozone-client:1.0.0 . docker tag ozone-client:1.0.0 registry.cn-hangzhou.aliyuncs.com/imagesfromgoogle/ozone-client:1.0.0 #tag为自建的容器仓库 docker push registry.cn-hangzhou.aliyuncs.com/imagesfromgoogle/ozone-client:1.0.0 #推送镜像到自己的仓库
10. 挂载加密区并创建非加密区PVC
#root 登录到Master节点 git clone https://gitee.com/kevinliu_CQ/ozone-1-1-0-csi.git cd pvc-test kubectl apply -f ozone-client-pvc.yaml -f ozone-client-deployment.yaml
11. 登录到zone-client容器中进行加密区与非加密区的文件操作,客户端无感知是否为加密或未加密。/mnt为加密区 /data/为非加密区
[root@vm10-10-0-160 pvc-test]# kubectl exec -it ozone-client-6dc754db6c-cbnt7 bash kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl kubectl exec [POD] -- [COMMAND] instead. [root@ozone-client-6dc754db6c-cbnt7 /]# ls /data KK Key [root@ozone-client-6dc754db6c-cbnt7 /]# ls /mnt KEVIN KK [root@ozone-client-6dc754db6c-cbnt7 /]# df -h /data Filesystem Size Used Avail Use% Mounted on pvc-f8d7e8eb-26ea-44e1-a07f-8cf6cfee4cf1 1.0P 0 1.0P 0% /data [root@ozone-client-6dc754db6c-cbnt7 /]# df -h /mnt Filesystem Size Used Avail Use% Mounted on encrypt 1.0P 0 1.0P 0% /mnt



