docker - 如何在 kubernetes 部署 yaml 中执行 bash 字符串操作
问题描述
我正在尝试部署一个 kubernetes 容器,其图像需要一个指向资源的 URL。该资源需要通过 github 身份验证访问,该身份验证包含在集群的机密中。要从这个秘密中获取访问令牌,我必须使用 bash 命令进行一些字符串操作。这是部署 yaml 中的当前容器规范:
- name: <container-name>
image: stoplight/prism:latest
env:
- name: GITHUB_AUTH
valueFrom:
secretKeyRef:
name: githubregistry
key: .dockerconfigjson
args:
- "mock"
- "https://$(echo $GITHUB_AUTH | sed 's/{auths:{docker.pkg.github.com:{auth://g' | sed 's/}}}//g' | base64 --decode | cut -d':' -f2)@raw.githubusercontent.com/<path-to-deployment>.yaml"
- "-h"
- "0.0.0.0"
- "-p"
- "8080"
ports:
- name: http
containerPort: 8080
protocol: TCP
现在这一行:
- "https://$(echo $GITHUB_AUTH | sed 's/{auths:{docker.pkg.github.com:{auth://g' | sed 's/}}}//g' | base64 --decode | cut -d':' -f2)@raw.githubusercontent.com/<path-to-deployment>.yaml"
显然没有评估,因为这是部署 yaml 而不是 bash。
知道如何复制这种行为吗?我想我可以用一个 initcontainer 做点什么,但我想避免过于复杂。
解决方案
行 [1] 未被评估,因为它作为参数发送到 ENTRYPOINT。
您将需要在 shell 上运行命令。在 [2] 上的“在 shell 中运行命令”部分之后,您将需要以下内容:
- name: <container-name>
image: stoplight/prism:latest
env:
- name: GITHUB_AUTH
valueFrom:
secretKeyRef:
name: githubregistry
key: .dockerconfigjson
command: ["/bin/sh"]
args:
- "-c"
- "TOKEN_FETCHED=`https://$(echo $GITHUB_AUTH | sed 's/{auths:{docker.pkg.github.com:{auth://g' | sed 's/}}}//g' | base64 --decode | cut -d':' -f2)@raw.githubusercontent.com/<path-to-deployment>.yaml`"
- "<your-entrypoint-location> mock $TOKEN_FETCHED -h 0.0.0.0 -p 8080"
ports:
- name: http
containerPort: 8080
protocol: TCP
因此,您的最后一种方法不起作用,因为您将 line [1] 作为参数发送到入口点。我建议您将命令的输出(行 [1])实际发送到变量 [3],然后将该变量传递给 ENTRYPOINT。
请记住,您需要将入口点的完整位置放在该部分中。您可以通过检查您正在使用的图像来获得此信息:
docker inspect stoplight/prism:latest
并寻找“CMD”输出。
[1]
- "https://$(echo $GITHUB_AUTH | sed 's/{auths:{docker.pkg.github.com:{auth://g' | sed 's/}}}//g' | base64 --decode | cut -d':' -f2)@raw.githubusercontent.com/<path-to-deployment>.yaml"
[2] https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/
[3] https://www.cyberciti.biz/faq/unix-linux-bsd-appleosx-bash-assign-variable-command-output/
推荐阅读
- slurm - Slurm 不分配资源,一直等待
- c# - 使用 DI 为线程范围缓存昂贵的对象,而不阻塞(异步)
- javascript - 根据复选框打开多个链接的单个按钮
- robotframework - 使用选择文件的机器人框架上传文件未上传文件
- c++ - 如何在makefile中包含tensorflow c++“.so”文件?
- asp.net-web-api - 如何避免将空实体对象传递给 web api 方法
- c# - 在 Visual Studio Professional 中安装 Xamarin
- amp-html - AMP:无法加载 Shadow AMP 脚本
- javascript - 如何通过 Selenium 和 Python 编辑 html 中的元素属性?
- node.js - MongoDB 如何仅将数据返回到特定节点?