kubernates ConfigMap 和 Secret 遇到的实际问题

2020-07-14 23:23:03 +08:00
 dunhanson

问题

ConfigMap 主要的用法有两种,一种是挂载变成环境变量,第二种是挂载变成目录或者文件

但是实际还有一种情况,无法覆盖到,那就是数据库连接配置,有 N 个项目对应 N 个 pod 。

假如我创建一个 Secret,其中包含线上的数据库连接地址、和账号密码配置。(键值对映射方式)

那么我怎么把对应的配置文件中的数据配置替换成 Secret 中的

PS:可以通过挂载文件的方式覆盖项目配置文件,但是数据库连接配置不能这样子,假如我有 N 个项目,我要修改数据库密码,不可能每个项目对应的 configmap 都去修改一遍这个效率太低了

方案

我想到的方式是假如 dockerfile 中的 CMD 命令是启动 catalina.sh ,那么新建一个 sh 脚本文件,里面包含读取

Secret 环境变量(或者读取挂载文件)中的数据库配置信息然后替换掉对应的项目中的配置,再启动 catalina.sh

PS:pod yaml 文件 containers 中的 command 改成新建的 sh 脚本文件( command 可以覆盖 dockerfile CMD )

思考

不晓得还有没有其他的方式?

3074 次点击
所在节点    Kubernetes
33 条回复
vhwwls
2020-07-15 09:23:30 +08:00
nacos 和 spring cloud config server 之类的项目就是为了解决这种问题存在的。kubernetes 自己提供的方式只是一个设计理念,告诉你可以这么干,是不是最优解还是要自己权衡。
momocraft
2020-07-15 10:09:59 +08:00
为什么一定要用配置文件呢
自己要用就自己解决,sed+exec 也算一种解决
YzSama
2020-07-15 10:21:44 +08:00
搞一个 配置中心? 然后应用去监听配置和自动重启加载配置。
momocraft
2020-07-15 10:46:50 +08:00
可能 cat 出一个长模板再 exec 更省事
37Y37
2020-07-15 11:04:55 +08:00
我们大概是这样的方案,可以参考下:

- 代码中敏感信息加密: https://blog.ops-coffee.cn/s/dpgqiel4wcmgdqh1aeg4gw
- 配置管理利用 etcd+confd,k8s 的 config map 也用到了 etcd,你可以考虑下 confd 这服务,还是很好用的: https://blog.ops-coffee.cn/s/uguvv4jl4yivnztuepdc8a
ypcs03
2020-07-15 12:13:41 +08:00
https://github.com/kubernetes/kubernetes/issues/79224 应该不会 native 支持了
可以试试 init container 预处理
dunhanson
2020-07-15 12:15:54 +08:00
@momocraft 不怎么折腾确实可以用 sed
dunhanson
2020-07-15 12:17:27 +08:00
@YzSama 嗯 ,上面有人提到阿波罗,准备有时间看下的
dunhanson
2020-07-15 12:18:41 +08:00
@37Y37 @ypcs03 好的,谢谢,我了解下
joesonw
2020-07-15 13:14:01 +08:00
用 initContainer 跑脚本注入呗.
dunhanson
2020-07-15 14:20:48 +08:00
@joesonw 对的,这个参数可以用。之前没看到过,专门讲 pod 章节没写到这个参数。
joesonw
2020-07-15 17:37:04 +08:00
@dunhanson 要是不懒的话, 写个 mutation-webhook-controller, 自动注入 initContainer.

或者 https://github.com/dstreamcloud/configmap-map-operator 这我自用的, 合并 config-map, 不嫌弃的话可以用一用, 就是没文档. 不过是用的 operator-framework 写的, 逻辑部分极简, 可以看一看.
dunhanson
2020-07-15 22:52:16 +08:00
@joesonw 🤣现阶段简单用即可

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

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

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

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

© 2021 V2EX