连接来自 configMap 和 secret 的值

Concating values from configMap and secret

我有一个 configMap 文件:

apiVersion: v1
kind: ConfigMap
metadata:
  labels:
    owner: testdb
  name: testdb-configmap 
data:
  host: postgres
  port: "5432" 

和一个秘密文件:

aapiVersion: v1
kind: Secret
type: Opaque
metadata:
  labels:
    owner: testdb
  name: testdb-secret
  namespace: test
data:
  user: dGVzdA==
  pwd: dGVzdA==

我想建立一个环境变量CONNECTION_STRING如下:

env:
 - name: CONNECTION_STRING
   value: "Host=<host-from-configmap>;Username=<user-from-secret>;Password=<password-from-secret>;Port=<port-from-configmap>;Pooling=False;"

我想知道这是否可行,如果可行,那么如何?我也看过使用 .tpl(命名模板)但找不到办法。


注意

因为我无法访问需要 CONNECTION_STRING 的图像,所以我必须以这种方式构建它。这些configmap和secret文件也将保持这样。


我不相信你要求的是可能的。

此外,不要使用配置映射来存储这样的信息。最佳做法是使用机密,然后将它们作为文件或 ENV 变量安装到容器中。

我会放弃你的想法,重新评估你想要完成的事情。

Kubernetes 可以 set environment variables based on other environment variables。这是 Kubernetes Pod 的核心功能,不依赖于 Helm 的任何内容。

您的值使用四个组件,两个来自 ConfigMap,两个来自 Secret。您需要将其中的每一个都声明为单独的环境变量,然后声明一个将它们连接在一起的主环境变量。

env:
  - name: TESTDB_HOST
    valueFrom:
      configMapRef:
        name: testdb-configmap # {{ include "chart.name" . }}
        key: host
  - name: TESTDB_PORT
    valueFrom:
      configMapRef:
        name: testdb-configmap
        key: port
  - name: TESTDB_USER
    valueFrom:
      secretKeyRef:
        name: testdb-secret
        key: user
  - name: TESTDB_PASSWORD
    valueFrom:
      secretKeyRef:
        name: testdb-secret
        key: password
  - name: CONNECTION_STRING
    value: Host=$(TESTDB_HOST);Username=$(TESTDB_USER);Password=$(TESTDB_PASSWORD);PORT=$(TESTDB_PORT);Pooling=False;