最近用 argocd 部署的时候想到的 k8s 的 secret 问题

125 天前
 zx900930
存放配置文件的 git repo 在开发环境、同步一份到 prod 。
staging 和 prod 用 argocd 连到不同的 git repo 上读取配置。
按照安全标准开发环境是不允许有生产环境的 credentials ,除非进行了加密。

但是众所周知 k8s 默认的 secret 只是 base64 编码,不是加密。
1. 不写的话服务缺少依赖跑不起来,得分别去几个不同的集群手动添加 secret 。
2. 如果上 vault 这种又有点重,引入了新的组件和维护成本。
有啥最佳实践么?
1534 次点击
所在节点    Kubernetes
8 条回复
momo2789
125 天前
我在用 Helm Secrets ,生产测试 secrets 存在 GCP Secret Manager
zx900930
125 天前
@momo2789 有 saas 服务真好,air-gapped 干啥都跟带着脚镣跳舞一样。
我想到是否可以用 git-crypt 这种,在 git 上直接加密 secret 文件,然后 argocd 在 pull 的时候解密,唯一的问题就是这个用来加密的私钥没法定期更新。
oldboy627
125 天前
你可以使用 openssl 加密,然后创建 tls 类型的 secrets ,在 pod 上创建一个 init container 进行 ssl 反向解密并把这个 secrets 以 volume 方式或者注入环境变量方式给 pod 容器。
zx900930
125 天前
@oldboy627 谢谢,这个挺像 bitnami-sealed-secrets 的做法。
客户端加密,然后生产环境的 controller 解密。
我先测试一下这个方案。
zed1018
125 天前
但是集群访问以及资源不都是有访问控制的吗,secret 本身加密与否没有那么重要吧
zx900930
124 天前
@zed1018 这个决定了是否能实现 100%的 IaC 。
要复制或者迁移只需要新起一个集群然后连接这个 git repo ,剩下的活基本就不需要人为介入了。
集群/App 数量多的时候很有用的。
zed1018
124 天前
@zx900930 #6 我也用 IaC ,搞的 flux ,但是我觉得这个是个成本问题,你花了大功夫如果解密方法/私钥在 git repo ,那和不加密没区别,如果不在,那也还是要人工介入这个过程。要是再搞个外部的 manager ,成本就更大了。单纯为了几个 secret 感觉没这么值当。
zx900930
124 天前
@zed1018 解密的私钥在目标集群,30 天自动轮转一次,编写 secret 的时候通过客户端连接 api 刷新私钥。
但是这个方法安全虽然有保障,缺点太明显了,就是太过于麻烦,推行会有很大阻力。

不如在 git 那边单独开个 repo 专门存放 secret ,严格限制接入设备更简单。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1059582

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX