Openshift 复制镜像到另一个镜像仓库

Openshift copy image to another image repository

我有一个带有 buildConfig 的 openshift 部署,如下所示:

apiVersion: v1
kind: BuildConfig
metadata:
  name: '#OKD_COMPONENT_NAME#'
spec:
  output:
    to:
      kind: ImageStreamTag
      name: '#OKD_COMPONENT_NAME#:latest'
  runPolicy: SerialLatestOnly
  source:
    git:
      uri: '#CI_REPOSITORY_URL#'
      ref: '#CI_COMMIT_REF_NAME#'
    type: Git
    contextDir: #OKD_COMPONENT_NAME#
  strategy:
    dockerStrategy:
      buildArgs:
        - name: "CA_HOSTS_LIST"
          value: "get-ca-cert.apps.test.fr:443 get-ca-cert.apps.test.fr:443  get-ca-cert.apps.test.fr:443"
    type: Docker
  triggers:
  - type: ConfigChange
  - imageChange: {}
    type: ImageChange

在构建结束时,openshift 构建映像并将其推送到其内部注册表。

问题是我想将该映像构建复制并推送到 openshift 内部注册表到 AWS ECR。 openshift pods 必须使用 openshift 内部注册表中的图像创建,但我只想将该图像的副本也自动推送到 AWS ECR 中的内部注册表。

有什么办法可以实现吗?

我没有测试过这个,但是 oc image mirror 命令可能适合你的用例,参考 Transferring Images 了解更多详情。该命令可以将注册表中的镜像复制到多个注册表中。例如,它显示了如何将内部图像“image:latest”复制到 docker.ioquay.io.

oc image mirror docker-registry.default.svc.cluster.local/project/image:latest \
   docker.io/project/image:stg \
   quay.io/project/image:prod

对于自动化,您可以通过使用 Configuring Post Commit Build Hooks trigger, or you may need to more complicated build process like Jenkins Pipeline 实现上述复制任务的脚本来实现。