如何将共享的配置和敏感数据移至全局配置和掌舵的秘密? 我有以下项目结构: 某个模块1 模板 部署 values.yaml 某个模块2 模板 部署 values.yaml 某个模块3 模板 部署

问题描述 投票:0回答:1
shards: - name: "db1" url: "url1" login: "login1" password: "password1" - name: "db2" url: "url2" login: "login2" password: "password2"

部署。
{{- range $name, $val := .Values.shards }}
env:
  - name: DB_URL
    value: {{ $val.url }}
  - name: DB_LOGIN
    value: {{ $val.login }}
  - name: DB_PASSWORD
    value: {{ $val.password }}
{{- end }}
我有两个任务:

将碎片配置转换为global-config/values.yaml。 将所有敏感数据从global-config/values.yaml(在碎片下)移动到Global-Config/Secrets.yaml中的秘密。 结果,Some-Module1,Some-Module2和Some-Module3应该从全局配置中读取碎片数据(即,循环应该看起来像{{ - rangage $ name,$ val,$ val:= .values.global.global.shards.shards }}),所有敏感数据均应从秘密来源。
这可能吗?如果是,我该如何实现?

这里有几个部分,有些比其他部分更容易。

重复的输出块。

如果您在几个地方重复的输出yaml块相同,则可以将其拆分为namemedtemplate

。 例如,

{{/* env.db generates part of an env: block that sets database-specific parameters. Takes a shard object as a parameter. Unindented, ends with a newline. */}} {{- define "env.db" -}} - name: DB_URL value: {{ .url }} - name: DB_LOGIN value: {{ .login }} - name: DB_PASSWORD value: {{ .password }} {{ end -}} {{- range $name, $val := .Values.shards }} env: {{ include "env.db" $val | indent 2 }} {{- end -}}

kubernetes kubernetes-helm kubernetes-secrets
1个回答
0
投票
library图表

。 这可能就像将

{{ define }}...{{ end }}

块移入现有global-secrets/templates/_helpers.tpl文件一样。 主要图表需要在其Chart.yaml文件中包含对库图表的依赖性,但是他们可以以完全相同的方式调用模板。

注意,如果您在库图中定义了一个函数,则设置像the是从其所在的位置出现的,而不是定义的位置。 因此,将凭据也放在图书馆图表中也无效,需要在每服务图表中定义它。
重复的输入设置。

您可以任意传递许多.Values选项以添加值时添加图表时,并且除图表的

helm install -f
文件外还使用这些文件。 这里可能的设置是您的CD系统可以从秘密商店中提取凭据并将其写出为yaml(或JSON)文件,然后运行
values.yaml
I会避免将这些值放在the topecial

helm upgrade --install mod1 ./some-module1 --namespace mod1 \ -f values-credentials.yaml

顶键

下;仅当您具有多个嵌套图表或设置的多个层次相同的组件中的多个组件中的多个嵌套图表或设置时,这才是有用的。  另请注意(请参阅同一文档链接),依赖关系的设置不会向上传播到主图表:如果凭据在
global:中,并且主要图表依赖于它们,则主图(包括global:

呼叫,以上)将无法看到这些值。

用秘密而不是掌舵价值。 如果可以的话,我会避免使用这样的外部依赖。 在上一节中,我建议使用某种凭据存储并具有自动化生成值的一部分,如果您没有更好可用的东西,则可以global-config/values.yaml

和base64 decode。
HELM确实具有一个可以在群集中找到任意资源的功能。 原则上,您可以获得像
一样的秘密价值
include

您可以重复使用
kubectl get secret

,但是您必须为要摆脱秘密的每个价值的第二行做类似的第二行。 Helm没有一些标准的功能编程工具,例如“ MAP”,这将使更通用的解决方案成为可能。 您还必须容忍不存在秘密的情况,并弄清楚如何在不访问生产秘密的情况下开发和测试图表。 如果秘密在集群中发生变化,则舵图不会重新部署本身,您需要记住手工执行此操作。 (如果您希望部署由Kubernetes资源驱动,请考虑编写自定义操作员,也许在使用

 -Kubebuilder
时,一旦您开始围绕图书馆图表的复杂性,就不会更难GO是一种更具主流语言,包括单位测试框架。)
将秘密作为掌舵值的来源。  如果凭据只是一个秘密,而您没有自动化可以将其撤出,那么掌舵本身的任何内容都不会让您称其为
lookup
的一部分。 您需要如上所述调用
{{- $secret := lookup "v1" "Secret" .Release.Namespace "secret-name" -}}
{{- $password := $secret.data.password | b64dec -}}

重申:

我会将重复的环境块打破到您控制的库图中。
我不会尝试做任何事情以避免重复设置的重复块。

我将使您的部署系统从某个地方获得正确的凭据,并给它们注入一个选项。

我不会试图将设置放入kubernetes秘密。

	
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.