云原生架构与 GitOps 实战
王炜
前腾讯云 CODING 架构师
6217 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 44 讲
云原生架构与 GitOps 实战
15
15
1.0x
00:00/00:00
登录|注册

29|安全提升:如何解决 GitOps 的秘钥存储问题?

你好,我是王炜。
在上节课,我为你介绍了在 GitOps 工作流中需要特别关注的安全问题。其中,由于 Git 仓库是 GitOps 工作流的唯一可信源,同时也包含了 Kubernetes 对象以及机密信息,所以,我们首先需要关注它的安全问题。
在实际的业务场景下,出于安全需要,Git 仓库往往会包含下面这些机密信息。
镜像拉取凭据的 Secret 对象,它可以为集群提供拉取镜像的权限。
外部数据库连接信息。
外部中间件如 MQ 连接信息。
第三方服务的 API KEY,例如云厂商和短信服务商。
在 GitOps 工作流中,这些机密信息都会通过 Kubernetes 对象存放在 Git 仓库,在大部分情况下它们是 Configmap 或 Secret 对象。虽然 Secret 被设计为存储 Kubernetes 的机密信息,但它只是 Base64 编码后的结果,不具备加密性质,这也就意味着机密信息完全是以明文的方式暴露的,这是非常不安全的。所以,我们有必要对这些机密信息进行加密。
这节课,我们就来学习加密 Git 仓库中机密信息的方法,进一步提升 GitOps 的安全性。
在开始之前,你需要在本地的 Kind 集群安装好 ArgoCD,然后克隆示例仓库,并将它推送到你的 Git 仓库中。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文深入探讨了GitOps工作流中的密钥管理问题,并提出了解决方案。作者首先指出了Git仓库中存放的机密信息的安全性问题,包括镜像拉取凭据、外部数据库连接信息、第三方服务的API KEY等。针对这些问题,作者介绍了三种常用的密钥管理方案,重点介绍了Sealed-Secrets的工作原理和安装方法。在示例应用介绍中,作者展示了如何创建一个简单的Deployment工作负载,并介绍了如何使用kubeseal创建加密后的Secret对象。最后,作者指导读者如何将Sealed-Secrets和GitOps工作流结合,通过创建ArgoCD应用并将加密后的Secret对象推送到Git仓库中,实现了密钥的安全存储和部署。整体而言,本文深入浅出地介绍了GitOps工作流中的密钥管理问题及解决方案,对于需要提升GitOps安全性的读者具有一定的参考价值。文章内容详实,适合对GitOps工作流中的密钥管理问题感兴趣的读者深入学习。文章还提供了关于Sealed-Secret的生产建议和总结,以及一个思考题,为读者提供了更多的思考和实践机会。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《云原生架构与 GitOps 实战》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(6)

  • 最新
  • 精选
  • Wang Yifei
    这个方案仍然会生成在kubernetes中生成secret对象,有权限访问secret的人员仍然能得到密码,有更安全的方案么?

    作者回复: 集群应该保护起来,不对外暴露。如果一定要实现不生成 Secret 的方案,那可能需要一套配置中心来处理。

    2023-05-06归属地:北京
    1
  • po
    kubeseal 需要连接到集群中,但是 kubeseal 平常都是开发或者运维在测试环境或者电脑本机,测试环境或者本机连接到生产kubernetes一般不大可能,现在想到的可能就是生产和测试kubernetes都同步一样的RSA,然后提交到Git,感觉这个管理流程上不是很顺畅,

    作者回复: Kubeseal 的使用场景是可以直连 Kubernetes,本质上它需要把 RSA 秘钥保存到集群里,如果不能满足这个条件的话,那么只能按照迁移的模式提前生成好 RSA 秘钥,这可能不利于安全性的提升。

    2023-02-26归属地:上海
    3
    1
  • Sophia-百鑫
    老师好,关于原理解析部分,描述和原理图有一点不一致的地方,具体是第2步:sealed secret controller 生成 RSA key 并保存在kube-system命名空间下的secret对象下。不应该是保存在secret-demo 命名空间下的secret对象下。 请老师确认一下。

    作者回复: RSA key 是存放在 kube-system,业务的 secret 对象和 CRD 是放在业务命名空间下。

    2023-08-18归属地:上海
  • Sophia-百鑫
    老师好,2个问题需求求助您解答: 1.示例中,为了达到预期结果,除了要把 application.yaml中的 repoURL值改成自己的github 地址外。是否也需要把image-pull-secret.yaml 中的 .dockerconfigjson 值也改成自己的github username 和 PAT ? 2. 我完成2个加密文件后,secret-demo 空间的 pod 还是 imagepullbackoff。具体如下内容。 是什么原因导致的或如何排查? ➜ kubernetes-example git:(main) ✗ kubectl get pods -n secret-demo NAME READY STATUS RESTARTS AGE sample-spring-65f7bbf4fd-l86gr 0/1 ImagePullBackOff 0 43h

    作者回复: 是的,秘钥也需要换成自己的。你可以用 kubectl describe pod xx 命令来查看拉取镜像的具体日志,一般是凭据错误或者镜像不存在。

    2023-08-17归属地:上海
    2
  • 无名无姓
    安全性问题特别重要

    作者回复: 是的,在 GitOps 中明文存储秘钥是不可取的。

    2023-02-14归属地:北京
  • 黑鹰
    在云原生环境下,数据库访问凭证动态定期轮换也很重要‼️Sealed-Secret 好像不支持该特性,Vault有比较好的支持!

    作者回复: Vault 是一款老牌的秘钥管理工具了,ArgoCD 可以结合 Vault 插件来使用。

    2023-02-13归属地:北京
收起评论
显示
设置
留言
6
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部