kubernetes - Helm 将 SecretKeyRef 连接到一个环境变量中

标签 kubernetes kubernetes-helm helm3

我正在使用 helm 3,并且希望将 3 个 SecretRefKey 连接成一个 Env Var 值。

这是我的 cronjob.yaml 文件:

apiVersion: batch/v1
kind: CronJob 
metadata:
  name: my-cronjob
spec:
  schedule: {{ .Values.cron }}
  jobTemplate:
    spec:
      template:
        spec:
          initContainers:
                - name: PREFIX
                  valueFrom:
                    secretKeyRef:
                      name: {{ .Values.secretName }}
                      key: prefix
                - name: ENV
                  valueFrom:
                    secretKeyRef:
                      name: {{ .Values.secretName }}
                      key: env
                - name: SUFFIX
                  valueFrom:
                    secretKeyRef:
                      name: {{ .Values.secretName }}
                      key: suffix
                - name: URL_FULL
                  value: $(PREFIX)$(ENV)$(SUFFIX)
          containers:
           .
           .
           .
           .
           .

我希望 URL_FULL 的值是 prefix env suffix 连接的实际值。

但是我使用 helm template 命令得到的实际上就是我在值中写入的内容:

            - name: URL_FULL
              value: $(PREFIX)$(ENV)$(SUFFIX)

提前致谢。

最佳答案

这是正确的;当您向 Kubernetes API 提交 pod 规范时,它将包含该文字字符串,其中包括 $(...) 引用(以及 secretRef: block ,而不是值)的 secret )。

当 Kubernetes 创建 Pod 并启动容器时,集群本身将填充所有环境变量并进行字符串连接。如果这是一个部署,您可以通过运行来验证这一点

kubectl exec deployment/my-deployment -it -- \
  sh -c 'echo $URL_FULL'

(在 Job 或 CronJob 中,您可能必须检测服务本身才能看到这一点。)

关于kubernetes - Helm 将 SecretKeyRef 连接到一个环境变量中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70019030/

相关文章:

http - gRPC 连接如何在 kubernetes 服务 ClusterIP 上工作

jenkins - 使用 jenkins 更新 kubernetes 部署

php - Helm 图表 Prometheus 无法找到放置在其他命名空间中的目标指标

kubernetes - 传值 Helm 包

kubernetes - Kubernetes 上的 Redis 主/从复制可实现超低延迟

kubernetes - 如何在 helm 图表中引用 kubernetes 的 secret ?

kubernetes - 在 k8s 上运行的 Thingsboard

linux - 运行`Error: could not find tiller`时`helm version`

kubernetes - 将 configmaps 用于 Kubernetes/Helm 的环境变量的优势