deployment - Helm : Pass a multiline env variable to deployment

标签 deployment environment-variables yaml kubernetes-helm

我需要将 RSA 私钥作为 ENV var 传递到我的部署文件,但目前无法执行此操作。

containers:
  env:
      - name: MY_PRIVATE_KEY
        value: |+
        {{ .Values.fpm.dot_env.MY_PRIVATE_KEY}}

我尝试过缩进,不缩进,使用 toYaml (这没有错误,但我的环境变量以 |- 开头)...

有什么想法吗?

这是我从该代码中得到的错误:

Error: UPGRADE FAILED: YAML parse error on broker-api/templates/deployment.yaml: error converting YAML to JSON: yaml: line 59: could not find expected ':'

最佳答案

如果您尝试在 Helm 图表的 Kubernetes 工件中嵌入多行字符串,最简单的方法是

  1. 使用 YAML | block scalar form保留换行符;
  2. 在第一列启动 Go 模板 {{ ... }} 宏;和
  3. 使用sprig indent 函数缩进 block 的每一行,包括第一行。

(您经常会看到 |- 修剪最后的换行符;为此,我可以想象想要保留最后的换行符 |+ 或只是简单的 | ;最后两者之间的区别在于是否保留末尾的额外空行。)

containers:
  env:
      - name: MY_PRIVATE_KEY
        value: |+
{{ .Values.fpm.dot_env.MY_PRIVATE_KEY | indent 12 }}

(通常对于实际的 secret ,最好将它们存储在 Kubernetes Secret 对象中。这些值在 Kubernetes API 中以 base64 编码,因此当您在 Helm 中声明 Secret 对象时,您可以使用 ... | b64enc 而不是这个缩进 配方。)

关于deployment - Helm : Pass a multiline env variable to deployment,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60155630/

相关文章:

c++ - getenv() 表示定义的环境变量仅在 Eclipse 中运行时未定义

linux - 在 linux 下以具有用户环境的用户身份启动守护进程

python - 将yaml文件中的 'Created Time'更改为 'Current Time'

.net - 使用Docker部署到Heroku时.Net Core 2.1 App崩溃

dictionary - 如何使用传入的环境字典定义 Ansible playbook 环境

php - Symfony YML + 不要将 ' 添加到包含多个单词的字符串

validation - YAML 中映射键标识符中允许的字符?

tomcat - 使用intellij idea生成的违规类部署grails war

ruby - 如何在我的 VagrantFile 中包含变量?

php - Phar 存档和 stub 文件的使用