首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Helm将secretKeyRef连接到一个环境变量中

Helm将secretKeyRef连接到一个环境变量中
EN

Stack Overflow用户
提问于 2021-11-18 11:25:37
回答 2查看 95关注 0票数 1

我正在使用helm 3,并希望将3个secretRefKeys连接到单个Env Var值中。

这是我的cronjob.yaml文件:

代码语言:javascript
运行
复制
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命令得到的内容实际上就是我在值中写入的内容:

代码语言:javascript
运行
复制
            - name: URL_FULL
              value: $(PREFIX)$(ENV)$(SUFFIX)

提前谢谢。

EN

回答 2

Stack Overflow用户

发布于 2021-11-18 14:06:11

没错;当您向Kubernetes API提交pod规范时,它将包含该文字字符串,其中包括$(...)引用(以及pod块,而不是secrets的值)。

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

代码语言:javascript
运行
复制
kubectl exec deployment/my-deployment -it -- \
  sh -c 'echo $URL_FULL'

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

票数 1
EN

Stack Overflow用户

发布于 2021-11-18 15:01:48

正如文档所述,helm template不会解析这些环境变量,它只会呈现模板。

您将需要部署图表。我举了一个简单的例子:

代码语言:javascript
运行
复制
apiVersion: v1
kind: Pod
metadata:
  name: nginx
  labels:
    app: nginx
spec:

  volumes:
    - name: shared-volume
      emptyDir: {}
  initContainers:
    - name: busybox
      image: busybox
      volumeMounts:
        - name: shared-volume
          mountPath: /nginx-data
      command: ["/bin/sh"]
      # sleep so that we could exec into it
      args: ["-c", "sleep 6000"]

      env:
        - name: PROP_ONE
          valueFrom:
            secretKeyRef:
              key: one
              name: secret-sample
        - name: PROP_TWO
          valueFrom:
            secretKeyRef:
              key: two
              name: secret-sample
        - name: PROP_THREE
          value: $(PROP_ONE)
  containers:
    - name: nginx
      image: nginx
      volumeMounts:
        - name: shared-volume
          mountPath: /usr/share/nginx/html

然后,您可以执行以下命令:

代码语言:javascript
运行
复制
helm install foo  .

然后发出helm ls以查看它是否在集群中。

即使您现在执行以下操作:

代码语言:javascript
运行
复制
kubectl describe pod nginx | grep PROP_THREE

您将看到引用是:

代码语言:javascript
运行
复制
PROP_THREE:  $(PROP_ONE)

如果您确实想要查看env变量,则必须执行容器(我不知道还有其他方法):

代码语言:javascript
运行
复制
kubectl exec -it nginx -c busybox -- /bin/sh

然后:

代码语言:javascript
运行
复制
   env | grep PROP_THREE
   PROP_THREE=bar

来查看它是否被正确解析。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70019030

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档