ruby - kubernetes将文件保密到环境变量

标签 ruby bash kubernetes

更新:Kubernetes现在支持直接将 secret 添加到环境变量中。请参阅github上的广告连播示例

原始帖子:

我一直在使用Kubernetes Secrets创建的文件来存储敏感配置,但我总是最终会像往常一样运行之前,在容器中写一个额外的层或覆盖CMD以使 secret 文件的内容进入环境变量。我想要一个bash脚本来为我执行此操作。我发现一个 ruby 脚本执行类似的操作,但是我的 ruby 和bash技能还不够完善。这是https://blog.oestrich.org/2015/09/kubernetes-secrets-to-env-file/的ruby脚本

env = {}

Dir["#{ARGV[1]}/*"].each do |file|
  key = file.split("/").last
  key = key.gsub("-", "_").upcase
  env[key] = File.read(file).strip
end

File.open(ARGV[0], "w") do |file|
  env.each do |key, value|
    file.puts(%{export #{key}="#{value}"})
  end
end

使用与上述操作类似的bash脚本,可以将其设为通用,这样很好,以便它检查目录是否存在,如果不存在(例如,在纯Docker环境中),则将假定该环境变量已经通过其他方式设置。

我将如何编写脚本来做到这一点?

最佳答案

我在功能请求中记录了您的用例,以将 secret 公开为环境变量:
https://github.com/kubernetes/kubernetes/issues/4710

这主要是因为引号使Shell变得棘手。以下内容对我而言是交互式工作的,应该在脚本中工作,但是如果将其指定为“sh -c”的参数,则需要附加引号。

(ls -1 secretdir |同时读取var;执行回显导出$ {var} = $(cat secretdir / $ {var});完成;回显yourcommand)| sh-

可能有更优雅的方法可以做到这一点。

关于ruby - kubernetes将文件保密到环境变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33703012/

相关文章:

android - 带有 Rails 的 Twilio 中的 OTP 验证未知关键字错误

python - 为什么perl,ruby使用/dev/urandom

在 rake 命令末尾设置的 Bash 变量

linux - 尝试使 shell 脚本可执行时出错

kubernetes - 如何基于Istio(Kubernetes)中的路径路由多个gRPC服务

ruby - 正则表达式获取括号之间的值

Ruby:字符串到整数数组

bash - 如果另一个程序返回错误则自动运行一个程序

kubernetes - Google Cloud Storage作为Kubernetes Stateful Set的卷

kubernetes - 如何在 Kubernetes 中使两个集群通信