docker - 如何为 Kubernetes yaml 中的所有图像获取解析的 sha 摘要?
问题描述
Docker 镜像标签是可变的,因为它们image:latest
都image:1.0
可以指向image@sha256:.....
,但是当版本1.1
发布时,image:latest
存储在注册表中的镜像可以指向具有不同 sha 摘要的镜像。现在拉取带有特定标签的图像并不意味着下次将拉取相同的图像。
如果 Kubernetes YAMl 资源定义按标签(而不是按摘要)引用图像,是否有一种方法可以在部署资源定义之前确定每个图像实际解析为什么 sha 摘要?是否使用kustomize或支持此功能kubectl
?
用例希望在部署到另一个环境之前确定在一个环境中实际部署了什么(我想获取已解析资源定义的哈希值,然后可以使用它来了解是否image:1.0
部署到 PROD 指的是相同image:1.0
的被部署到 UAT)。
是否有任何工具可用于支持此功能?
例如,给定以下 YAML,有没有办法用解析的摘要替换所有图像?
apiVersion: v1
kind: Pod
metadata:
name: example
spec:
containers:
- name: image1
image: image1:1.1
command:
- /bin/sh -c some command
- name: image2
image: image2:2.2
command:
- /bin/sh -c some other command
要得到这样的东西:
apiVersion: v1
kind: Pod
metadata:
name: example
spec:
containers:
- name: image1
image: image1@sha:....
command:
- /bin/sh -c some command
- name: image2
image: image2@sha:....
command:
- /bin/sh -c some other command
我希望能够通过工具执行管道 yaml (可能来自cat
,kustomize
或kubectl ... --dry-run
)之类的操作,然后传递给kubectl apply -f
:
cat mydeployment.yaml | some-tool | kubectl apply -f -
编辑:
其背景是需要能够向审计员/监管机构证明即将部署到一个环境 (PROD) 的内容正是已成功部署到另一个环境 (UAT) 的内容。我想在部署模板中使用普通标签,并在部署到 UAT 时,拍摄模板的快照,并将标签替换为已解析图像的摘要。该快照将是部署的(通过kubectl
或类似方式)。部署到 PROD 时,将使用相同的快照。
解决方案
这个工具完全支持你所需要的......
将名称-标签对引用 (nginx:1.17) 解析为摘要引用 (index.docker.io/library/nginx@sha256:2539d4344...)
Looks 与 Kustomize 甚至 Helm 等模板工具集成得非常好
推荐阅读
- c# - 如何在统一 2d 中创建随机生成器?
- vue.js - 如何在 vuetify 中构建项目?
- php - PHP gettext 翻译没有被拾取
- algorithm - 下面算法的时间复杂度是多少?
- java - 在 java 中创建事件时在 ICAL 日历中获取日历 ID
- javascript - 将字符串传递给事件侦听器函数
- amazon-web-services - Fargate 中的 StartTask V/S RunTask
- java - 为什么当 Comparator.compare 相等时我们需要返回 0
- node.js - 使用 DataDog 的舵图集成 DataDog GKE NESTJS
- c++ - 错误:运算符 [] 不匹配。在将 int 与列表中的 int 进行比较时
,