Red Hat Quay v3 镜像仓库原理与实现

5cbf73feeafa83c122ceaa4dc1dc13d7.gif

作者:华龙飞。主要负责 Red Hat 产品与技术栈的培训交付,客户主要涉及金融、通信、汽车、医疗等行业。热爱并研究开源技术,熟悉 RHEL各版本,SuSE Linux各版本,热衷研究云原生与DevOps相关技术。曾负责多家银行数据中心OpenStack平台与VMware平台集成项目,某银行数据中心主机双核异构集成项目,某软件开发中心Linux开放系统集成等。

常用私有容器镜像仓库:

  • Harbor v1/v2:由 VMware 主导开发,并从 CNCF 云原生计算基金会孵化成功。

  • Red Hat Quay v3:由 Red Hat 开源的私有容器镜像仓库,类似于 CoreOS 的 Quay。

  • registry v2:Docker 公司发布的 v2 版本容器镜像仓库镜像,可直接运行提供服务。

  • docker-distribution:由 docker-distribution RPM 软件包提供,systemd 方式运行。

Red Hat 支持的容器镜像仓库:

  • Red Hat Container Registryregistry.access.redhat.com

    • 该仓库为公共镜像仓库,用于托管 Red Hat 产品的镜像,无需身份验证。

    • 但请注意,虽然此容器镜像仓库是公共的,但 Red Hat 的大多数容器镜像规定要求用户拥有激活的 Red Hat 产品订阅,并且他们遵守产品的终端用户协议(EUA)。

    • 只有基于 Red Hat Enterprise Linux Universal Base Images (UBI) 的镜像可从该镜像仓库中自由地重新发布。

  • Red Hat terms-based registryregistry.redhat.io

    • 该仓库为私有镜像仓库,用于托管 Red Hat 产品的镜像,并且需要身份验证。

    • 从该仓库拉取镜像时,需提供 Red Hat Customer Portal 凭证(credential)进行身份验证。

    • 对于共享环境,如 OpenShift 或 CI/CD 管道,可创建 service account 或身份验证令牌(token),以避免暴露个人凭据。

  • Red Hat partner registryregistry.connect.redhat.com

    • 该仓库为私有镜像仓库,用于托管来自认证合作伙伴的第三方产品的镜像。

    • 它还需提供 Red Hat Customer Portal 凭证进行身份验证。

    • 它们可能受制于合伙伙伴的认购或许可。

  • Quay.io

    • Red Hat 还管理 Quay.io 容器镜像仓库,任何人都可以注册一个免费帐户,并发布自己的容器镜像。

    • Red Hat 对任何托管在 Quay.io 上的容器镜像都没有提供保证。

    • 大多数用户使用 Quay.io 作为一个公共镜像仓库,但是组织(organization)也可以购买允许使用 Quay.io 作为私有镜像仓库。

👉 关于 Red Hat 容器镜像仓库的说明可参考 Red Hat Container Registry Authentication[1]

Red Hat 容器镜像安全:

  • Red Hat Container Catalog[2](RHCC)可提供构建 S2I 构建镜像的基础容器镜像,也可直接提供 S2I 构建镜像,Red Hat Container Catalog 通过 https://registry.redhat.io 作为容器镜像拉取与推送的 portal。

  • 该容器镜像仓库中的镜像通过 Container Health Index 进行安全性评估,可根据不同的评估结果选取开发者所需要的镜像,一般选择安全等级为 AB 的镜像,以下以 Go Toolset 镜像为例确定其安全等级:

    aa37366ba4974bea2d319aaba82da494.png
  • 关于 Red Hat 容器镜像安全等级说明[3],如下所示:

    04d276a893181d1d545ce576d27088b2.png
    • Red Hat 安全评级说明文档可参考 Understanding Red Hat security ratings[4]

  • 容器镜像的安全评分与分级可参考 Security Scoring and Grading for Container Images[5]

Red Hat Quay v3 私有容器镜像仓库部署:

  • Red Hat Quay 容器镜像仓库的高级特性:

    • 镜像安全扫描(image security scanning)

    • 基于角色的访问(role-based access)

    • 组织与团队管理(organization and team management)

    • 镜像自动化构建(image build automation)

    • 审计(auditing)

    • 异地复制(geo-replication)

    • 高可用(high availability)

  • 该文档使用 basic 方式容器部署,非 HA 方式。

  • Red Hat Quay v3 私有容器镜像仓库组件:

    • Database:MySQL 或 PostgreSQL 数据库,主要存储镜像的元数据信息,而非镜像存储。

    • Redis:键值型存储,存储实时构建日志与 Quay 的向导。

    • Quay:容器镜像仓库,主要运行 quay 容器服务,该服务由多个组件组成。

    • **Clair**:静态容器镜像扫描工具,可识别安全隐患与修复问题(fixes)。

  • 部署的容器镜像与版本:

    • MySQL:registry.access.redhat.com/rhscl/mysql-57-rhel7:latest[6]

    • Redis:registry.assess.redhat.com/rhscl/redis-32-rhel7:latest[7]

    • Quay:quay.io/redhat/quay:v3.3.0

注意:拉取该容器镜像前必须先使用相应账号登录 Quay,如下脚本所示。

  • 使用 docker 运行各个单容器方式的部署脚本请 参考此处[8]

  • 🚀 推荐:

    使用 podman 运行单 pod 集成以上所有容器方式的部署脚本请 参考此处[9](未集成 Clair)。

    该方式中 quay-aio pod 将所有容器限制在同一 network namespace 中,Quay 的配置、部署与访问涉及众多端口,使用单容器运行于宿主机上将生成多条 iptables filternat 表规则,而集成在单 pod 中更加便于管理。

  • 以第二种方式为例,首先执行 quay-pod-manage config 命令,再进行以下配置。

  • 部署前首次配置 Quay 时,需通过 Web 页面将 Quay 与 MySQL 对接,指定仓库 FQDN 及对接的 Redis 数据库地址,若使用 pod 方式部署,其地址即为 pod 所在 network namespace 的 ip 地址,并最终下载 quay 的 .tar.gz 配置文件。

  • 运行以上命令可能出现的报错(现已解决):

    • 报错 1:由于 /mnt/quay/config/ssl.key 权限问题导致无法启动 quay-master 容器,更改其权限为 0644 即可。

      1786d87df9091f811327b16f870845fd.png
    • 报错 2:由于 /mnt/quay/storage/ 所有者问题导致无法从客户端推送容器镜像至镜像仓库中,更改目录的所有者为 1001 即可,该用户为 quay-master 容器中主进程的运行用户,必须对宿主机映射的目录具有写权限。

      22d7542c275605eef1f470993440a9c3.png9022df8eeb92d6ae43ddf60f5f88b364.png
  • Web UI 中的配置过程如下所示:

    • 登录 Quay 并完成认证:

      6ee4b9e233c0fff6a4f8290226b8a3e4.png
    • 生成 Quay 配置文件:

      75b105677e35a712f7f85efe04a5b3eb.pngbd91664ee18c2b5f2fa58d43481115df.png8bdf3fdfd05d5d10c8b40c374bf2a813.png622ac2b1a2ff9025b8a93e8b84b95ccd.png36df2fc78f189d3279ffdedae1a8bf5f.pngbf251e8658af67abb5a8ec4fe606f50c.png7aabf0dadb40ef196bf8bd2d4521194f.pngb2c0d8c8d689224e0a208bf74e2af18b.png
    • 配置并生成 Quay 配置文件:

  • 下载 quay 的配置压缩文件后,可执行 quay-pod-manage deploy 命令完成 Quay 的部署。

  • 若部署失败可执行 quay-pod-manage destroy 命令销毁 pod。

  • 若运行 Quay 的 quay-master 容器状态异常,可执行 quay-pod-manage recover 命令恢复故障的容器。

  • 登录与验证 Quay 私有容器镜像仓库:

    用户名:admin 密码:1qazZSE$

    e726d1a7298303ad6dfd5c4c118d5c23.png
  • Podman 客户端登录 Quay:

    使用基于 Docker registry APIOCI distribution API 登录并访问 Quay 容器镜像仓库,Red Hat 推荐使用基于 RHEL 的容器工具,即 PodmanBuildahSkopeo 来访问该 API。

    $ sudo mkdir /etc/docker/certs.d/<quay_registry_fqdn>/
    # 创建 Podman 客户端 Quay CA 证书存储目录
    $ sudo scp root@<quay_registry_fqdn>:/mnt/quay/config/ssl.cert \
      /etc/docker/certs.d/<quay_registry_fqdn>/ssl.crt
    # 同步 Quay CA 证书至 Podman 客户端
    
    # su - contsvc
    $ vim ~/.config/containers/registries.conf
      unqualified-search-registries = ['<quay_registry_fqdn>']
      # 该地址形如 registry.lab.example.com
      [[registry]]
      location = "<quay_registry_fqdn>"
      insecure = true
      blocked = false
    # 配置普通用户的 Quay 私有容器镜像仓库地址
    
    $ podman login <quay_registry_fqdn> \
      --username admin --password 1qazZSE$ \
      --log-level=debug
    # 成功登录 Quay 私有容器镜像仓库,并开启 debug 模式。
  • Docker 客户端登录 Quay(可选):

    c1cbccd66e6181252d66f6e9beff3222.png

参考链接

  • Quay 基础版安装和部署[10]

  • Deploy Project Quay for proof-of-concept (non-production) purposes[11]

  • docker.github.io/registry/deploying.md[12]

  • docker.github.io/registry/insecure.md[13]

引用链接

[1]

Red Hat Container Registry Authentication: https://access.redhat.com/RegistryAuthentication

[2]

Red Hat Container Catalog: https://catalog.redhat.com/software/containers/search

[3]

Red Hat 容器镜像安全等级说明: https://access.redhat.com/articles/2803031

[4]

Understanding Red Hat security ratings: https://access.redhat.com/security/updates/classification

[5]

Security Scoring and Grading for Container Images: https://access.redhat.com/blogs/product-security/posts/container-security-scoring

[6]

registry.access.redhat.com/rhscl/mysql-57-rhel7:latest: http://registry.access.redhat.com/rhscl/mysql-57-rhel7:latest

[7]

registry.assess.redhat.com/rhscl/redis-32-rhel7:latest: http://registry.assess.redhat.com/rhscl/redis-32-rhel7:latest

[8]

参考此处: https://github.com/Alberthua-Perl/summary-scripts/blob/master/shell-examples/deploy-quay-registry.sh

[9]

参考此处: https://github.com/Alberthua-Perl/scripts-confs/blob/master/shell-examples/quay-pod-manage.sh

[10]

Quay 基础版安装和部署: https://www.cnblogs.com/ericnie/p/12233269.html

[11]

Deploy Project Quay for proof-of-concept (non-production) purposes: https://docs.projectquay.io/deploy_quay.html

[12]

docker.github.io/registry/deploying.md: https://github.com/docker/docker.github.io/blob/master/registry/deploying.md#get-a-certificate

[13]

docker.github.io/registry/insecure.md: https://github.com/docker/docker.github.io/blob/master/registry/insecure.md

原文链接:https://github.com/Alberthua-Perl/tech-docs/blob/master/Red%20Hat%20Quay%20v3%20registry%20%E5%8E%9F%E7%90%86%E4%B8%8E%E5%AE%9E%E7%8E%B0.md

e3215ea822f9bd9016a14acb039bdbda.gif

725cbb18c0552e6578c38d640425745a.png

你可能还喜欢

点击下方图片即可阅读

caccdacd66dc69aa44a737566806f159.png

Koyeb 容器云——Heroku 的继承者?

174303b6e36f41eaae776ac50e658381.gif

云原生是一种信仰 🤘

关注公众号

后台回复◉k8s◉获取史上最方便快捷的 Kubernetes 高可用部署工具,只需一条命令,连 ssh 都不需要!

9f3cbf43060b88d4d357fe8e8d5ff17a.gif

2e5f6dd1d3a5b6394dd839fce2059cb3.gif

点击 "阅读原文" 获取更好的阅读体验!

发现朋友圈变“安静”了吗?

e78ac366f791873c2f02796a89c05374.gif

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值