【问题标题】:Using sensitive environment variables in Kubernetes configMaps在 Kubernetes configMaps 中使用敏感的环境变量
【发布时间】:2020-06-02 11:18:17
【问题描述】:

我知道您可以在 pod 规范中使用 ConfigMap 属性作为环境变量,但是您可以在 configmap 中使用在 pod 规范中声明的环境变量吗?

例如:

我有一个秘密密码,我希望在我的 configmap application.properties 中访问它。秘密看起来是这样的:

apiVersion: v1
data:
  pw: THV3OE9vcXVpYTll==
kind: Secret
metadata:
  name: foo
  namespace: foo-bar
type: Opaque

所以在 pod 规范中,我将秘密引用为 env var。 configMap 将作为规范中的卷安装:

    env:
      - name: PASSWORD
        valueFrom:
          secretKeyRef:
            name: foo
            key: pw
...

然后在我的 configMap 中,我可以像这样引用秘密值:

apiVersion: v1
kind: ConfigMap
metadata:
  name: application.properties
  namespace: foo-bar
data:
  application.properties: /
    secret.password=$(PASSWORD)

我在网上找到的所有内容都只是将 configMap 值用作 env var,并没有提及在 configMap 值中使用 env var。

【问题讨论】:

  • 为什么要将值从您的秘密复制到 configmap?您也可以直接将您的秘密挂载到 pod 中。你能详细说明一下你的用例吗?
  • @anmolagrawal 我希望将敏感值安全地传递到我的配置映射中
  • 在 configmap 中保留敏感信息不是一个好习惯。你总是为此使用秘密。抱歉,我还是不明白用例。
  • @anmolagrawal 好的,不知道怎样才能更清楚,但感谢您的评论。

标签: kubernetes openshift amazon-eks configmap


【解决方案1】:

目前它不是 Kubernetes 功能。

有一个已关闭的问题要求使用此功能,这是一个颇具争议的话题,因为讨论在关闭数月后仍在进行: Reference Secrets from ConfigMap #79224

引用结束评论:

最佳做法是不要在 envvars 中使用秘密值,仅作为挂载文件使用。如果您想将所有配置值保存在一个对象中,您可以将所有值放在一个秘密对象中并以这种方式引用它们。 通过 configmaps 引用机密是一个非目标......它会混淆安装或注入配置映射的东西是否正在安装机密值。

我建议您阅读整个线程以了解他的原因,并可能为您的环境找到另一种方法来获取此变量。


“好的,但这是现实生活,我需要完成这项工作”

那么我推荐你这个解决方法:

Import Data to Config Map from Kubernetes Secret

它使用容器入口点中的外壳进行替换。

【讨论】:

  • 感谢您,感谢“现实生活”小节。不幸的是,我们正在使用的代码是硬编码的,可以从 app.properties 文件中查找秘密值,所以很遗憾我们需要这种解决方法。
猜你喜欢
  • 2019-05-08
  • 2018-09-24
  • 1970-01-01
  • 1970-01-01
  • 2016-03-29
  • 2015-08-10
  • 2023-01-22
  • 2021-02-26
  • 2017-10-14
相关资源
最近更新 更多