如何使用consul-template从Consul KV取值并赋值给环境变量IAM_DB_USER
Consul Template 导出KV为环境变量的可行方案
下面是两种生产环境常用的实现方式:
方案1:生成环境变量文件,启动时加载
这是最通用、兼容性最高的方案,适合绝大多数应用场景:
- 新建consul-template模板文件,命名为
iam_env.ctmpl,内容如下:
IAM_DB_USER={{key "iamdbusername"}} # 后续有其他KV需要导出的话直接在下面加行即可
- 执行渲染命令生成环境变量文件,加
-once参数表示渲染完成后直接退出,不需要常驻进程:
consul-template -template "iam_env.ctmpl:.iam_env" -once
- 启动应用前加载环境变量即可:
- 直接在shell中启动的话执行:
export $(grep -v '^#' .iam_env | xargs) && 你的应用启动命令 - 如果用systemd管理应用服务,直接在.service文件的
[Service]段添加配置:EnvironmentFile=/path/to/.iam_env即可自动加载
- 直接在shell中启动的话执行:
方案2:启动脚本包裹注入,无明文文件落盘
适合对安全性要求高,不希望密钥明文存在磁盘的场景:
- 新建模板文件
start_wrapper.ctmpl,内容如下:
#!/bin/sh export IAM_DB_USER={{key "iamdbusername"}} # 其他环境变量同上添加 exec "$@"
- 渲染生成启动脚本并加执行权限:
consul-template -template "start_wrapper.ctmpl:start_wrapper.sh" -once chmod +x start_wrapper.sh
- 用生成的脚本包裹应用启动命令,环境变量会直接注入到应用进程中:
./start_wrapper.sh 你的应用启动命令
注意事项
- 如果KV存储在consul的特定路径下,模板中的key要写完整路径,比如KV路径为
/app/iam/iamdbusername,则填写{{key "app/iam/iamdbusername"}} - 若consul开启了ACL控制,需要给consul-template所用的token配置对应KV路径的读权限
- 如果你需要KV变更后自动更新环境变量,去掉渲染命令的
-once参数让consul-template常驻,额外加配置触发应用热重载或重启即可(进程默认不会动态更新启动时注入的环境变量)
内容的提问来源于stack exchange,提问作者Amit Kumar Jain
相关产品推荐
相关产品推荐

