kubernetes将文件保密到环境变量

时间:2015-11-13 22:49:57

标签: ruby bash kubernetes

更新:Kubernetes现在支持直接向环境变量添加秘密。请参阅github

上的pod示例

原帖

我一直在使用Kubernetes Secrets创建的文件来存储敏感的配置,但我总是最终在容器中写一个额外的层或覆盖CMD,以便在运行之前将秘密文件的内容放入环境变量中正常。我想要一个bash脚本为我做这个。我找到了一个类似的东西的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环境中),它将假设环境变量已经通过其他方式设置。

我如何编写脚本来执行此操作?

1 个答案:

答案 0 :(得分:1)

我在功能请求中注意到您将秘密暴露为环境变量的用例: https://github.com/kubernetes/kubernetes/issues/4710

它主要是引用使得这个棘手的shell。以下内容以交互方式为我工作,并且应该在脚本中工作,但如果指定为" sh -c"的参数,则需要额外的引用。

(ls -1 secretdir | while read var; do echo export $ {var} = $(cat secretdir / $ {var}); done; echo yourcommand)| sh -

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