如何从Kubernetes ConfigMap中执行shell命令?

3
我正在使用Helm charts创建和部署应用程序到我的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命令的方法。

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

谢谢 K

1个回答

1
< p > < em > tl;dr; 你不能执行 ConfigMap,它只是一个静态清单。请使用 init container

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

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

根据您的描述,最好的选择是使用 init container 来检索凭据并将其写入共享的 emptyDir Volume 中,该卷挂载到将使用凭据的应用程序容器中。

谢谢回复,我正在研究初始化容器,但当我读到配置映射可以将配置文件注入到容器中时,我分心了。 - Karthik Balasubramanian
稍有不同的问题,因为我正在使用Helm,我能否不使用Helm的模板功能来执行sh命令,并将输出用作configmap的文本? - Karthik Balasubramanian
你可以这么做,但问题在于凭证的生命周期将绑定到你运行helm installhelm upgrade,并且需要在每台与图表交互的机器上本地安装工具。 通过从initContainer中检索凭据,集群就能够解决问题,当凭据发生更改时,通过AWS secret manager获取新的一组。 - chaosaffe
1
这是一个公共图表吗?如果是的话,也许您可以提出请求,以获得添加所需挂钩的initContainer的方法。您还可以查看Pod生命周期挂钩或Helm预安装挂钩。 - Ryan Dawson
1
非常感谢所有的回复。我已经决定向图表创建者提出请求,让我们能够使用initcontainers。@chaosaffe感谢您指出configmap是静态清单,不能在我的情况下使用。 - Karthik Balasubramanian
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接