【问题标题】:How to execute shell commands from within a Kubernetes ConfigMap?如何从 Kubernetes ConfigMap 中执行 shell 命令?
【发布时间】:2019-05-09 19:28:18
【问题描述】:

我正在使用 Helm 图表创建应用程序并将其部署到我的 K8s 集群中。

我的一个 pod 需要一个带有 SDK 密钥的配置文件才能正常启动和运行。此 SDK 密钥被视为机密并存储在 AWS Secret Manager 中。我的 Docker 映像中没有包含机密数据。我希望能够在运行时挂载这个配置文件。在这种情况下,ConfigMap 似乎是一个不错的选择,除了在图表安装期间我无法弄清楚如何从 Secrets Manager 获取 SDK 密钥。我的部分 ConfigMap 如下所示:

   data:
      app.conf: |
      [sdkkey] # I want to be able to retrieve sdk from aws secrets manager

我一直在寻找编写 shell 命令以使用 AWS CLI 获取机密的方法,但还没有看到从 ConfigMap 中执行 shell 命令的方法。

有什么想法或替代解决方案吗?

干杯 克

【问题讨论】:

    标签: kubernetes kubernetes-helm aws-secrets-manager


    【解决方案1】:

    tl;dr; 你不能执行ConfigMap,它只是一个静态清单。请改用init container

    ConfigMap 是一个静态清单,可以从 Kubernetes API 中读取,也可以在运行时作为文件或环境变量注入到容器中。无法执行 ConfigMap。

    此外,ConfigMaps 不应该用于机密数据,Kubernetes 有一个名为 Secrets 的特定资源用于机密数据。它可以以与 ConfigMap 类似的方式使用,包括作为卷挂载或作为容器内的环境变量公开。

    根据您的描述,听起来您最好的选择是使用init container 来检索凭据并将它们写入共享emptyDir Volume,该共享emptyDir Volume 与将使用凭据的应用程序一起安装到容器中。

    【讨论】:

    • 感谢您的回复,我正在研究 init 容器,但当我读到 cofigmaps 旨在能够将配置文件注入容器时分心了。
    • 略有不同的问题,因为我使用的是我不能使用 helm 中的模板功能来执行 sh 命令并将输出用作 configmap 的文本吗?
    • 您可以,但问题是凭证的生命周期将与您运行 helm installhelm upgrade 相关联,并且需要您在每台机器上本地安装工具与图表交互。通过从 initContainer 检索凭证,集群将能够通过 AWS 密钥管理器检索新集合来解决凭证更改时的问题
    • 是公开图表吗?如果是这样,也许您可​​以提出请求以获取一种方法来为 initContainer 添加所需的钩子。您还可以查看 pod 生命周期钩子或 helm 预安装钩子
    • 非常感谢所有回复。我决定请图表创建者让我们能够使用 initcontainers。@chaosaffe 感谢您指出 configmap 是静态清单,不能在我的情况下使用
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-15
    • 2017-09-15
    • 2015-01-03
    • 1970-01-01
    • 1970-01-01
    • 2014-04-21
    • 2014-01-22
    相关资源
    最近更新 更多