我正在使用 OpenShift 4.11。我已经配置了一个 ImageStream,如下所示:
kind: ImageStream
apiVersion: image.openshift.io/v1
metadata:
name: my-image
spec:
lookupPolicy:
local: true
tags:
- name: latest
annotations: null
from:
kind: DockerImage
name: 'my.repository.local/my-image:latest'
importPolicy:
scheduled: true
referencePolicy:
type: Source
image:
我在DeploymentConfig 容器模板的属性中将此图像引用为“my-image:latest” :
kind: DeploymentConfig
apiVersion: apps.openshift.io/v1
metadata:
name: some-app
spec:
strategy:
type: Rolling
...
triggers:
- type: ConfigChange
- type: ImageTrigger
imageChangeParams:
automatic: true
containerNames:
- some-app
from:
kind: ImageStreamTag
name: my-image:latest
replicas: 2
app: some-app
template:
metadata:
labels:
app: some-app
spec:
containers:
- imagePullPolicy: Always
image: my-image:latest
(省略镜像拉取机密、资源限制等)
不合格的镜像名称是有问题的。如果我忘记先创建镜像流,OpenShift 将尝试从默认注册表下载镜像,在我的情况下,默认注册表是 Docker Hub。Docker Hub 不仅会收到一个公开公司内部镜像名称的 API 调用,而且还有镜像实际上存在的风险,我们可能会运行不打算运行的代码。
有没有办法强制 OpenShift 从图像流中获取 DeploymentConfig 中的图像,或者根本不尝试解析它?
我无法全局禁用对 Docker Hub 的访问(其他项目需要它),但如果我可以按命名空间进行配置,那么也可以。
我尝试将图像名称设置为空(不允许)或来自内部注册表的不存在的图像名称,希望 ImageTrigger 能够替换引用,但这仅在流中更新标签时发生,而不是在标签已存在时发生。
答案1
containerName
由于我使用的容器与 pod 内的容器不同,所以我的图像流触发器无法正常工作。
因此,解决这个问题的最佳方法实际上是引用私人注册表中不存在的图像:
image: my.repository.local/will-be-replaced-by-image-stream-trigger
该引用将被图像流触发器取代。