OpenShift 4 - 配置OpenShift可使用的外部Image Registry和Mirror Registry

本文详细介绍了在OpenShift 4.x环境中配置Image Registry和Mirror Image Registry的方法,包括如何设置内部和外部镜像仓库,以及如何利用镜像仓库镜像加速远端镜像的访问。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

OpenShift 4.x HOL教程汇总

概念

OpenShift 可访问的 Image Registy 包括其自身内部的 Image Registry 和其外部的 Image Registry,而外部的 Image Registry 又可分为运行在远端的 Image Registry,以及为了加速远端访问而运行在本地(或近地的)Mirror Image Registry。Mirror Image Registry 除了可以用来加速访问外部 Image 外,我们在离线安装 OpenShift 的时候也会用到它。在这里插入图片描述

配置 OpenShift 的 Image Registry

OpenShift 把它能访问到的 Image Registry 的配置保存在 image.config.openshift.io/cluster 对象中。当 OpenShift 的 Machine Config Operator(MCO)发现 image.config.openshift.io 配置变化后,会将最新配置发送到所有 Node 并写入 /etc/containers/registries.conf 文件,然后重启对应的 Node 使配置生效。
在这里插入图片描述

OpenShift 使用一个名为 cluster 的 image.config.openshift.io 对象管理其能访问到的 Image Registry 目标和策略。

$ oc get image.config.openshift.io
NAME      AGE
cluster   12d

查看 OpenShift 可以访问到 Registry 的配置,其中 External Registry Hostnames 和 Internal Registry Hostname 定义了外部和内部Registry。

$ oc describe image.config.openshift.io cluster
Name:         cluster
Namespace:
Labels:       <none>
Annotations:  release.openshift.io/create-only: true
API Version:  config.openshift.io/v1
Kind:         Image
Metadata:
  Creation Timestamp:  2020-07-18T09:54:27Z
  Generation:          1
  Resource Version:    25273
  Self Link:           /apis/config.openshift.io/v1/images/cluster
  UID:                 c94ebed4-684a-4c98-86aa-658a8685ef79
Spec:
Status:
  External Registry Hostnames:
    default-route-openshift-image-registry.apps.cluster-beijing-959a.beijing-959a.example.opentlc.com
  Internal Registry Hostname:  image-registry.openshift-image-registry.svc:5000
Events:                        <none>

上面只是 Registry 的配置信息,其中 OpenShift 内部的 Registry 是通过以下的 Cluster Operator 运行的。

$ oc get co image-registry
NAME             VERSION   AVAILABLE   PROGRESSING   DEGRADED   SINCE
image-registry   4.5.4     True        False         False      2d2h

如果要修改 OpenShift 可访问的 Registry 目标,可先编辑 image.config.openshift.io/cluster 对象:

$ oc edit image.config.openshift.io/cluster

增加以下 registrySources 部分内容。

spec:
  registrySources:
    insecureRegistries:
    - ocr.example.com
    allowedRegistries:
    - quay.io
    - ocr.example.com

保存后 OpenShift 会自动通过 MCO 将最新的配置同步到各个节点。可以从 Node 的 Events 查看节点的重启过程。
在这里插入图片描述
如果需要查看一个 Node 的 Registry 配置,可先通过 debug 进入该 Node,然后查看自动生成的 /etc/containers/registries.conf(该文件是节点 crio 可以访问的 registry 的配置),确认最新的 Registry 配置已经加进去了。另外,如果使用非完整名称的 Image,crio 会使用由 unqualified-search-registries 定义的 Registry 查找该镜像。

$ oc debug node/<NODE-NAME>
sh-4.2# chroot /host
sh-4.2# cat /etc/containers/registries.conf
unqualified-search-registries = ['registry.access.redhat.com', 'docker.io']
short-name-mode = ""

[[registry]]
  prefix = ""
  location = "ocr.example.com"
  insecure = true

查看自动生成的 /etc/containers/policy.json 文件。注意:由于前面使用了 allowedRegistries 配置,因此在 policy.json 中的 default 为 reject 类型,即缺省所有 registry 都 reject 访问。而对于从 allowedRegistries 中 registry 获得的镜像将使用 insecureAcceptAnything 验签策略,即不进行验签,即使镜像没有签名或签名无效,也会接受该镜像。

# cat /etc/containers/policy.json 
{
  "default": [
    {
      "type": "reject"
    }
  ],
  "transports": {
    "atomic": {
      "ocr.example.com": [
        {
          "type": "insecureAcceptAnything"
        }
      ],
      "quay.io": [
        {
          "type": "insecureAcceptAnything"
        }
      ]
    },
    "docker": {
      "ocr.example.com": [
        {
          "type": "insecureAcceptAnything"
        }
      ],
      "quay.io": [
        {
          "type": "insecureAcceptAnything"
        }
      ],
    "docker-daemon": {
      "": [
        {
          "type": "insecureAcceptAnything"
        }
      ]
    }
  }

配置 OpenShift 的 Mirror Image Registry

在一个受限的网络中(或访问远程 Image Registry 的网速比较慢),可以为 OpenShift 使用的外部 Image Registry 建一个 Mirror,以加速OpenShift 访问远程 Registry 上 Image。Registry Mirror 可以是运行在自己本地的 Docker Distribution、Quay 等提供的 Registry 服务。
在这里插入图片描述
Image Registry Mirror 的配置信息是保存在 OpenShift 集群范围的 ImageDigestMirrorSet 或 ImageTagMirrorSet 对象。当 OpenShift 的 Machine Config Operator(MCO)发现 ImageDigestMirrorSet 或 ImageTagMirrorSet 配置变化后,会将最新配置对送到所有 Node 并写入 /etc/containers/registries.conf 文件,然后重启对应的 Node 使配置生效。

注意:本文只对说明如何将 Mirror Image Registry 的配置加到 OpenShift 中,而部署一套 Mirror Image Registry 可参见《OpenShift 4 - 部署 Mirror Registry》。

  1. 执行命令创建一个 ImageTagMirrorSet 对象(说明:ImageTagMirrorSet 和 ImageDigestMirrorSet 的区别可参见这里)。它为 registry.access.redhat.com/ubi8/ubi-minimal 镜像提供了 2 个 Mirror,一个是 example.io/example/ubi-minimal,另一个是 example.com/example/ubi-minimal,OpenShift 会按照顺序访问 Mirror 以获取 Image。
$ oc apply -f - << EOF
apiVersion: config.openshift.io/v1
kind: ImageTagMirrorSet
metadata:
  name: ubi8-mirror
spec:
  imageTagMirrors:
  - mirrors:
    - example.io/example/ubi-minimal
    - example.com/example/ubi-minimal
    source: registry.access.redhat.com/ubi8/ubi-minimal
EOF
  1. 查看 Node 的状态,确认 Node 会重启以使得配置生效。
$ oc get node
NAME                                              STATUS                       ROLES    AGE  VERSION
ip-10-0-131-190.ap-southeast-1.compute.internal   Ready                        master   13d   v1.18.3+012b3ec
ip-10-0-141-25.ap-southeast-1.compute.internal    Readyy,SchedulingDisabled    worker   13d   v1.18.3+012b3ec
ip-10-0-165-133.ap-southeast-1.compute.internal   Ready                        master   13d   v1.18.3+012b3ec
ip-10-0-174-85.ap-southeast-1.compute.internal    Ready                        worker   13d   v1.18.3+012b3ec
ip-10-0-216-155.ap-southeast-1.compute.internal   Ready                        master   13d   v1.18.3+012b3ec
  1. 确认配置已经更新,有2个 registry.mirror 的配置。
$ oc debug node <NODE-NAME>
sh-4.2# chroot /host
sh-4.4# cat /etc/containers/registries.conf
unqualified-search-registries = ["registry.access.redhat.com", "docker.io"]
short-name-mode = ""

[[registry]]
  prefix = ""
  location = "registry.access.redhat.com/ubi8/ubi-minimal"

  [[registry.mirror]]
    location = "example.com/example/ubi-minimal"
    pull-from-mirror = "tag-only"

  [[registry.mirror]]
    location = "example.io/example/ubi-minimal"
    pull-from-mirror = "tag-only"

[[registry]]
  prefix = ""
  location = "ocr.example.com"
  insecure = true
  1. 在 Node 内部发起对远程镜像 registry.access.redhat.com/ubi8/ubi-minimal 的访问,通过日志确认系统是从 Mirror 中获得该 Image 的。
sh-4.2# podman pull --log-level=debug registry.access.redhat.com/ubi8/ubi-minimal

参考

  1. https://computingforgeeks.com/how-to-setup-red-hat-quay-registry-on-centos-rhel/
  2. https://access.redhat.com/documentation/zh-cn/openshift_container_platform/4.7/html-single/images/index#installation-restricted-network-samples_samples-operator-alt-registry
  3. https://access.redhat.com/documentation/zh-cn/openshift_container_platform/4.7/html-single/images/index#images-configuration-parameters_image-configuration
  4. https://computingforgeeks.com/allow-insecure-registries-in-openshift-okd-4-cluster/
  5. https://rhthsa.github.io/openshift-demo/build-with-oc.html
  6. https://docs.openshift.com/container-platform/4.17/openshift_images/image-configuration.html#images-configuration-registry-mirror_image-configuration
  7. https://docs.openshift.com/container-platform/4.7/post_installation_configuration/preparing-for-users.html#images-configuration-shortname_post-install-preparing-for-users
  8. https://www.redhat.com/sysadmin/manage-container-registries
  9. https://access.redhat.com/solutions/6969479
  10. https://www.redhat.com/en/blog/filtering-external-registry-images-by-signature-in-openshift-4
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值