2

有谁知道使用环境变量来引用values.yaml 中的命名空间的方法?

例如,当映射一个秘密时

secret:
    # RabbitMQ password
    V_RABBIT_PASSWORD:
      secretKeyRef:
        name: jx-staging-rabbit //<--- this needs to work for staging and prod
        key: rabbitmq-password

这是 deployment.yaml 中的部分

            - name: {{ $name | quote }}
              valueFrom:
                secretKeyRef:
                  name: {{ $value.secretKeyRef.name | quote }} //<-- trying different combinations here
                  key: {{ $value.secretKeyRef.key | quote }}

尝试:

${NAMESPACE}-{{ $value.secretKeyRef.name | quote }}

{{ template "namespace" . }}-{{ $value.secretKeyRef.name | quote }}

谢谢

4

1 回答 1

1

我想这是您使用 jenkins-x 部署的应用程序的掌舵图。Helm 有一个可以访问的Release.Namespace值。因此,在 deployment.yaml 中,您可以使用{{ .Release.Namespace }}Whilejx-staging也是版本的名称,因此{{ .Release.Name}}这里同样适用。我希望这看起来像:

      valueFrom:
        secretKeyRef:
          name: {{ .Release.Name }}-{{ .Values.rabbitmq.name }}
          key: rabbitmq-password

在你的 requirements.yaml 中{{ .Values.rabbitmq.name }}等于rabbitmq或你称之为 rabbitmq 的地方。(这里有一个示例图表以这种方式为 postgres 执行此操作,它也使用 rabbit,但访问 rabbit 密码的方式不同。)

如果您正确加载了秘密但仍然遇到密码问题,请确保您设置了一个明确的密码值,否则您可能会点击https://github.com/helm/charts/issues/5167

在 values.yaml中无法使用 ,{{ .Release.Name }}但我不确定是否需要在 deployment.yaml 中使用。

(If you really do need access to a function from the values.yaml then you need to have an entry for the string value in the values.yaml and then pass it through the tpl function within the template.)

于 2018-09-17T14:37:36.173 回答