Helm 实践之配置管理
这是 Helm 系列的第二篇,今天来说说与它相关的应用配置管理的实践。
说在前面
在我们开发项目的管理中,应用配置的管理一直是个问题,我曾经也讨论过挺多次(谈谈项目的配置管理 应用配置管理实践 以及 应用配置的几个原则),而在 Helm 中,也面临着这样的问题。
在实践中,我们的应用配置一般是放在文件中的,也有配置可能是放在数据库中的,在团队比较小的时候可以用文件存储,而团队大了之后可以放在专门的配置数据库,甚至配置中心去。
显然,对于现在的我们,将配置放在文件中,然后放在 Git 中管理是比较方便的方式。假如你也采用了这种方式的,为了安全,一般推荐采用与代码分开存放或者加密配置的方式,但即使是分开存放,也最好进行加密,只有与项目相关的重要人员才拥有密钥。
这里插一句,还记得前阵子华住数据库泄露的事件?就是因为没有分开存放代码与配置,更没有进行加密存储,类似的案例还是不少的,都逼得 Github 开发密钥检测功能了。
因此,假如你是一个项目的负责人,最好一开始就做好准备,不要等到项目的配置被泄露才想到要加密配置:避免出问题的最好的方式就是一开始就做好(破窗理论)。这点对于项目的单元测试代码以及 lint 规则也是适用的。
helm-secrets & sops
回到正题,对于 Helm 来说,有个插件是比较好用 helm-secrets,对于使用文件管理应用配置的可以考虑,因为它提供的加密功能挺好用,而且安全性也有的保证,在 Helm 中,我们可以将 secrets values 加密后放在 Git 项目中,至于是不是分开存放,由你自由选择了。
另外,需要了解下,这个插件依赖的是 sops 这个工具,helm-secrets 只是帮我们做了封装(是的,也就是说它可以支持 Helm 之外的应用配置加密管理)。
实际上,它只是一个编辑器,或者说配置文件加密管理工具也行,只是目前它只支持 AWS KMS, GCP KMS, Azure Key Vault 等外国云服务商的服务,于是我们只能选的用它支持的 PGP 加密。
例子
下面,我们来简单做一个例子,来体会下它的便捷:
安装
下面以 Mac 环境为例,其它环境对不住了,靠你们自己了 :P。
1 | # 安装依赖 |
1 | # 安装插件 |
GPG key
然后需要生成一个可用的 GPG key,已有的话可以跳过,建议不要用私人的,毕竟之后你部署的时候也需要用到。具体生成 key 的步骤可以看 Github 的教程 Generating a new GPG key。
然后提取下 Finger print,以我的 GPG key 为例:
1 | $ gpg --list-keys xuzhipei@gmail.com |
21ADFF583EF7B147FD54FD9D84DF33FBB8950468
便是 Finger print。
准备 .sops.yaml
在 Git repo 的根目录下,创建 .sops.yaml 这个文件:
1 |
|
其中的 Finger print 替换为你自己的。
加密文件
创建一个 secrets.yaml 文件,在其中添加一些需要加密的配置,然后
1 | helm secects enc secrets.yaml |
然后,你就会发现这个文件的内容被加密过了。
假如需要编辑的话:
1 | helm secects edit secrets.yaml |
与 Git diff 结合使用
在我们修改了密钥文件之后,每次提交实际的 comiit diff 是一堆密文,显然不方便查看变动,更不适合代码审阅,于是可以这么做:
$ git config diff.sopsdiffer.textconv "sops -d"
然后在项目的根目录创建一个 .gitattributes 文件,内容为:
*.yaml diff=sopsdiffer
之后用 git diff
查看的时候,就能看到明文对比了。
部署时自动解密
helm-secrets 为了能让你在部署到 k8s 的时候,能够读自动读到明文,对 Helm 进行了简单的封装:把 helm 替换为 helm-wrapper 即可。
于是,这样的部署代码:
1 | helm secrets dec secrets.yaml |
就可以改为简单的:
1 | helm-wrapper install -n test -f secrets.yaml |
好了,例子就到这,其它更多功能需要你自己去摸索了,比如 sops 还有更多高级功能,又比如你用的正好是那几个云服务商之一,你就可以探索下如何用他们的工具来用了。
P.S.
最近辞职了,也换了城市,开始学一些全新的知识,体会到了跳出舒适区的感觉,毕竟这种机会不是经常有。
我们经常说做事或创业应该从 MVP 做起,其实学习也类似,从一个非常简单的例子开始学,当第一次尝到甜头之后就会给之后你的进一步学习带来不少的信心,这也是今天这篇文章的思路,我尝试用简单的例子来告诉你这个工具是多么好用,而之后的内容就需要你自己去摸索了,毕竟不能抢走你学习与探索的乐趣。
首发于 Github issues: https://github.com/xizhibei/blog/issues/90 ,欢迎 Star 以及 Watch
本文采用 署名-非商业性使用-相同方式共享(BY-NC-SA)进行许可作者:习之北 (@xizhibei)
原链接:https://blog.xizhibei.me/zh-cn/2018/10/27/helm-in-practice-config-management/