Kubernetes:使用“envFrom”定义依赖于其他环境变量的环境变量

时间:2021-03-29 01:08:14

标签: kubernetes kubernetes-deployment

我有两个 ConfigMap 文件。一个应该是“秘密”值,另一个是常规值,应该导入秘密。

这是示例密钥 ConfigMap

kind: ConfigMap
metadata:
  name: secret-cm
data:
  MY_SEKRET: 'SEKRET'

以及常规的 ConfigMap 文件:

kind: ConfigMap
metadata:
  name: regular-cm
data:
  SOME_CONFIG: 123
  USING_SEKRET: $(MY_SEKRET)

而我的部署如下:

kind: Deployment
spec:
  template:
    spec:
      containers:
        - name: my_container
          envFrom:
            - configMapRef:
                name: secret-cm
            - configMapRef:
                name: regular-cm

我希望我的变量 USING_SEKRET"SEKRET",因为 envFrom 文件被导入的顺序,但它们在 Pod 上只是显示为 "$(MY_SEKRET)"

我也试过直接在 Deployment 中将因变量设置为 env,但结果是同样的问题:

kind: Deployment
...
  env:
    - name: MY_SEKRET
      # Not the expected result because the variable is openly visible but should be hidden
      value: 'SEKRET'

我试图遵循基于 Define an environment dependent variable for a container 的文档指南,但我还没有看到与我想要做的类似的示例。

有没有办法做到这一点?

编辑: 为了解释我在这种结构背后的想法,secret-cm 整个文件将在存储库中加密,因此并非所有对等方都能够看到其内容。 另一方面,我仍然希望能够向所有人展示其变量的使用位置,因此对 regular-cm 的依赖。 这样,授权的对等方可以运行 kubectl 命令,secret-cm 的变量替换将正常工作,但对于其他所有人,该文件是隐藏的。

1 个答案:

答案 0 :(得分:1)

您没有解释为什么要定义两个 configmap(一个从另一个获取值),但我假设您希望 confgimap 中定义的 env 参数名称独立于 pod 中容器使用的参数名称。如果是这种情况,则创建您的 configmap kind: ConfigMap metadata: name: secret-cm data: MY_SEKRET: 'SEKRET'

然后在您的部署中使用 configmap 中的 env 变量

kind: Deployment
spec:
  template:
    spec:
      containers:
        - name: my_container
          env:
            - name: USING_SEKRET
              valueFrom:
                configMapKeyRef:
                  name: secret-cm
                  key: MY_SEKRET 

现在当你访问环境变量 $USING_SEKRET 时,它会显示值为 'SEKRET'

如果您的要求不同,请忽略此回复并提供更多详细信息。

相关问题