前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Argo CD系列视频图文版之数据加密

Argo CD系列视频图文版之数据加密

作者头像
LinuxSuRen
发布2022-12-01 09:58:38
3150
发布2022-12-01 09:58:38
举报
文章被收录于专栏:JenkinsJenkins

配套视频

往期回顾

开篇

上节课,我们发现配置清单仓库中secret默认采用base64加密,非常容易逆向解密。本期视频,我们来解决部署清单仓库中secret数据加密的问题。

ArgoCD官方推荐了差不多十种解决方案,同时也提醒说,没有一种是可以解决所有问题的。既然都不完美,那咱们就瘸子里挑将军,找个相对好的研究研究。

sealed secrets 介绍

sealed secretsbitnami 实验室推出的Secrets单向加密工具。它被设计为两部分,一部分作为kubernetes资源控制器,运行在kubernetes集群中,该控制器始终监控 SealedSecret这个资源类型,并将它解密为Kubernetes可以识别的Secret;另外一部分被设计为客户端工具,由用户操作将Secret类型加密为SealedSecret类型。

  • 部署 sealed secret controller, 默认部署在 kube-system namespace 下;
  • 部署时会检查 kube-system namespace 下有没有相应的用于加解密的秘钥对。如果没有,会自动创建。
  • 用户可以通过 kubeseal 命令,把普通的 secret.yaml 配置清单,加密为 SealSecret 类型的资源清单。
  • 部署 SealedSecret 类型的资源清单到集群中
  • 当 sealed secret container 发现 SealedSecret CRD 时,会自动将其解密为 k8s 集群可识别的 Secret

安装 sealed secrets

1. 安装控制器端

代码语言:javascript
复制
$ kubectl apply -f https://github.com/bitnami-labs/sealed-secrets/releases/download/v0.16.0/controller.yaml

默认会在 kube-system 命名空间下创建 sealed-secrets-controller 控制器,当控制器启动时,会自动检查当前命名空间下是否有存在解密 SealedSecrets 的私钥对;如果没有则自动创建,同时把公钥打印在控制器的日志中。

2. 安装客户端工具

代码语言:javascript
复制
# Mac OSX
brew install kubeseal

# Linux
wget https://github.com/bitnami-labs/sealed-secrets/releases/download/v0.10.0/kubeseal-linux-amd64 -O kubeseal

3. 加密 secret

虽然我们可以从 sealed-secrets-controller 的日志中获取自动生成的公钥信息,但复制时经常会出现格式错误。可以通过如下命令,在服务器端获取公钥信息,再通过 lrzsz 等工具拷贝到本地;

代码语言:javascript
复制
# kubeseal 自动连接 k8s 集群获取公钥
kubeseal --fetch-cert > public-cert.pem

通过如下命令讲Secret类型加密为 SealedSecret 类型。

代码语言:javascript
复制
# 可以写到 Makefile 中供快捷使用

kubeseal --format=yaml --cert .public-cert.pem < secret.yaml > secret-sealed.yaml

此时,Secret类型的配置清单就不需要啦,直接把SealedSecret类型的配置清单提交到仓库中,ArgoCD将其应用到kubernates中,最终由 sealed-secrets-controller 控制器把配置解密为 Secret类型的资源。

Secret类型的配置清单已经不需要啦,但不建议删除。因为 sealed secrets想要解密SealedSerects类型的文件,所需的私钥还在kubernates集群中,保密程度更高,不方便共享给开发团队。建议使用如下方式解决:

  1. 添加secret文件到 .gitignore中,防止误提交;
  2. public-cert.pem公钥非常重要,务必谨慎保存。

私钥公钥存储

代码语言:javascript
复制
# 导出私钥并保存到安全位置
kubectl get secret -n kube-system -l sealedsecrets.bitnami.com/sealed-secrets-key -o yaml >master.key

# 保存公钥并保存到安全位置
kubeseal --fetch-cert > public-cert.pem

当集群从灾难中恢复时,可以导入私钥,并重新创建 sealed-secrets-controller控制器。

代码语言:javascript
复制
kubectl apply -f master.key
kubectl delete pod -n kube-system -l name=sealed-secrets-controller

结束语

到这里,我们总算对Secret有个相对不错的处理方案,不过如各位所见,仍然有其瑕疵。官方还推荐了其他方案,感兴趣的同学可以自行研究研究,欢迎大家把研究结果共享,让更多的人少走弯路。

下期视频,咱们来聊聊多集群管理的问题。

参考文档

sealed secrets[1]

参考资料

[1]

sealed secrets: https://aws.amazon.com/cn/blogs/china/managing-secrets-deployment-in-kubernetes-using-sealed-secrets/?nc1=b_nrp

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-09-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Jenkins 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 配套视频
  • 往期回顾
  • 开篇
  • sealed secrets 介绍
  • 安装 sealed secrets
    • 1. 安装控制器端
      • 2. 安装客户端工具
      • 3. 加密 secret
      • 私钥公钥存储
      • 结束语
      • 参考文档
        • 参考资料
        相关产品与服务
        容器服务
        腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档