Helm 总是生成新的秘密值,尽管它们已经存在于查找中

问题描述 投票:0回答:1

我试图弄清楚为什么 Helm 升级在配置为不创建新的秘密 cookie 时总是创建新的秘密 cookie,如果具有该值的秘密已存在于部署中。

我在库图表中定义了以下模板函数:

{{ include "my-lib.messaging.secrets" ( dict "global" .Values.global "messagingService" .Values "release" .Release ) }}
*/}}
{{- define "my-lib.messaging.secrets" -}}
{{- $secretObj := (lookup "v1" "Secret" .release.Namespace "messaging-secret") | default dict }}
{{- if .global.config.enabled }}
  {{- $secretObj := (lookup "v1" "Secret" .release.Namespace "global-secret") | default dict }}
{{- end }}
{{- $secretData := (get $secretObj "data") | default dict }}
{{- $cookie := (get $secretData "messaging.cookie") | default (randAlphaNum 32) }}
messaging.cookie: "{{ $cookie }}"
{{- end }}

这里的期望是,如果

messaging-secret
(或
global-secret
)存在并且包含
messaging.cookie
,则不会改变,将使用相同的值,否则将生成新的值。

当我安装图表时,我得到以下内容

global-secret

apiVersion: v1
data:
  messaging.cookie: cXJSS2N6TDB2VGF4bzR4YWhEVzVuVXB2dzZMbWFzSWg=
kind: Secret
metadata:
  annotations:
    meta.helm.sh/release-name: test
    meta.helm.sh/release-namespace: test
  creationTimestamp: "2023-08-07T18:43:33Z"
  labels:
    app.kubernetes.io/managed-by: Helm
  name: global-secret
  namespace: test
  resourceVersion: "18494964"
  uid: 3701e400-697c-48de-8eb9-c695ae624542
type: Opaque

但是当我进行 Helm 升级时,会生成新值,尽管它不应该:

apiVersion: v1
data:
  messaging.cookie: Mk5DbThHRDRlSGRVNG1XQWZyTGJVSENtZWlWRGhvR3Y=
kind: Secret
metadata:
  annotations:
    meta.helm.sh/release-name: test
    meta.helm.sh/release-namespace: test
  creationTimestamp: "2023-08-07T18:43:33Z"
  labels:
    app.kubernetes.io/managed-by: Helm
  name: global-secret
  namespace: test
  resourceVersion: "18495726"
  uid: 3701e400-697c-48de-8eb9-c695ae624542
type: Opaque

Helm 值包含:

global:
  config:
    enabled: true

并且

global-secret.yaml
模板包含以下内容:

apiVersion: v1
kind: Secret
metadata:
  name: global-secret
stringData:
  {{- include "my-lib.messaging.secrets" (dict "global" .Values.global "messagingService" .Values.messagingService "release" .Release) | indent 2 }}

我假设

lookup
将正确识别数据并使用它,而不是生成新的随机值。有人可以指出问题出在哪里吗?

kubernetes kubernetes-helm helm3
1个回答
0
投票

在尝试了多种选择使其发挥作用后,这是一个愚蠢的错误:D 由于第二个赋值中存在

secretObj
,因此
global-secret
变量根本没有被
:
覆盖。因此,Helm 无法使用新值,并且它为 null。

解决方案,不要声明相同的变量,使用现有的,意思是:

{{- $secretObj := (lookup "v1" "Secret" .release.Namespace "messaging-secret") | default dict }}
{{- if .global.config.enabled }}
  {{- $secretObj := (lookup "v1" "Secret" .release.Namespace "global-secret") | default dict }}
{{- end }}

应该是:

{{- $secretObj := (lookup "v1" "Secret" .release.Namespace "messaging-secret") | default dict }}
{{- if .global.config.enabled }}
  {{- $secretObj = (lookup "v1" "Secret" .release.Namespace "global-secret") | default dict }}
{{- end }}

最终,非常简单的修复!

© www.soinside.com 2019 - 2024. All rights reserved.