连接 configMap 和 Secret 中的值

Alp*_*esh 3 kubernetes kubernetes-helm kubernetes-secrets configmap

我有一个 configMap 文件:

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

Run Code Online (Sandbox Code Playgroud)

和一个秘密文件:

aapiVersion: v1
kind: Secret
type: Opaque
metadata:
  labels:
    owner: testdb
  name: testdb-secret
  namespace: test
data:
  user: dGVzdA==
  pwd: dGVzdA==
Run Code Online (Sandbox Code Playgroud)

我想构建一个环境变量,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;"
Run Code Online (Sandbox Code Playgroud)

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


笔记

由于我无权访问图像,因此CONNECTION_STRING我必须以这种方式构建它。这些配置映射和秘密文件也将保持这样。


Dav*_*aze 11

Kubernetes 可以根据其他环境变量设置环境变量。这是 Kubernetes Pod 的核心功能,不依赖于 Helm 的任何内容。

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

env:
  - name: TESTDB_HOST
    valueFrom:
      configMapKeyRef:
        name: testdb-configmap # {{ include "chart.name" . }}
        key: host
  - name: TESTDB_PORT
    valueFrom:
      configMapKeyRef:
        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;
Run Code Online (Sandbox Code Playgroud)