如何强制部署配置中的图像仅从图像流中提取?

如何强制部署配置中的图像仅从图像流中提取?

我正在使用 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

该引用将被图像流触发器取代。

相关内容