kubernetes-helm - 如何在 Helm Chart 中生成 Consul 模板
问题描述
我有一个 Spring Boot 应用程序的 Helm Chart,它获取 Hashicorp Vault 代理注入器注入的数据库凭据。
这是开发环境中生成的部署清单的一个片段。
annotations:
vault.hashicorp.com/agent-inject: "true"
vault.hashicorp.com/role: "app"
vault.hashicorp.com/agent-inject-secret-database.properties: "secret/data/app/dev/database"
vault.hashicorp.com/agent-inject-template-database.properties: |
{{ with secret "secret/data/app/dev/database" }}
spring.datasource.username: {{ .Data.data.username }}
spring.datasource.password: {{ .Data.data.password }}
{{ end }}
为了能够在 中指定秘密的路径和生成的秘密文件的名称values.yaml
,我构建了这个模板:
annotations:
vault.hashicorp.com/agent-inject: "true"
vault.hashicorp.com/role: "{{ .Values.vault.role }}"
{{ print "vault.hashicorp.com/agent-inject-secret-" .Values.vault.secretFileName }}: "{{ .Values.vault.secretPath }}"
{{ print "vault.hashicorp.com/agent-inject-template-" .Values.vault.secretFileName }}: |
{{`
{{ with secret "`}} {{- .Values.vault.secretPath -}} {{`" }}
spring.datasource.username: {{ .Data.data.username }}
spring.datasource.password: {{ .Data.data.password }}
{{ end }}
`}}
它按预期工作,但我认为它不是很优雅。
我也尝试过这种方法:
annotations:
vault.hashicorp.com/agent-inject: "true"
vault.hashicorp.com/role: "{{ .Values.vault.role }}"
{{ print "vault.hashicorp.com/agent-inject-secret-" .Values.vault.secretFileName }}: "{{ .Values.vault.secretPath }}"
{{ print "vault.hashicorp.com/agent-inject-template-" .Values.vault.secretFileName }}: |
{{ print "{{ with secret " .Values.vault.secretPath " }}" }}
{{ print "spring.datasource.username: {{ .Data.data.username }}" }}
{{ print "spring.datasource.password: {{ .Data.data.password }}" }}
{{ print "{{ end }}" }}
我觉得稍微好一点,但我仍然不满意。
所以我的问题是:有更好的方法吗?
解决方案
我在我的掌舵图中使用这种方式
annotations:
vault.hashicorp.com/agent-inject: true
vault.hashicorp.com/role: {{ $.Values.injector.role }}
vault.hashicorp.com/agent-inject-secret-app: kv/k8s-{{ $.Values.environment }}/{{ $.Values.APP_NAME }}
vault.hashicorp.com/agent-inject-template-app: |
{{`{{ with secret "`}} kv/k8s-{{- $.Values.environment -}}/{{ $.Values.APP_NAME }} {{`" }}
{{ range $key, $value := .Data }}
export {{ $key }}={{ $value }}
{{ end }}`}}
推荐阅读
- javascript - 如何从html中的可点击列中获取行数据
- angular - 我应该为两个组件分离相同的实体集合吗?
- ios - 如何将 tabBarItems 设置为不同的颜色?
- c# - ComboBox DisplayMemberPath 包含 LINQ 组名称和内联组元素
- windows - 批处理文件用户使用网络用户的最后一次登录
- ios - UILabel 不会改变它的值
- javascript - 以螺旋形式生成二维数组
- javascript - 在 WebStorm 中通过断言的测试失败
- c++ - 如何通过 CMake 获取 STATIC 库默认值
- java - 使 EJB @Schedule 中的方法只被调用一次