Red Hat Quay Operator 的功能
美国国家标准与技术研究院(NIST)开发的联邦信息处理标准(FIPS)被认为是保护和加密敏感数据的高度认可,特别是在银行、医疗保健和公共区等高度监管领域。Red Hat Enterprise Linux (RHEL)和 OpenShift Container Platform 通过提供 FIPS 模式 来支持 FIPS,该系统只允许使用特定的 FIPS 验证的加密模块,如 openssl。这样可确保 FIPS 合规性。
1.1. 启用 FIPS 合规性 复制链接链接已复制到粘贴板!
使用以下步骤在 Red Hat Quay 部署中启用 FIPS 合规性。
前提条件
- 如果您运行 Red Hat Quay 的独立部署,则您的 Red Hat Enterprise Linux (RHEL)部署是版本 8 或更高版本,并启用 FIPS。
- 如果要在 OpenShift Container Platform 上部署 Red Hat Quay,OpenShift Container Platform 是版本 4.10 或更高版本。
- 您的 Red Hat Quay 版本为 3.5.0 或更高版本。
如果您在 IBM Power 或 IBM Z 集群中使用 OpenShift Container Platform 上的 Red Hat Quay:
- OpenShift Container Platform 版本 4.14 或更高版本是必需的
- 需要 Red Hat Quay 版本 3.10 或更高版本
- 您有 Red Hat Quay 部署的管理特权。
流程
在 Red Hat Quay
config.yaml文件中,将FEATURE_FIPS配置字段设置为true。例如:--- FEATURE_FIPS = true ---
--- FEATURE_FIPS = true ---Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将
FEATURE_FIPS设置为true时,Red Hat Quay 会使用 FIPS 兼容哈希功能运行。
第 2 章 控制台监控和警报 复制链接链接已复制到粘贴板!
Red Hat Quay 支持从 OpenShift Container Platform 控制台内部使用 Red Hat Quay Operator 部署监控实例。新的监控功能包括 Grafana 仪表板、访问单个指标和警报,以通知频繁重启 Quay pod。
要启用监控功能,您必须在安装 Red Hat Quay Operator 时选择 All namespaces on the cluster 作为安装模式。
2.1. Dashboard 复制链接链接已复制到粘贴板!
在 OpenShift Container Platform 控制台中,点 Monitoring → Dashboards 并搜索所需 Red Hat Quay registry 实例的仪表板:
仪表板显示各种统计信息,包括:
- 机构、存储库、用户和 Robot 帐户的数量
- CPU 用量
- 最大内存用量
- 拉取和推送率,以及身份验证请求
- API 请求率
- 延迟
2.2. 指标 复制链接链接已复制到粘贴板!
您可以通过在 UI 中访问 Monitoring → Metrics 来查看 Red Hat Quay 仪表板后面的底层指标。在 Expression 字段中,输入文本 quay_ 来查看可用指标列表:
选择一个示例指标,如 quay_org_rows :
此指标显示 registry 中的机构数量。它还直接位于仪表板中。
2.3. 警报 复制链接链接已复制到粘贴板!
如果 Quay pod 重启太频繁,则会引发警报。可以通过从控制台 UI 中的 Monitoring → Alerting 访问 Alerting rules 选项卡并搜索特定于 Quay 的警报来配置警报:
选择 QuayPodFrequentlyRestarting 规则详情来配置警报:
第 3 章 Clair 安全扫描程序 复制链接链接已复制到粘贴板!
3.1. Clair 漏洞数据库 复制链接链接已复制到粘贴板!
Clair 使用以下漏洞数据库报告镜像中的问题:
- Ubuntu Oval 数据库
- Debian 安全跟踪器
- Red Hat Enterprise Linux (RHEL) Oval 数据库
- SUSE Oval 数据库
- Oracle Oval 数据库
- alpine SecDB 数据库
- VMware Photon OS 数据库
- Amazon Web Services (AWS) UpdateInfo
- 开源漏洞(OSV)数据库
有关 Clair 如何使用不同数据库进行安全映射的详情,请参考 Clair 内核严重性映射。
3.1.1. Clair 的开源漏洞(OSV)数据库的信息 复制链接链接已复制到粘贴板!
开源漏洞(OSV)是一种漏洞数据库和监控服务,专注于跟踪和管理开源软件中的安全漏洞。
OSV 提供开源项目中已知安全漏洞的综合且最新的数据库。其中涵盖了各种开源软件,包括库、框架和在软件开发中使用的其他组件。有关包含的生态系统的完整列表,请参见 定义的生态系统。
Clair 还通过开源漏洞(OSV)数据库报告 golang、java 和 ruby 生态系统的漏洞和安全信息。
通过利用 OSV,开发人员和机构可以主动监控并解决他们使用的开源组件中的安全漏洞,这有助于降低项目中的安全漏洞和风险。
有关 OSV 的更多信息,请参阅 OSV 网站。
3.2. OpenShift Container Platform 中的 Clair 复制链接链接已复制到粘贴板!
要在 OpenShift Container Platform 上的 Red Hat Quay 部署中设置 Clair v4 (Clair),建议使用 Red Hat Quay Operator。默认情况下,Red Hat Quay Operator 安装或升级 Clair 部署以及 Red Hat Quay 部署自动配置 Clair。
3.3. 测试 Clair 复制链接链接已复制到粘贴板!
使用以下步骤测试独立 Red Hat Quay 部署或基于 OpenShift Container Platform Operator 的部署中的 Clair。
先决条件
- 您已部署了 Clair 容器镜像。
流程
输入以下命令拉取示例镜像:
podman pull ubuntu:20.04
$ podman pull ubuntu:20.04Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输入以下命令将镜像标记到 registry 中:
sudo podman tag docker.io/library/ubuntu:20.04 <quay-server.example.com>/<user-name>/ubuntu:20.04
$ sudo podman tag docker.io/library/ubuntu:20.04 <quay-server.example.com>/<user-name>/ubuntu:20.04Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输入以下命令将镜像推送到 Red Hat Quay registry:
sudo podman push --tls-verify=false quay-server.example.com/quayadmin/ubuntu:20.04
$ sudo podman push --tls-verify=false quay-server.example.com/quayadmin/ubuntu:20.04Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 通过 UI 登录您的 Red Hat Quay 部署。
- 单击存储库名称,如 quayadmin/ubuntu。
在导航窗格中,单击 Tags。
报告概述
点镜像报告(如 45 个介质 )显示更详细的报告:
报告详情
注意在某些情况下,Clair 显示有关镜像的重复报告,如
ubi8/nodejs-12或ubi8/nodejs-16。这是因为同名的漏洞适用于不同的软件包。这个行为预期是 Clair 漏洞报告,且不会作为程序错误解决。
3.4. 高级 Clair 配置 复制链接链接已复制到粘贴板!
使用以下部分中的步骤配置高级 Clair 设置。
3.4.1. 非受管 Clair 配置 复制链接链接已复制到粘贴板!
Red Hat Quay 用户可以使用 Red Hat Quay OpenShift Container Platform Operator 运行非受管 Clair 配置。此功能允许用户创建非受管 Clair 数据库,或者在没有非受管数据库的情况下运行其自定义 Clair 配置。
非受管 Clair 数据库允许 Red Hat Quay Operator 在地理复制环境中工作,Operator 的多个实例必须与同一数据库通信。当用户需要在集群外存在的高可用性(HA) Clair 数据库时,也可以使用非受管 Clair 数据库。
3.4.1.1. 使用非受管 Clair 数据库运行自定义 Clair 配置 复制链接链接已复制到粘贴板!
使用以下步骤将 Clair 数据库设置为 unmanaged。
您不能为 Red Hat Quay 和 Clair 部署使用相同的外部管理的 PostgreSQL 数据库。您的 PostgreSQL 数据库还必须与其他工作负载共享,因为在连接密集型工作负载(如 Red Hat Quay 或 Clair)时,它可能会耗尽 PostgreSQL 端的自然连接限制。另外,Red Hat Quay 或 Clair 不支持 pgBouncer,因此这不是解决这个问题的选项。
流程
在 Quay Operator 中,将
QuayRegistry自定义资源的clairpostgres组件设置为managed: false:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
3.4.1.2. 使用非受管 Clair 数据库配置自定义 Clair 数据库 复制链接链接已复制到粘贴板!
Red Hat Quay on OpenShift Container Platform 允许用户提供自己的 Clair 数据库。
使用以下步骤创建自定义 Clair 数据库。
以下流程使用 SSL/TLS 认证设置 Clair。要查看不使用 SSL/TLS 认证设置 Clair 的类似流程,请参阅"使用受管 Clair 配置自定义 Clair 数据库"。
流程
输入以下命令来创建包含
clair-config.yaml的 Quay 配置捆绑包 secret:oc create secret generic --from-file config.yaml=./config.yaml --from-file extra_ca_cert_rds-ca-2019-root.pem=./rds-ca-2019-root.pem --from-file clair-config.yaml=./clair-config.yaml --from-file ssl.cert=./ssl.cert --from-file ssl.key=./ssl.key config-bundle-secret
$ oc create secret generic --from-file config.yaml=./config.yaml --from-file extra_ca_cert_rds-ca-2019-root.pem=./rds-ca-2019-root.pem --from-file clair-config.yaml=./clair-config.yaml --from-file ssl.cert=./ssl.cert --from-file ssl.key=./ssl.key config-bundle-secretCopy to Clipboard Copied! Toggle word wrap Toggle overflow Clair
config.yaml文件示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意-
数据库证书挂载到
clair-config.yaml中的 Clair 应用程序 pod 上的/run/certs/rds-ca-2019-root.pem下。在配置clair-config.yaml时,必须指定它。 -
Clair on OpenShift config 中包括了一个
clair-config.yaml示例。
-
数据库证书挂载到
将
clair-config.yaml文件添加到捆绑包 secret 中,例如:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意更新后,提供的
clair-config.yaml文件会被挂载到 Clair pod 中。任何未提供的字段都使用 Clair 配置模块自动填充默认值。您可以点击 Build History 页面中的提交或运行
oc get pods -n <namespace> 来检查 Clair pod 的状态。例如:oc get pods -n <namespace>
$ oc get pods -n <namespace>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME READY STATUS RESTARTS AGE f192fe4a-c802-4275-bcce-d2031e635126-9l2b5-25lg2 1/1 Running 0 7s
NAME READY STATUS RESTARTS AGE f192fe4a-c802-4275-bcce-d2031e635126-9l2b5-25lg2 1/1 Running 0 7sCopy to Clipboard Copied! Toggle word wrap Toggle overflow
3.4.2. 使用受管 Clair 数据库运行自定义 Clair 配置 复制链接链接已复制到粘贴板!
在某些情况下,用户可能希望使用受管 Clair 数据库运行自定义 Clair 配置。这在以下情况中很有用:
- 当用户想要禁用特定的更新器资源时。
当用户在断开连接的环境中运行 Red Hat Quay 时。有关在断开连接的环境中运行 Clair 的更多信息,请参阅 在断开连接的环境中的 Clair。
注意-
如果您在断开连接的环境中运行 Red Hat Quay,则
clair-config.yaml的airgap参数必须设置为true。 - 如果您在断开连接的环境中运行 Red Hat Quay,则应禁用所有更新器组件。
-
如果您在断开连接的环境中运行 Red Hat Quay,则
3.4.2.1. 将 Clair 数据库设置为 managed 复制链接链接已复制到粘贴板!
使用以下步骤将 Clair 数据库设置为 managed。
流程
在 Quay Operator 中,将
QuayRegistry自定义资源的clairpostgres组件设置为managed: true:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
3.4.2.2. 使用受管 Clair 配置自定义 Clair 数据库 复制链接链接已复制到粘贴板!
Red Hat Quay on OpenShift Container Platform 允许用户提供自己的 Clair 数据库。
使用以下步骤创建自定义 Clair 数据库。
流程
输入以下命令来创建包含
clair-config.yaml的 Quay 配置捆绑包 secret:oc create secret generic --from-file config.yaml=./config.yaml --from-file extra_ca_cert_rds-ca-2019-root.pem=./rds-ca-2019-root.pem --from-file clair-config.yaml=./clair-config.yaml config-bundle-secret
$ oc create secret generic --from-file config.yaml=./config.yaml --from-file extra_ca_cert_rds-ca-2019-root.pem=./rds-ca-2019-root.pem --from-file clair-config.yaml=./clair-config.yaml config-bundle-secretCopy to Clipboard Copied! Toggle word wrap Toggle overflow Clair
config.yaml文件示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意-
数据库证书挂载到
clair-config.yaml中的 Clair 应用程序 pod 上的/run/certs/rds-ca-2019-root.pem下。在配置clair-config.yaml时,必须指定它。 -
Clair on OpenShift config 中包括了一个
clair-config.yaml示例。
-
数据库证书挂载到
将
clair-config.yaml文件添加到捆绑包 secret 中,例如:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意-
更新后,提供的
clair-config.yaml文件会被挂载到 Clair pod 中。任何未提供的字段都使用 Clair 配置模块自动填充默认值。
-
更新后,提供的
您可以点击 Build History 页面中的提交或运行
oc get pods -n <namespace> 来检查 Clair pod 的状态。例如:oc get pods -n <namespace>
$ oc get pods -n <namespace>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME READY STATUS RESTARTS AGE f192fe4a-c802-4275-bcce-d2031e635126-9l2b5-25lg2 1/1 Running 0 7s
NAME READY STATUS RESTARTS AGE f192fe4a-c802-4275-bcce-d2031e635126-9l2b5-25lg2 1/1 Running 0 7sCopy to Clipboard Copied! Toggle word wrap Toggle overflow
3.4.3. 在断开连接的环境中的 Clair 复制链接链接已复制到粘贴板!
目前,IBM Power 和 IBM Z 不支持在断开连接的环境中部署 Clair。
Clair 使用一组称为 updaters 的组件来处理从各种漏洞数据库获取和解析数据。默认情况下,更新程序会被设置,以直接从互联网拉取漏洞数据,并立即使用。但是,有些用户可能要求 Red Hat Quay 在断开连接的环境中运行,或者不需要直接访问互联网的环境。Clair 支持断开连接的环境,方法是使用不同类型的更新工作流来考虑网络隔离。这通过使用 clairctl 命令行界面工具来工作,该工具通过使用开放主机从互联网获取更新器数据,从而安全地将数据传送到隔离的主机,然后将隔离主机上的 updater 数据非常重要到 Clair。
使用本指南在断开连接的环境中部署 Clair。
目前,Clairrichment 数据是 CVSS 数据。目前在断开连接的环境中不支持增强数据。
有关 Clair 更新器的更多信息,请参阅 "Clair updaters"。
3.4.3.1. 在断开连接的 OpenShift Container Platform 集群中设置 Clair 复制链接链接已复制到粘贴板!
使用以下步骤在断开连接的 OpenShift Container Platform 集群中设置 OpenShift Container Platform 置备的 Clair pod。
使用以下步骤为 OpenShift Container Platform 部署安装 clairctl CLI 工具。
流程
输入以下命令为 OpenShift Container Platform 集群中的 Clair 部署安装
clairctl程序:oc -n quay-enterprise exec example-registry-clair-app-64dd48f866-6ptgw -- cat /usr/bin/clairctl > clairctl
$ oc -n quay-enterprise exec example-registry-clair-app-64dd48f866-6ptgw -- cat /usr/bin/clairctl > clairctlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 注意不正式,可以下载
clairctl工具设置
clairctl文件的权限,以便可由用户执行并运行,例如:chmod u+x ./clairctl
$ chmod u+x ./clairctlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
使用以下步骤为 OpenShift Container Platform 上置备的 Clair 实例检索和解码配置 secret。
先决条件
-
您已安装了
clairctl命令行工具工具。
流程
输入以下命令来检索和解码配置 secret,然后将其保存到 Clair 配置 YAML 中:
oc get secret -n quay-enterprise example-registry-clair-config-secret -o "jsonpath={$.data['config\.yaml']}" | base64 -d > clair-config.yaml$ oc get secret -n quay-enterprise example-registry-clair-config-secret -o "jsonpath={$.data['config\.yaml']}" | base64 -d > clair-config.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 更新
clair-config.yaml文件,使disable_updaters和airgap参数设置为true,例如:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
3.4.3.1.3. 从连接的 Clair 实例导出更新程序捆绑包 复制链接链接已复制到粘贴板!
使用以下步骤从可访问互联网的 Clair 实例导出更新程序捆绑包。
先决条件
-
您已安装了
clairctl命令行工具工具。 -
您已检索并解码 Clair 配置 secret,并将其保存到 Clair
config.yaml文件中。 -
在 Clair
config.yaml文件中,disable_updaters和airgap参数设置为true。
流程
从可访问互联网的 Clair 实例中,将
clairctlCLI 工具与您的配置文件一起使用,以导出更新程序捆绑包。例如:./clairctl --config ./config.yaml export-updaters updates.gz
$ ./clairctl --config ./config.yaml export-updaters updates.gzCopy to Clipboard Copied! Toggle word wrap Toggle overflow
使用以下步骤配置对断开连接的 OpenShift Container Platform 集群中的 Clair 数据库的访问。
先决条件
-
您已安装了
clairctl命令行工具工具。 -
您已检索并解码 Clair 配置 secret,并将其保存到 Clair
config.yaml文件中。 -
在 Clair
config.yaml文件中,disable_updaters和airgap参数设置为true。 - 您已从可访问互联网的 Clair 实例导出了更新程序捆绑包。
流程
使用
ocCLI 工具确定您的 Clair 数据库服务,例如:oc get svc -n quay-enterprise
$ oc get svc -n quay-enterpriseCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE example-registry-clair-app ClusterIP 172.30.224.93 <none> 80/TCP,8089/TCP 4d21h example-registry-clair-postgres ClusterIP 172.30.246.88 <none> 5432/TCP 4d21h ...
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE example-registry-clair-app ClusterIP 172.30.224.93 <none> 80/TCP,8089/TCP 4d21h example-registry-clair-postgres ClusterIP 172.30.246.88 <none> 5432/TCP 4d21h ...Copy to Clipboard Copied! Toggle word wrap Toggle overflow 转发 Clair 数据库端口,使其可以从本地机器访问。例如:
oc port-forward -n quay-enterprise service/example-registry-clair-postgres 5432:5432
$ oc port-forward -n quay-enterprise service/example-registry-clair-postgres 5432:5432Copy to Clipboard Copied! Toggle word wrap Toggle overflow 更新 Clair
config.yaml文件,例如:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
使用以下步骤将更新程序捆绑包导入到断开连接的 OpenShift Container Platform 集群中。
先决条件
-
您已安装了
clairctl命令行工具工具。 -
您已检索并解码 Clair 配置 secret,并将其保存到 Clair
config.yaml文件中。 -
在 Clair
config.yaml文件中,disable_updaters和airgap参数设置为true。 - 您已从可访问互联网的 Clair 实例导出了更新程序捆绑包。
- 您已将更新程序捆绑包传送到断开连接的环境中。
流程
使用
clairctlCLI 工具将更新程序捆绑包导入到 OpenShift Container Platform 部署的 Clair 数据库中。例如:./clairctl --config ./clair-config.yaml import-updaters updates.gz
$ ./clairctl --config ./clair-config.yaml import-updaters updates.gzCopy to Clipboard Copied! Toggle word wrap Toggle overflow
使用以下步骤为断开连接的 OpenShift Container Platform 集群设置 Clair 的自我管理部署。
使用以下步骤在 OpenShift Container Platform 上安装用于自我管理的 Clair 部署的 clairctl CLI 工具。
流程
使用
podman cp命令为自我管理的 Clair 部署安装clairctl程序,例如:sudo podman cp clairv4:/usr/bin/clairctl ./clairctl
$ sudo podman cp clairv4:/usr/bin/clairctl ./clairctlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 设置
clairctl文件的权限,以便可由用户执行并运行,例如:chmod u+x ./clairctl
$ chmod u+x ./clairctlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
使用以下步骤为断开连接的 OpenShift Container Platform 集群部署自我管理的 Clair 容器。
先决条件
-
您已安装了
clairctl命令行工具工具。
流程
为您的 Clair 配置文件创建一个文件夹,例如:
mkdir /etc/clairv4/config/
$ mkdir /etc/clairv4/config/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建一个 Clair 配置文件,并将
disable_updaters参数设置为true,例如:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用容器镜像启动 Clair,挂载在来自您创建的文件中的配置中:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
3.4.3.2.3. 从连接的 Clair 实例导出更新程序捆绑包 复制链接链接已复制到粘贴板!
使用以下步骤从可访问互联网的 Clair 实例导出更新程序捆绑包。
先决条件
-
您已安装了
clairctl命令行工具工具。 - 您已部署了 Clair。
-
在 Clair
config.yaml文件中,disable_updaters和airgap参数设置为true。
流程
从可访问互联网的 Clair 实例中,将
clairctlCLI 工具与您的配置文件一起使用,以导出更新程序捆绑包。例如:./clairctl --config ./config.yaml export-updaters updates.gz
$ ./clairctl --config ./config.yaml export-updaters updates.gzCopy to Clipboard Copied! Toggle word wrap Toggle overflow
使用以下步骤配置对断开连接的 OpenShift Container Platform 集群中的 Clair 数据库的访问。
先决条件
-
您已安装了
clairctl命令行工具工具。 - 您已部署了 Clair。
-
在 Clair
config.yaml文件中,disable_updaters和airgap参数设置为true。 - 您已从可访问互联网的 Clair 实例导出了更新程序捆绑包。
流程
使用
ocCLI 工具确定您的 Clair 数据库服务,例如:oc get svc -n quay-enterprise
$ oc get svc -n quay-enterpriseCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE example-registry-clair-app ClusterIP 172.30.224.93 <none> 80/TCP,8089/TCP 4d21h example-registry-clair-postgres ClusterIP 172.30.246.88 <none> 5432/TCP 4d21h ...
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE example-registry-clair-app ClusterIP 172.30.224.93 <none> 80/TCP,8089/TCP 4d21h example-registry-clair-postgres ClusterIP 172.30.246.88 <none> 5432/TCP 4d21h ...Copy to Clipboard Copied! Toggle word wrap Toggle overflow 转发 Clair 数据库端口,使其可以从本地机器访问。例如:
oc port-forward -n quay-enterprise service/example-registry-clair-postgres 5432:5432
$ oc port-forward -n quay-enterprise service/example-registry-clair-postgres 5432:5432Copy to Clipboard Copied! Toggle word wrap Toggle overflow 更新 Clair
config.yaml文件,例如:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
使用以下步骤将更新程序捆绑包导入到断开连接的 OpenShift Container Platform 集群中。
先决条件
-
您已安装了
clairctl命令行工具工具。 - 您已部署了 Clair。
-
在 Clair
config.yaml文件中,disable_updaters和airgap参数设置为true。 - 您已从可访问互联网的 Clair 实例导出了更新程序捆绑包。
- 您已将更新程序捆绑包传送到断开连接的环境中。
流程
使用
clairctlCLI 工具将更新程序捆绑包导入到 OpenShift Container Platform 部署的 Clair 数据库中:./clairctl --config ./clair-config.yaml import-updaters updates.gz
$ ./clairctl --config ./clair-config.yaml import-updaters updates.gzCopy to Clipboard Copied! Toggle word wrap Toggle overflow
3.4.4. 将存储库映射到通用产品枚举信息 复制链接链接已复制到粘贴板!
目前,IBM Power 和 IBM Z 不支持将软件仓库映射到通用产品枚举信息。
Clair 的 Red Hat Enterprise Linux (RHEL)扫描程序依赖于通用产品枚举(CPE)文件将 RPM 软件包映射到对应的安全数据,以生成匹配的结果。这些文件由产品安全及每天更新所有。
必须存在 cp 文件,或必须允许访问该文件,以便扫描程序可以正确地处理 RPM 软件包。如果文件不存在,则容器镜像中安装的 RPM 软件包不会被扫描。
| CPE | 到 JSON 映射文件的链接 |
|---|---|
|
| |
|
|
除了将 CVE 信息上传到数据库以进行断开连接的 Clair 安装外,还必须使映射文件在本地可用:
- 对于独立的 Red Hat Quay 和 Clair 部署,映射文件必须加载到 Clair pod 中。
-
对于 OpenShift Container Platform 部署的 Red Hat Quay,您必须将 Clair 组件设置为
非受管。然后,必须手动部署 Clair,将配置设置为加载映射文件的本地副本。
3.4.4.1. 将存储库映射到通用产品枚举示例配置 复制链接链接已复制到粘贴板!
使用 Clair 配置中的 repo2cpe_mapping_file 和 name2repos_mapping_file 字段,使其包含 cp JSON 映射文件。例如:
如需更多信息,请参阅 如何将 OVAL 安全数据与已安装的 RPM 完全匹配。
第 4 章 在基础架构节点上部署 Red Hat Quay 复制链接链接已复制到粘贴板!
默认情况下,当使用 Red Hat Quay Operator 部署 registry 时,与 Quay 相关的 pod 会被放在任意 worker 节点上。有关如何使用机器集将节点配置为仅托管基础架构组件的更多信息,请参阅 创建基础架构机器集。
如果不使用 OpenShift Container Platform 机器集资源来部署 infra 节点,本文档中的部分演示了如何为基础架构目的手动标记和污点节点。在手动配置基础架构节点或使用机器集后,您可以使用节点选择器和容限来控制这些节点上的 Quay pod 放置。
4.1. 为基础架构使用标记和污点节点 复制链接链接已复制到粘贴板!
使用以下步骤为基础架构使用标签和包含的节点。
输入以下命令以显示 master 和 worker 节点。在本例中,有三个 master 节点和 6 个 worker 节点。
oc get nodes
$ oc get nodesCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输入以下命令为基础架构使用标记三个 worker 节点:
oc label node --overwrite user1-jcnp6-worker-c-pwxfp.c.quay-devel.internal node-role.kubernetes.io/infra=
$ oc label node --overwrite user1-jcnp6-worker-c-pwxfp.c.quay-devel.internal node-role.kubernetes.io/infra=Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc label node --overwrite user1-jcnp6-worker-d-h5tv2.c.quay-devel.internal node-role.kubernetes.io/infra=
$ oc label node --overwrite user1-jcnp6-worker-d-h5tv2.c.quay-devel.internal node-role.kubernetes.io/infra=Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc label node --overwrite user1-jcnp6-worker-d-m9gg4.c.quay-devel.internal node-role.kubernetes.io/infra=
$ oc label node --overwrite user1-jcnp6-worker-d-m9gg4.c.quay-devel.internal node-role.kubernetes.io/infra=Copy to Clipboard Copied! Toggle word wrap Toggle overflow 现在,当列出集群中的节点时,最后三个 worker 节点具有
infra角色。例如:oc get nodes
$ oc get nodesCopy to Clipboard Copied! Toggle word wrap Toggle overflow Example
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 当 worker 节点被分配了
infra角色时,用户工作负载可能会意外地分配给 infra 节点。要避免这种情况,您可以将污点应用到 infra 节点,然后为要控制的 pod 添加容限。例如:oc adm taint nodes user1-jcnp6-worker-c-pwxfp.c.quay-devel.internal node-role.kubernetes.io/infra:NoSchedule
$ oc adm taint nodes user1-jcnp6-worker-c-pwxfp.c.quay-devel.internal node-role.kubernetes.io/infra:NoScheduleCopy to Clipboard Copied! Toggle word wrap Toggle overflow oc adm taint nodes user1-jcnp6-worker-d-h5tv2.c.quay-devel.internal node-role.kubernetes.io/infra:NoSchedule
$ oc adm taint nodes user1-jcnp6-worker-d-h5tv2.c.quay-devel.internal node-role.kubernetes.io/infra:NoScheduleCopy to Clipboard Copied! Toggle word wrap Toggle overflow oc adm taint nodes user1-jcnp6-worker-d-m9gg4.c.quay-devel.internal node-role.kubernetes.io/infra:NoSchedule
$ oc adm taint nodes user1-jcnp6-worker-d-m9gg4.c.quay-devel.internal node-role.kubernetes.io/infra:NoScheduleCopy to Clipboard Copied! Toggle word wrap Toggle overflow
4.2. 使用节点选择器和容限创建项目 复制链接链接已复制到粘贴板!
使用以下步骤创建带有节点选择器和容限的项目。
您还可以删除安装 Red Hat Quay Operator 和命名空间,或命名空间(在部署时使用)来完成以下步骤。然后,用户可以使用以下注解创建新资源:
流程
输入以下命令来编辑部署 Red Hat Quay 的命名空间,以及以下注解:
oc annotate namespace <namespace> openshift.io/node-selector='node-role.kubernetes.io/infra='
$ oc annotate namespace <namespace> openshift.io/node-selector='node-role.kubernetes.io/infra='Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
namespace/<namespace> annotated
namespace/<namespace> annotatedCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输入以下命令来获取可用 pod 列表:
oc get pods -o wide
$ oc get pods -o wideCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输入以下命令删除可用的 pod:
oc delete pods --selector quay-operator/quayregistry=example-registry -n quay-enterprise
$ oc delete pods --selector quay-operator/quayregistry=example-registry -n quay-enterpriseCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 删除 pod 后,它们会自动重新启动,并应调度到专用的基础架构节点。
4.3. 在特定命名空间中安装 Red Hat Quay 复制链接链接已复制到粘贴板!
使用以下步骤在特定命名空间的 OpenShift Container Platform 上安装 Red Hat Quay。
要在特定命名空间中安装 Red Hat Quay Operator,您必须明确指定适当的项目命名空间,如下所示。
在以下示例中,使用了
quay-registry命名空间。这会导致quay-operatorpod 在三个基础架构节点中的一个中登录。例如:oc get pods -n quay-registry -o wide
$ oc get pods -n quay-registry -o wideCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME READY STATUS RESTARTS AGE IP NODE quay-operator.v3.4.1-6f6597d8d8-bd4dp 1/1 Running 0 30s 10.131.0.16 user1-jcnp6-worker-d-h5tv2.c.quay-devel.internal
NAME READY STATUS RESTARTS AGE IP NODE quay-operator.v3.4.1-6f6597d8d8-bd4dp 1/1 Running 0 30s 10.131.0.16 user1-jcnp6-worker-d-h5tv2.c.quay-devel.internalCopy to Clipboard Copied! Toggle word wrap Toggle overflow
4.4. 创建 Red Hat Quay registry 复制链接链接已复制到粘贴板!
使用以下步骤创建 Red Hat Quay registry。
输入以下命令来创建 Red Hat Quay registry。然后,等待部署标记为
ready。在以下示例中,您应该会看到它们仅调度到为基础架构用途标记的三个节点上。oc get pods -n quay-registry -o wide
$ oc get pods -n quay-registry -o wideCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.5. 调整受管存储的大小 复制链接链接已复制到粘贴板!
在 OpenShift Container Platform 上部署 Red Hat Quay 时,会部署三个不同的持久性卷声明(PVC):
- 一个用于 PostgreSQL 13 registry。
- 一个用于 Clair PostgreSQL 13 registry。
- 使用 NooBaa 作为后端存储的一个。
Red Hat Quay 和 NooBaa 之间的连接通过 OpenShift Container Platform 中的 S3 API 和 ObjectBucketClaim API 进行。Red Hat Quay 利用该 API 组在 NooBaa 中创建存储桶,获取访问密钥并自动设置所有内容。在后端或 NooBaa 上,该存储桶是在后备存储中创建的。因此,NooBaa PVC 不会挂载或连接到 Red Hat Quay pod。
PostgreSQL 13 和 Clair PostgreSQL 13 PVC 的默认大小被设置为 50 GiB。您可以按照以下流程在 OpenShift Container Platform 控制台中扩展这些 PVC 的存储。
以下流程与 Red Hat OpenShift Data Foundation 上的 扩展持久性卷声明 共享通用性。
4.5.1. 在 Red Hat Quay 上重新定义 PostgreSQL 13 PVC 大小 复制链接链接已复制到粘贴板!
使用以下步骤调整 PostgreSQL 13 和 Clair PostgreSQL 13 PVC 的大小。
先决条件
- 在 OpenShift Container Platform 上具有集群 admin 权限。
流程
- 登录 OpenShift Container Platform 控制台并选择 Storage → Persistent Volume Claims。
-
为 PostgreSQL 13 或 Clair PostgreSQL 13 选择所需的
PersistentVolumeClaim,如example-registry-quay-postgres-13。 - 在 Action 菜单中,选择 Expand PVC。
输入持久性卷声明的新大小,然后选择 Expand。
几分钟后,扩展的大小应在 PVC 的 Capacity 字段中反映。
4.6. 自定义默认 Operator 镜像 复制链接链接已复制到粘贴板!
目前,IBM Power 和 IBM Z 不支持自定义默认 Operator 镜像。
在某些情况下,覆盖 Red Hat Quay Operator 使用的默认镜像可能很有用。这可以通过在 Red Hat Quay Operator ClusterServiceVersion 中设置一个或多个环境变量来完成。
生产环境 Red Hat Quay 环境不支持使用这个机制,并强烈建议只用于开发或测试目的。当将非默认镜像与 Red Hat Quay Operator 搭配使用时,不能保证您的部署可以正常工作。
4.6.1. 环境变量 复制链接链接已复制到粘贴板!
Red Hat Quay Operator 中使用以下环境变量来覆盖组件镜像:
| 环境变量 | 组件 |
|
|
|
|
|
|
|
|
|
|
|
|
覆盖的镜像 必须由 清单(@sha256:)引用,而不是通过标签(:latest)引用。
4.6.2. 将覆盖应用到正在运行的 Operator 复制链接链接已复制到粘贴板!
通过 Operator Lifecycle Manager (OLM) 在集群中安装 Red Hat Quay Operator 时,可通过修改 ClusterServiceVersion 对象来轻松覆盖受管组件容器镜像。
使用以下步骤将覆盖应用到正在运行的 Red Hat Quay Operator。
流程
ClusterServiceVersion对象是集群中正在运行的 Operator 的 Operator Lifecycle Manager 表示。使用 Kubernetes UI 或kubectl/ocCLI 工具查找 Red Hat Quay Operator 的ClusterServiceVersion。例如:oc get clusterserviceversions -n <your-namespace>
$ oc get clusterserviceversions -n <your-namespace>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用 UI、
oc edit或其它方法修改 Red Hat QuayClusterServiceVersion,使其包含上面概述的环境变量以指向覆盖镜像:JSONPath:
spec.install.spec.deployments[0].spec.template.spec.containers[0].envCopy to Clipboard Copied! Toggle word wrap Toggle overflow
这是在 Operator 级别完成的,因此每个 QuayRegistry 都将使用相同的覆盖进行部署。
4.7. AWS S3 CloudFront 复制链接链接已复制到粘贴板!
目前,IBM Power 和 IBM Z 不支持使用 AWS S3 CloudFront。
如果您在后端 registry 存储中使用 AWS S3 Cloudfront,请使用以下步骤。
流程
输入以下命令来指定 registry 密钥:
oc create secret generic --from-file config.yaml=./config_awss3cloudfront.yaml --from-file default-cloudfront-signing-key.pem=./default-cloudfront-signing-key.pem test-config-bundle
$ oc create secret generic --from-file config.yaml=./config_awss3cloudfront.yaml --from-file default-cloudfront-signing-key.pem=./default-cloudfront-signing-key.pem test-config-bundleCopy to Clipboard Copied! Toggle word wrap Toggle overflow
第 5 章 Red Hat Quay 构建增强 复制链接链接已复制到粘贴板!
Red Hat Quay 构建可以在虚拟化平台上运行。也可以向后向兼容性来运行以前的构建配置。
5.1. Red Hat Quay 构建限制 复制链接链接已复制到粘贴板!
在非特权上下文中在 Red Hat Quay 中运行构建可能会导致一些在上一个构建策略下工作的命令失败。尝试更改构建策略可能会导致构建出现性能问题和可靠性。
在容器中运行构建与使用虚拟机没有相同的隔离。更改构建环境也可能会导致之前正常工作的构建失败。
本节中的步骤解释了如何使用 OpenShift Container Platform 创建 Red Hat Quay 虚拟构建器环境。
5.2.1. OpenShift Container Platform TLS 组件 复制链接链接已复制到粘贴板!
tls 组件允许您控制 TLS 配置。
当由 Operator 管理 TLS 组件时,Red Hat Quay 3.12 不支持构建器。
如果将 tls 设置为 unmanaged,则提供自己的 ssl.cert 和 ssl.key 文件。在本实例中,如果您希望集群支持构建器,您必须将 Quay 路由和构建器路由名称添加到证书中的 SAN 列表中,或使用通配符。
要添加 builder 路由,请使用以下格式:
[quayregistry-cr-name]-quay-builder-[ocp-namespace].[ocp-domain-name]:443
[quayregistry-cr-name]-quay-builder-[ocp-namespace].[ocp-domain-name]:443
构建器需要 SSL/TLS 证书。有关 SSL/TLS 证书的更多信息,请参阅使用 SSL/TLS 证书的概念验证部署。
如果使用 Amazon Web Service (AWS) S3 存储,则必须在运行构建器前在 AWS 控制台中修改存储桶。有关所需参数,请参阅以下部分"修改 AWS S3 存储桶"。
5.2.2.1. 为虚拟构建器准备 OpenShift Container Platform 复制链接链接已复制到粘贴板!
使用以下步骤为 Red Hat Quay 虚拟构建器准备 OpenShift Container Platform。
- 此流程假设您已置备集群并运行 Quay Operator。
- 此流程用于在 OpenShift Container Platform 上设置虚拟命名空间。
流程
- 使用集群管理员帐户登录到 Red Hat Quay 集群。
运行以下命令,创建一个运行虚拟构建器的新项目,如
virtual-builders:oc new-project virtual-builders
$ oc new-project virtual-buildersCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输入以下命令在项目中创建一个
ServiceAccount,用于运行构建:oc create sa -n virtual-builders quay-builder
$ oc create sa -n virtual-builders quay-builderCopy to Clipboard Copied! Toggle word wrap Toggle overflow 为创建的服务帐户提供编辑权限,以便它可以运行构建:
oc adm policy -n virtual-builders add-role-to-user edit system:serviceaccount:virtual-builders:quay-builder
$ oc adm policy -n virtual-builders add-role-to-user edit system:serviceaccount:virtual-builders:quay-builderCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输入以下命令授予 Quay builder
anyuid scc权限:oc adm policy -n virtual-builders add-scc-to-user anyuid -z quay-builder
$ oc adm policy -n virtual-builders add-scc-to-user anyuid -z quay-builderCopy to Clipboard Copied! Toggle word wrap Toggle overflow 注意此操作需要集群管理员特权。这是必要的,因为构建器必须以 Podman 用户身份运行,才能让非特权或无根构建正常工作。
获取 Quay builder 服务帐户的令牌。
如果使用 OpenShift Container Platform 4.10 或更早的版本,请输入以下命令:
oc sa get-token -n virtual-builders quay-builder
oc sa get-token -n virtual-builders quay-builderCopy to Clipboard Copied! Toggle word wrap Toggle overflow 如果使用 OpenShift Container Platform 4.11 或更高版本,请输入以下命令:
oc create token quay-builder -n virtual-builders
$ oc create token quay-builder -n virtual-buildersCopy to Clipboard Copied! Toggle word wrap Toggle overflow 注意当令牌过期时,您需要请求新令牌。另外,您还可以添加自定义过期。例如,使用
specify-duration 20160m来保留令牌两周。输出示例
<example_token>
<example_token>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
输入以下命令确定构建器路由:
oc get route -n quay-enterprise
$ oc get route -n quay-enterpriseCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME HOST/PORT PATH SERVICES PORT TERMINATION WILDCARD ... example-registry-quay-builder example-registry-quay-builder-quay-enterprise.apps.docs.quayteam.org example-registry-quay-app grpc edge/Redirect None ...
NAME HOST/PORT PATH SERVICES PORT TERMINATION WILDCARD ... example-registry-quay-builder example-registry-quay-builder-quay-enterprise.apps.docs.quayteam.org example-registry-quay-app grpc edge/Redirect None ...Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输入以下命令,使用 .crt 扩展生成自签名 SSL/TlS 证书:
oc extract cm/kube-root-ca.crt -n openshift-apiserver
$ oc extract cm/kube-root-ca.crt -n openshift-apiserverCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
ca.crt
ca.crtCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输入以下命令将
ca.crt文件重命名为extra_ca_cert_build_cluster.crt:mv ca.crt extra_ca_cert_build_cluster.crt
$ mv ca.crt extra_ca_cert_build_cluster.crtCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在控制台中找到配置捆绑包的 secret,然后选择 Actions → Edit Secret 并添加适当的构建程序配置:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 通过运行
oc get route -n带有 OpenShift Operator 命名空间的名称来获取构建路由。路由末尾必须提供端口,并且应使用以下格式:[quayregistry-cr-name]-quay-builder-[ocp-namespace].[ocp-domain-name]:443。 - 2
- 如果
JOB_REGISTRATION_TIMEOUT参数设置过低,您可能会收到以下错误:failed to register job to build manager: rpc error: code = Unauthenticated desc = Invalid build token: Signature has expired。建议将此参数设置为至少 240。 - 3
- 如果您的 Redis 主机有密码或 SSL/TLS 证书,您必须相应地更新。
- 4
- 设置为与虚拟构建器命名空间的名称匹配,如
virtual-builders。 - 5
- 对于早期访问,
BUILDER_CONTAINER_IMAGE目前为quay.io/projectquay/quay-builder:3.7.0-rc.2。请注意,这可能会在早期访问窗口期间有所变化。如果发生这种情况,系统会提醒客户。 - 6
K8S_API_SERVER通过运行oc cluster-info获取。- 7
- 您必须手动创建并添加自定义 CA 证书,如
K8S_API_TLS_CA: /conf/stack/extra_ca_certs/build_cluster.crt。 - 8
- 如果未指定,则默认为
5120Mi。 - 9
- 对于虚拟构建,您必须确保集群中有足够的资源。如果未指定,则默认为
1000m。 - 10
- 如果未指定,则默认为
3968Mi。 - 11
- 如果未指定,则默认为
500m。 - 12
- 在运行
oc create sa时获取。
配置示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.2.2.2. 手动添加 SSL/TLS 证书 复制链接链接已复制到粘贴板!
由于配置工具的已知问题,您必须手动添加自定义 SSL/TLS 证书才能正确运行构建器。使用以下步骤手动添加自定义 SSL/TLS 证书。
有关创建 SSL/TLS 证书的更多信息,请参阅使用 SSL/TLS 证书的概念验证部署。
5.2.2.2.1. 创建并签名证书 复制链接链接已复制到粘贴板!
使用以下步骤创建并签署 SSL/TLS 证书。
流程
创建证书颁发机构并签署证书。如需更多信息,请参阅创建证书颁发机构。
openssl.cnf
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例命令
openssl genrsa -out rootCA.key 2048 openssl req -x509 -new -nodes -key rootCA.key -sha256 -days 1024 -out rootCA.pem openssl genrsa -out ssl.key 2048 openssl req -new -key ssl.key -out ssl.csr openssl x509 -req -in ssl.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out ssl.cert -days 356 -extensions v3_req -extfile openssl.cnf
$ openssl genrsa -out rootCA.key 2048 $ openssl req -x509 -new -nodes -key rootCA.key -sha256 -days 1024 -out rootCA.pem $ openssl genrsa -out ssl.key 2048 $ openssl req -new -key ssl.key -out ssl.csr $ openssl x509 -req -in ssl.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out ssl.cert -days 356 -extensions v3_req -extfile openssl.cnfCopy to Clipboard Copied! Toggle word wrap Toggle overflow
5.2.2.2.2. 将 TLS 设置为非受管状态 复制链接链接已复制到粘贴板!
使用以下步骤将 king:tls 设置为 unmanaged。
流程
在 Red Hat Quay Registry YAML 中,将
kind: tls设置为managed: false:- kind: tls managed: false- kind: tls managed: falseCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在 Events 页面中,更改会被阻断,直到设置适当的
config.yaml文件。例如:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.2.2.2.3. 创建临时 secret 复制链接链接已复制到粘贴板!
使用以下步骤为 CA 证书创建临时 secret。
流程
在 default 命名空间中为 CA 证书创建 secret:
oc create secret generic -n quay-enterprise temp-crt --from-file extra_ca_cert_build_cluster.crt
$ oc create secret generic -n quay-enterprise temp-crt --from-file extra_ca_cert_build_cluster.crtCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在 default 命名空间中为
ssl.key和ssl.cert文件创建一个 secret:oc create secret generic -n quay-enterprise quay-config-ssl --from-file ssl.cert --from-file ssl.key
$ oc create secret generic -n quay-enterprise quay-config-ssl --from-file ssl.cert --from-file ssl.keyCopy to Clipboard Copied! Toggle word wrap Toggle overflow
5.2.2.2.4. 将 secret 数据复制到配置 YAML 中 复制链接链接已复制到粘贴板!
使用以下步骤将 secret 数据复制到 config.yaml 文件中。
流程
- 在位于 Workloads → Secrets 的控制台 UI 中查找新 secret。
对于每个 secret,找到 YAML 视图:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在 UI 中找到 Red Hat Quay registry 配置捆绑包的 secret,或通过运行以下命令运行以下命令:
oc get quayregistries.quay.redhat.com -o jsonpath="{.items[0].spec.configBundleSecret}{'\n'}" -n quay-enterprise$ oc get quayregistries.quay.redhat.com -o jsonpath="{.items[0].spec.configBundleSecret}{'\n'}" -n quay-enterpriseCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在 OpenShift Container Platform 控制台中,选择配置捆绑包 secret 的 YAML 选项卡,并从您创建的两个 secret 中添加数据:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 点击 Save。
输入以下命令查看您的 pod 是否已重启:
oc get pods -n quay-enterprise
$ oc get pods -n quay-enterpriseCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重新配置 Red Hat Quay registry 后,输入以下命令来检查 Red Hat Quay 应用程序 pod 是否在运行:
oc get pods -n quay-enterprise
$ oc get pods -n quay-enterpriseCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在您的浏览器中,访问 registry 端点并验证证书是否已适当更新。例如:
Common Name (CN) example-registry-quay-quay-enterprise.apps.docs.quayteam.org Organisation (O) DOCS Organisational Unit (OU) QUAY
Common Name (CN) example-registry-quay-quay-enterprise.apps.docs.quayteam.org Organisation (O) DOCS Organisational Unit (OU) QUAYCopy to Clipboard Copied! Toggle word wrap Toggle overflow
5.2.2.3. 使用 UI 创建构建触发器 复制链接链接已复制到粘贴板!
使用以下步骤使用 UI 创建构建触发器。
流程
- 登录到您的 Red Hat Quay 存储库。
-
单击 Create New Repository 并创建一个新 registry,如
testrepo。 在 Repositories 页面上,单击导航窗格上的 Builds 选项卡。或者,直接使用对应的 URL:
https://example-registry-quay-quay-enterprise.apps.docs.quayteam.org/repository/quayadmin/testrepo?tab=builds
https://example-registry-quay-quay-enterprise.apps.docs.quayteam.org/repository/quayadmin/testrepo?tab=buildsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 重要在某些情况下,构建器可能会遇到解析主机名的问题。这个问题可能与作业对象上的
dnsPolicy设置为default。目前,这个问题还没有临时解决方案。它将在以后的 Red Hat Quay 版本中解决。- 点 Create Build Trigger → Custom Git Repository Push。
输入用于克隆 Git 存储库的 HTTPS 或 SSH 风格 URL,然后单击 Continue。例如:
https://github.com/gabriel-rh/actions_test.git
https://github.com/gabriel-rh/actions_test.gitCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 使用分支或标签名称选中 Tag 清单,然后单击 Continue。
-
在调用触发器时,输入要构建的 Dockerfile 的位置,如
/Dockerfile,然后单击 Continue。 -
输入 Docker 构建的上下文位置,如
/,然后单击 Continue。 - 如果保证,请创建一个 Robot 帐户。否则,点 Continue。
- 点 Continue 来验证参数。
- 在 Builds 页面中,点 Trigger Name 的 Options 图标,然后点 Run Trigger Now。
- 从 Git 存储库输入提交 SHA,然后单击 Start Build。
您可以点击 Build History 页面中的提交或运行
oc get pods -n virtual-builders来检查构建的状态。例如:oc get pods -n virtual-builders
$ oc get pods -n virtual-buildersCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME READY STATUS RESTARTS AGE f192fe4a-c802-4275-bcce-d2031e635126-9l2b5-25lg2 1/1 Running 0 7s
NAME READY STATUS RESTARTS AGE f192fe4a-c802-4275-bcce-d2031e635126-9l2b5-25lg2 1/1 Running 0 7sCopy to Clipboard Copied! Toggle word wrap Toggle overflow oc get pods -n virtual-builders
$ oc get pods -n virtual-buildersCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME READY STATUS RESTARTS AGE f192fe4a-c802-4275-bcce-d2031e635126-9l2b5-25lg2 1/1 Terminating 0 9s
NAME READY STATUS RESTARTS AGE f192fe4a-c802-4275-bcce-d2031e635126-9l2b5-25lg2 1/1 Terminating 0 9sCopy to Clipboard Copied! Toggle word wrap Toggle overflow oc get pods -n virtual-builders
$ oc get pods -n virtual-buildersCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
No resources found in virtual-builders namespace.
No resources found in virtual-builders namespace.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 构建完成后,您可以检查导航窗格上的 Tags 下标签的状态。
注意使用早期访问权限时,构建的完整构建日志和时间戳当前不可用。
5.2.2.4. 修改 AWS S3 存储桶 复制链接链接已复制到粘贴板!
如果使用 AWS S3 存储,则必须在运行构建器前在 AWS 控制台中更改存储桶。
流程
- 登录到位于 s3.console.aws.com 的 AWS 控制台。
-
在搜索栏中,搜索
S3,然后单击 S3。 -
单击存储桶的名称,如
myawsbucket。 - 单击权限选项卡。
在 Cross-origin 资源共享(CORS) 下,包括以下参数:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.2.2.5. 修改 Google Cloud Platform 对象存储桶 复制链接链接已复制到粘贴板!
目前,IBM Power 和 IBM Z 不支持修改 Google Cloud Platform 对象存储桶。
使用以下步骤为虚拟构建器配置跨原始资源共享(CORS)。
如果没有 CORS 配置,上传构建 Dockerfile 会失败。
流程
使用以下参考来为您的特定 CORS 需要创建一个 JSON 文件。例如:
cat gcp_cors.json
$ cat gcp_cors.jsonCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输入以下命令更新 GCP 存储桶:
gcloud storage buckets update gs://<bucket_name> --cors-file=./gcp_cors.json
$ gcloud storage buckets update gs://<bucket_name> --cors-file=./gcp_cors.jsonCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Updating Completed 1
Updating Completed 1Copy to Clipboard Copied! Toggle word wrap Toggle overflow 您可以运行以下命令来显示 GCP 存储桶的更新 CORS 配置:
gcloud storage buckets describe gs://<bucket_name> --format="default(cors)"
$ gcloud storage buckets describe gs://<bucket_name> --format="default(cors)"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
第 6 章 geo-replication 复制链接链接已复制到粘贴板!
目前,IBM Power 不支持 geo-replication 功能。
地理复制允许多个地理分散的 Red Hat Quay 部署,从客户端或用户的角度来看,作为单个 registry 工作。它显著提高了全局分布式 Red Hat Quay 设置中的推送和拉取性能。镜像数据会在后台异步复制,为客户端进行透明故障转移和重定向。
在独立和 Operator 部署中支持部署带有异地复制的 Red Hat Quay。
其他资源
- 有关异地复制功能架构的更多信息,请参阅 架构指南 , 其中包括技术图和高级别概述。
6.1. 异地复制功能 复制链接链接已复制到粘贴板!
- 配置异地复制后,容器镜像推送将写入该 Red Hat Quay 实例的首选存储引擎。这通常是区域内最接近的存储后端。
- 在初始推送后,镜像数据将在后台复制到其他存储引擎。
- 复制位置列表可以配置,它们可以是不同的存储后端。
- 镜像拉取将始终使用最接近的可用存储引擎,以最大化拉取性能。
- 如果复制尚未完成,拉取将使用源存储后端。
6.2. 地理复制要求和约束 复制链接链接已复制到粘贴板!
- 在地理复制设置中,Red Hat Quay 要求所有区域都可以读取和写入所有其他区域的对象存储。对象存储必须可以被所有其他区域访问。
- 如果一个地理复制站点的对象存储系统失败,该站点的 Red Hat Quay 部署必须被关闭,以便客户端由全局负载均衡器重定向到具有完整存储系统的剩余站点。否则,客户端将遇到拉取和推送失败。
- Red Hat Quay 没有内部感知连接的对象存储系统的健康状态或可用性。用户必须配置全局负载均衡器(LB)来监控分布式系统的健康状况,并根据存储状态将流量路由到不同的站点。
-
要检查 geo-replication 部署的状态,您必须使用
/health/endtoend检查点,该检查点用于全局健康监控。您必须使用/health/endtoend端点手动配置重定向。/health/instance端点仅检查本地实例健康状况。 - 如果一个站点的对象存储系统不可用,则其余站点或站点没有自动重定向到剩余的存储系统或系统。
- 地理复制(geo-replication)是异步的。如果一个站点永久丢失,则已存储在该站点的对象存储系统中,但在失败时还没有复制到剩余的站点的数据会丢失。
单个数据库,因此所有区域都共享所有元数据和 Red Hat Quay 配置。
地理复制不会复制数据库。如果出现停机,启用了地理复制功能的 Red Hat Quay 不会切换到另一个数据库。
- 单个 Redis 缓存在整个 Red Hat Quay 设置间共享,需要可以被所有 Red Hat Quay pod 访问。
-
所有区域应当使用相同的配置,但存储后端除外,这可以使用
QUAY_DISTRIBUTED_STORAGE_PREFERENCE环境变量明确进行配置。 - 地理复制需要每个区域中的对象存储。它不适用于本地存储。
- 每个区域必须能够访问每个区域中的每个存储引擎,这需要一个网络路径。
- 或者,可以使用存储代理选项。
- 整个存储后端(如所有 blob)被复制。相反,存储库镜像可以限制在存储库或镜像上。
- 所有 Red Hat Quay 实例都必须共享相同的入口点,通常是通过负载均衡器。
- 所有 Red Hat Quay 实例都必须具有相同的超级用户集合,因为它们在通用配置文件中定义。
在地理复制环境中,您的 Clair 配置可以设置为
unmanaged。非受管 Clair 数据库允许 Red Hat Quay Operator 在跨地复制环境中工作,其中多个 Operator 实例必须与同一数据库通信。如需更多信息,请参阅高级 Clair 配置。如果 Clair 配置保持
管理,则必须检索由 Operator 部署的 Clair 实例的配置文件。如需更多信息,请参阅 为 OpenShift Container Platform 上的 Clair 部署检索并解码 Clair 配置 secret。- geo-Replication 需要 SSL/TLS 证书和密钥。如需更多信息,请参阅 * Geo-Replication 需要 SSL/TLS 证书和密钥。如需更多信息,请参阅使用 SSL/TLS 证书部署概念验证。
如果无法满足上述要求,您应该使用两个或多个 Red Hat Quay 部署,并利用存储库镜像功能。
使用以下步骤在 OpenShift Container Platform 上设置 geo-replication。
流程
- 为 Red Hat Quay 部署 postgres 实例。
输入以下命令登录到数据库:
psql -U <username> -h <hostname> -p <port> -d <database_name>
psql -U <username> -h <hostname> -p <port> -d <database_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 为 Red Hat Quay 创建名为
quay的数据库。例如:CREATE DATABASE quay;
CREATE DATABASE quay;Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在数据库中启用 pg_trm 扩展
\c quay; CREATE EXTENSION IF NOT EXISTS pg_trgm;
\c quay; CREATE EXTENSION IF NOT EXISTS pg_trgm;Copy to Clipboard Copied! Toggle word wrap Toggle overflow 部署 Redis 实例:
注意- 如果您的云供应商有自己的服务,则部署 Redis 实例可能是必需的。
- 如果您使用 Builders,则需要部署 Redis 实例。
- 为 Redis 部署虚拟机
- 验证是否可以从运行 Red Hat Quay 的集群访问
- 必须打开端口 6379/TCP
在实例内运行 Redis
sudo dnf install -y podman podman run -d --name redis -p 6379:6379 redis
sudo dnf install -y podman podman run -d --name redis -p 6379:6379 redisCopy to Clipboard Copied! Toggle word wrap Toggle overflow
- 创建两个对象存储后端,每个集群一个。理想情况下,一个对象存储桶将接近第一个或主集群,另一个则运行更接近第二个或次要集群。
- 使用同一配置捆绑包部署集群,使用环境变量覆盖来为单个集群选择适当的存储后端。
- 配置负载均衡器,以提供集群的单个入口点。
使用以下步骤为 OpenShift Container Platform 上的 Red Hat Quay 配置 geo-replication。
流程
创建在集群之间共享的
config.yaml文件。此config.yaml文件包含通用 PostgreSQL、Redis 和存储后端的详情:geo-replication
config.yaml文件Copy to Clipboard Copied! Toggle word wrap Toggle overflow
>>>>>> 97f5827d (更新几个有问题的链接)
输入以下命令来创建
configBundleSecret:oc create secret generic --from-file config.yaml=./config.yaml georep-config-bundle
$ oc create secret generic --from-file config.yaml=./config.yaml georep-config-bundleCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在每个集群中,设置
configBundleSecret,并使用QUAY_DISTRIBUTED_STORAGE_PREFERENCE环境变量覆盖来为该集群配置适当的存储。例如:注意两个部署之间的
config.yaml文件都必须匹配。如果对一个集群进行更改,还必须更改它。US cluster
QuayRegistry示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意<<<<<<<<< HEAD 因为 SSL/TLS 是非受管状态,并且路由被管理,您必须直接在配置捆绑包中提供证书。如需更多信息,请参阅配置 TLS 和路由。
因为 SSL/TLS 是非受管的,且路由被管理,因此您必须直接在 config 捆绑包中提供证书。如需更多信息,请参阅配置 SSL/TLS 和 Routes. >>>>> 97f5827d (更新几个有问题的链接)
+
欧洲集群
+
因为 SSL/TLS 是非受管的,且路由被管理,因此您必须直接在 config 捆绑包中提供证书。如需更多信息,请参阅配置 SSL/TLS 和路由。
= 用于异地复制的混合存储
Red Hat Quay geo-replication 支持使用不同的和多个复制目标,例如在公有云上使用 AWS S3 存储,并在内部使用 Ceph 存储。这简化了从所有 Red Hat Quay pod 和集群节点授予对所有存储后端的访问权限的关键要求。因此,建议您使用以下方法:
- VPN 以防止内部存储的可见性,或者
- 只允许访问 Red Hat Quay 使用的特定存储桶的令牌对
这会导致 Red Hat Quay 公共云实例有权访问内部存储,但网络将被加密、保护,并使用 ACL,从而满足安全要求。
如果您无法实现这些安全措施,最好部署两个不同的 Red Hat Quay registry,并使用存储库镜像作为异地复制的替代选择。
= 在 OpenShift Container Platform 上升级 Red Hat Quay 的地理复制部署
使用以下步骤升级 OpenShift Container Platform 部署中的地理复制 Red Hat Quay。
- 当 OpenShift Container Platform 上的 geo-replicated Red Hat Quay 升级到下一个 y-stream 版本(例如,Red Hat Quay 3.7 → Red Hat Quay 3.8)时,您必须在升级前停止操作。
- 间歇性停机时间从一个 y-stream 版本升级到下一个版本。
- 在升级前,强烈建议在 OpenShift Container Platform 部署中备份 Red Hat Quay。
此流程假设您在三个或更多系统上运行 Red Hat Quay registry。在此过程中,我们将假设三个系统名为 System A、 System B 和 System C。系统 A 将作为部署 Red Hat Quay Operator 的主要系统。
您必须保持在 System A 上运行 Red Hat Quay registry。不要更新 System A 上的 quayregistry.yaml 文件。
等待
registry-quay-app、registry-quay-mirror和registry-clair-apppod 消失。输入以下命令检查其状态:oc get pods -n <quay-namespace>
oc get pods -n <quay-namespace>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
quay-operator.v3.7.1-6f9d859bd-p5ftc 1/1 Running 0 12m quayregistry-clair-postgres-7487f5bd86-xnxpr 1/1 Running 1 (12m ago) 12m quayregistry-quay-app-upgrade-xq2v6 0/1 Completed 0 12m quayregistry-quay-redis-84f888776f-hhgms 1/1 Running 0 12m
quay-operator.v3.7.1-6f9d859bd-p5ftc 1/1 Running 0 12m quayregistry-clair-postgres-7487f5bd86-xnxpr 1/1 Running 1 (12m ago) 12m quayregistry-quay-app-upgrade-xq2v6 0/1 Completed 0 12m quayregistry-quay-redis-84f888776f-hhgms 1/1 Running 0 12mCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 在 System A 中,启动 Red Hat Quay 升级到最新的 y-stream 版本。这是一个手动过程。有关升级安装的 Operator 的更多信息,请参阅 升级已安装的 Operator。有关 Red Hat Quay 升级路径的更多信息,请参阅升级 Red Hat Quay Operator。
-
安装新的 Red Hat Quay registry 后,集群上的必要升级会自动完成。之后,新的 Red Hat Quay Pod 使用最新的 y-stream 版本启动。另外,新的
Quaypod 会被调度并启动。 进入 Red Hat Quay UI 确认更新是否正常工作:
- 在 OpenShift 控制台中,导航到 Operators → Installed Operators,然后点击 Registry Endpoint 链接。
在 Red Hat Quay UI 可用前,不要执行以下步骤。在 System A 上,不要升级 System B 上的 Red Hat Quay registry 和 System C。
- 确认更新已在 System A 上正常工作,在 System B 和 System C 上启动 Red Hat Quay 升级。Operator 升级会导致升级 Red Hat Quay 安装,pod 被重启。
因为数据库模式对于新的 y-stream 安装是正确的,所以 System B 和 System C 上的新 pod 应该快速启动。
更新后,通过删除组件的
覆盖来恢复此流程中第 1 步中所做的更改。例如:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 如果在升级前将
horizontalpodautoscaler资源设置为true,或者您希望 Red Hat Quay 在资源短缺时扩展,请将其设为true。
= 从 OpenShift Container Platform 部署上的 Red Hat Quay 中删除地理复制站点
通过使用以下步骤,Red Hat Quay 管理员可以删除地理复制设置中的站点。
先决条件
- 已登陆到 OpenShift Container Platform。
-
您已配置了 Red Hat Quay 异地复制,至少有两个站点,例如
usstorage和eustorage。 - 每个站点都有自己的组织、存储库和镜像标签。
流程
运行以下命令,同步所有定义的站点之间的 Blob:
python -m util.backfillreplication
$ python -m util.backfillreplicationCopy to Clipboard Copied! Toggle word wrap Toggle overflow
在从 Red Hat Quay config.yaml 文件中删除存储引擎 前,您必须确保在 所有定义的站点间同步所有 Blob。
在运行此命令时,会创建复制作业,由复制工作程序提取。如果有需要复制的 Blob,该脚本会返回将复制的 Blob 的 UUID。如果您多次运行此命令,并且返回脚本的输出为空,并不意味着完成复制过程;这意味着没有更多 Blob 进行复制。客户应在继续前使用适当的 judgement,因为分配的时间复制取决于检测到的 Blob 数量。
或者,您可以使用第三方云工具(如 Microsoft Azure)来检查同步状态。
在继续之前,必须完成此步骤。
-
在 Red Hat Quay
config.yaml文件中,删除eu站点的storageDISTRIBUTED_STORAGE_CONFIG条目。 输入以下命令来标识
Quay应用程序 pod:oc get pod -n <quay_namespace>
$ oc get pod -n <quay_namespace>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
quay390usstorage-quay-app-5779ddc886-2drh2 quay390eustorage-quay-app-66969cd859-n2ssm
quay390usstorage-quay-app-5779ddc886-2drh2 quay390eustorage-quay-app-66969cd859-n2ssmCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输入以下命令在
usstoragepod 中打开交互式 shell 会话:oc rsh quay390usstorage-quay-app-5779ddc886-2drh2
$ oc rsh quay390usstorage-quay-app-5779ddc886-2drh2Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
输入以下命令永久删除
eustorage站点:
以下操作无法撤消。请谨慎使用。
+
python -m util.removelocation eustorage
sh-4.4$ python -m util.removelocation eustorage
+ .输出示例
+
= 备份和恢复由 Red Hat Quay Operator 管理的 Red Hat Quay
当由 OpenShift Container Platform 上的 Red Hat Quay Operator 管理时,请使用本节中的内容备份和恢复 Red Hat Quay。
= 可选:在 OpenShift Container Platform 上为 Red Hat Quay 启用只读模式
在 OpenShift Container Platform 部署中为 Red Hat Quay 启用只读模式,您可以管理 registry 的操作。管理员可以启用只读模式来限制对 registry 的写入访问,这有助于确保数据完整性,降低维护窗口期间的风险,并提供对 registry 数据的意外修改的保护。它还有助于确保您的 Red Hat Quay registry 保持在线状态,并可供用户使用。
在备份和恢复时,您需要在 OpenShift Container Platform 部署中缩减 Red Hat Quay。这会导致在备份期间服务不可用,这在某些情况下可能无法接受。启用只读模式可确保在 OpenShift Container Platform 部署中的 Red Hat Quay 的备份和恢复过程中服务可用性。
先决条件
如果您使用 Red Hat Enterprise Linux (RHEL) 7.x:
- 您已启用了 Red Hat Software Collections List (RHSCL)。
- 已安装 Python 3.6。
-
您已下载了
virtualenv软件包。 -
已安装
gitCLI。
如果您使用 Red Hat Enterprise Linux (RHEL) 8:
- 您已在机器上安装了 Python 3。
-
您已下载了
python3-virtualenv软件包。 -
已安装
gitCLI。
-
您已克隆了
https://github.com/quay/quay.git软件仓库。 -
已安装
ocCLI。 -
您可以使用
cluster-admin权限访问集群。
== 在 OpenShift Container Platform 上为 Red Hat Quay 创建服务密钥
Red Hat Quay 使用服务密钥与各种组件进行通信。这些密钥用于签署已完成的请求,如请求扫描镜像、登录、存储访问等。
流程
输入以下命令获取 Red Hat Quay pod 列表:
oc get pods -n <namespace>
$ oc get pods -n <namespace>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输入以下命令打开到
Quay容器的远程 shell 会话:oc rsh example-registry-quay-app-76c8f55467-52wjz
$ oc rsh example-registry-quay-app-76c8f55467-52wjzCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输入以下命令来创建所需的服务密钥:
python3 tools/generatekeypair.py quay-readonly
sh-4.4$ python3 tools/generatekeypair.py quay-readonlyCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Writing public key to quay-readonly.jwk Writing key ID to quay-readonly.kid Writing private key to quay-readonly.pem
Writing public key to quay-readonly.jwk Writing key ID to quay-readonly.kid Writing private key to quay-readonly.pemCopy to Clipboard Copied! Toggle word wrap Toggle overflow
== 将键添加到 PostgreSQL 数据库
使用以下步骤将服务密钥添加到 PostgreSQL 数据库中。
先决条件
- 您已创建了服务密钥。
流程
输入以下命令输入 Red Hat Quay 数据库环境:
oc rsh example-registry-quay-app-76c8f55467-52wjz psql -U <database_username> -d <database_name>
$ oc rsh example-registry-quay-app-76c8f55467-52wjz psql -U <database_username> -d <database_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输入以下命令显示
servicekeyapproval的批准类型和相关备注:quay=# select * from servicekeyapproval;
quay=# select * from servicekeyapproval;Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输入以下查询在 Red Hat Quay 数据库中添加服务密钥:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
INSERT 0 1
INSERT 0 1Copy to Clipboard Copied! Toggle word wrap Toggle overflow 接下来,使用以下查询添加密钥批准:
quay=# INSERT INTO servicekeyapproval ('approval_type', 'approved_date', 'notes') VALUES ("ServiceKeyApprovalType.SUPERUSER", "CURRENT_DATE", {include_notes_here_on_why_this_is_being_added});quay=# INSERT INTO servicekeyapproval ('approval_type', 'approved_date', 'notes') VALUES ("ServiceKeyApprovalType.SUPERUSER", "CURRENT_DATE", {include_notes_here_on_why_this_is_being_added});Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
INSERT 0 1
INSERT 0 1Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将所创建的服务键行中的
approval_字段设置为所创建的服务密钥批准中的 id 字段。您可以使用以下idSELECT语句来获取必要的 ID:UPDATE servicekey SET approval_id = (SELECT id FROM servicekeyapproval WHERE approval_type = 'ServiceKeyApprovalType.SUPERUSER') WHERE name = 'quay-readonly';
UPDATE servicekey SET approval_id = (SELECT id FROM servicekeyapproval WHERE approval_type = 'ServiceKeyApprovalType.SUPERUSER') WHERE name = 'quay-readonly';Copy to Clipboard Copied! Toggle word wrap Toggle overflow UPDATE 1
UPDATE 1Copy to Clipboard Copied! Toggle word wrap Toggle overflow
== 在 OpenShift Container Platform 中配置只读模式 Red Hat Quay
创建服务密钥并添加到 PostgreSQL 数据库后,您必须在 OpenShift Container Platform 部署中重启 Quay 容器。
以只读模式在 OpenShift Container Platform 上部署 Red Hat Quay 需要修改存储在 OpenShift Container Platform 集群中的 secret。强烈建议您在更改 secret 前创建 secret 的备份。
先决条件
- 您已创建了服务密钥,并将它们添加到 PostgreSQL 数据库中。
流程
输入以下命令在 OpenShift Container Platform 部署中读取 Red Hat Quay 的 secret 名称:
oc get deployment -o yaml <quay_main_app_deployment_name>
$ oc get deployment -o yaml <quay_main_app_deployment_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用
base64命令对quay-readonly.kid和quay-readonly.pem文件进行编码:base64 -w0 quay-readonly.kid
$ base64 -w0 quay-readonly.kidCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
ZjUyNDFm...
ZjUyNDFm...Copy to Clipboard Copied! Toggle word wrap Toggle overflow base64 -w0 quay-readonly.pem
$ base64 -w0 quay-readonly.pemCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
LS0tLS1CRUdJTiBSU0E...
LS0tLS1CRUdJTiBSU0E...Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输入以下命令来获取当前的配置捆绑包和 secret:
oc get secret quay-config-secret-name -o json | jq '.data."config.yaml"' | cut -d '"' -f2 | base64 -d -w0 > config.yaml
$ oc get secret quay-config-secret-name -o json | jq '.data."config.yaml"' | cut -d '"' -f2 | base64 -d -w0 > config.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 编辑
config.yaml文件并添加以下信息:# ... REGISTRY_STATE: readonly INSTANCE_SERVICE_KEY_KID_LOCATION: 'conf/stack/quay-readonly.kid' INSTANCE_SERVICE_KEY_LOCATION: 'conf/stack/quay-readonly.pem' # ...
# ... REGISTRY_STATE: readonly INSTANCE_SERVICE_KEY_KID_LOCATION: 'conf/stack/quay-readonly.kid' INSTANCE_SERVICE_KEY_LOCATION: 'conf/stack/quay-readonly.pem' # ...Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令保存文件和
base64编码:base64 -w0 quay-config.yaml
$ base64 -w0 quay-config.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将 Red Hat Quay Operator pod 缩减为
0。这样可确保 Operator 在编辑后不会协调 secret。oc scale --replicas=0 deployment quay-operator -n openshift-operators
$ oc scale --replicas=0 deployment quay-operator -n openshift-operatorsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 编辑 secret 使其包含新内容:
oc edit secret quay-config-secret-name -n quay-namespace
$ oc edit secret quay-config-secret-name -n quay-namespaceCopy to Clipboard Copied! Toggle word wrap Toggle overflow Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在 OpenShift Container Platform 以只读模式部署 Red Hat Quay 时,您可以安全地管理 registry 的操作并执行如备份和恢复等操作。
=== 从只读部署扩展 OpenShift Container Platform 上的 Red Hat Quay
当您不再希望 OpenShift Container Platform 上的 Red Hat Quay 处于只读模式时,您可以扩展部署,并从 secret 中删除添加的内容。
流程
编辑
config.yaml文件并删除以下信息:# ... REGISTRY_STATE: readonly INSTANCE_SERVICE_KEY_KID_LOCATION: 'conf/stack/quay-readonly.kid' INSTANCE_SERVICE_KEY_LOCATION: 'conf/stack/quay-readonly.pem' # ...
# ... REGISTRY_STATE: readonly INSTANCE_SERVICE_KEY_KID_LOCATION: 'conf/stack/quay-readonly.kid' INSTANCE_SERVICE_KEY_LOCATION: 'conf/stack/quay-readonly.pem' # ...Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输入以下命令扩展 Red Hat Quay Operator:
oc scale --replicas=1 deployment quay-operator -n openshift-operators
oc scale --replicas=1 deployment quay-operator -n openshift-operatorsCopy to Clipboard Copied! Toggle word wrap Toggle overflow
= 备份 Red Hat Quay
数据库备份应该定期使用 PostgreSQL 镜像中提供的工具或您自己的备份基础架构来执行。Red Hat Quay Operator 并不保证 PostgreSQL 数据库已被备份。
此流程涵盖了备份 Red Hat Quay PostgreSQL 数据库。它没有涵盖 Clair PostgreSQL 数据库的备份。严格说,不需要备份 Clair PostgreSQL 数据库,因为它可以被重新创建。如果您选择从头开始重新创建它,请等待在 Red Hat Quay 部署中的所有镜像扫描后重新填充信息。在此停机时间中,安全报告不可用。
如果您要考虑备份 Clair PostgreSQL 数据库,则必须考虑其大小取决于 Red Hat Quay 中存储的镜像数量。因此,数据库可能会非常大。
此流程描述了如何使用 Operator 在 OpenShift Container Platform 上创建 Red Hat Quay 备份。
先决条件
-
使用 Red Hat Quay Operator 在 OpenShift Container Platform 上部署健康的 Red Hat Quay。状态条件
Available设置为true。 -
组件
quay,postgres和objectstorage设置为managed: true -
如果组件
clair设置为managed: true,则组件clairpostgres也被设置为managed: true(从 Red Hat Quay v3.7 或更高版本开始)
如果您的部署包含部分非受管数据库或存储组件,并且您使用外部服务 PostgreSQL 或 S3 兼容对象存储来运行 Red Hat Quay 部署,您必须引用服务提供商或供应商文档来创建数据的备份。您可以参考本指南中描述的工具,作为如何备份外部 PostgreSQL 数据库或对象存储的起点。
== Red Hat Quay 配置备份
使用以下步骤备份 Red Hat Quay 配置。
流程
要通过导出
QuayRegistry自定义资源来支持 QuayRegistry 自定义资源,请输入以下命令:oc get quayregistry <quay_registry_name> -n <quay_namespace> -o yaml > quay-registry.yaml
$ oc get quayregistry <quay_registry_name> -n <quay_namespace> -o yaml > quay-registry.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 编辑生成的
quayregistry.yaml并删除 status 部分和以下 metadata 字段:metadata.creationTimestamp metadata.finalizers metadata.generation metadata.resourceVersion metadata.uid
metadata.creationTimestamp metadata.finalizers metadata.generation metadata.resourceVersion metadata.uidCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 输入以下命令备份受管密钥 secret:
如果您正在运行早于 Red Hat Quay 3.7.0 的版本,可以跳过这一步。第一次部署 Red Hat Quay 时会自动生成一些 secret。它们存储在 QuayRegistry 资源的命名空间中名为 < ;quay_registry_name>-quay-registry-managed-secret-keys 的 secret 中。
+
oc get secret -n <quay_namespace> <quay_registry_name>-quay-registry-managed-secret-keys -o yaml > managed_secret_keys.yaml
$ oc get secret -n <quay_namespace> <quay_registry_name>-quay-registry-managed-secret-keys -o yaml > managed_secret_keys.yaml
编辑生成的
managed_secret_keys.yaml文件,并删除条目metadata.ownerReferences。您的managed_secret_keys.yaml文件应类似于如下:Copy to Clipboard Copied! Toggle word wrap Toggle overflow data属性下的所有信息都应保持不变。输入以下命令重定向当前的
Quay配置文件:oc get secret -n <quay-namespace> $(oc get quayregistry <quay_registry_name> -n <quay_namespace> -o jsonpath='{.spec.configBundleSecret}') -o yaml > config-bundle.yaml$ oc get secret -n <quay-namespace> $(oc get quayregistry <quay_registry_name> -n <quay_namespace> -o jsonpath='{.spec.configBundleSecret}') -o yaml > config-bundle.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 备份挂载到
Quaypod 中的/conf/stack/config.yaml文件:oc exec -it quay_pod_name -- cat /conf/stack/config.yaml > quay_config.yaml
$ oc exec -it quay_pod_name -- cat /conf/stack/config.yaml > quay_config.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 获取
Quay数据库名称:oc -n <quay_namespace> rsh $(oc get pod -l app=quay -o NAME -n <quay_namespace> |head -n 1) cat /conf/stack/config.yaml|awk -F"/" '/^DB_URI/ {print $4}'$ oc -n <quay_namespace> rsh $(oc get pod -l app=quay -o NAME -n <quay_namespace> |head -n 1) cat /conf/stack/config.yaml|awk -F"/" '/^DB_URI/ {print $4}'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
quayregistry-quay-database
quayregistry-quay-databaseCopy to Clipboard Copied! Toggle word wrap Toggle overflow
== 缩减 Red Hat Quay 部署
使用以下步骤缩减 Red Hat Quay 部署。
需要此步骤来创建 Red Hat Quay 部署状态的一致性备份。不要省略此步骤,包括在 PostgreSQL 数据库和/或 S3 兼容对象存储由外部服务(由 Red Hat Quay Operator 管理)提供的设置中。
流程
根据 Red Hat Quay 部署的版本,使用以下选项之一缩减部署。
对于 Operator 版本 3.7 及更新版本: 通过禁用自动扩展并覆盖 Red Hat Quay、mirror worker 和 Clair (如果受管)的副本数来缩减 Red Hat Quay 部署。您的
QuayRegistry资源应类似于如下:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 对于 Operator 版本 3.6 及更早版本 :首先缩减 Red Hat Quay registry,然后是管理的 Red Hat Quay 资源,以缩减 Red Hat Quay 部署:
oc scale --replicas=0 deployment $(oc get deployment -n <quay-operator-namespace>|awk '/^quay-operator/ {print $1}') -n <quay-operator-namespace>$ oc scale --replicas=0 deployment $(oc get deployment -n <quay-operator-namespace>|awk '/^quay-operator/ {print $1}') -n <quay-operator-namespace>Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc scale --replicas=0 deployment $(oc get deployment -n <quay-namespace>|awk '/quay-app/ {print $1}') -n <quay-namespace>$ oc scale --replicas=0 deployment $(oc get deployment -n <quay-namespace>|awk '/quay-app/ {print $1}') -n <quay-namespace>Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc scale --replicas=0 deployment $(oc get deployment -n <quay-namespace>|awk '/quay-mirror/ {print $1}') -n <quay-namespace>$ oc scale --replicas=0 deployment $(oc get deployment -n <quay-namespace>|awk '/quay-mirror/ {print $1}') -n <quay-namespace>Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc scale --replicas=0 deployment $(oc get deployment -n <quay-namespace>|awk '/clair-app/ {print $1}') -n <quay-namespace>$ oc scale --replicas=0 deployment $(oc get deployment -n <quay-namespace>|awk '/clair-app/ {print $1}') -n <quay-namespace>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
等待
registry-quay-app、registry-quay-mirror和registry-clair-apppod (取决于您设置为由 Red Hat Quay Operator 管理的组件)消失。您可以运行以下命令来检查其状态:oc get pods -n <quay_namespace>
$ oc get pods -n <quay_namespace>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例:
oc get pod
$ oc get podCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
quay-operator.v3.7.1-6f9d859bd-p5ftc 1/1 Running 0 12m quayregistry-clair-postgres-7487f5bd86-xnxpr 1/1 Running 1 (12m ago) 12m quayregistry-quay-app-upgrade-xq2v6 0/1 Completed 0 12m quayregistry-quay-database-859d5445ff-cqthr 1/1 Running 0 12m quayregistry-quay-redis-84f888776f-hhgms 1/1 Running 0 12m
quay-operator.v3.7.1-6f9d859bd-p5ftc 1/1 Running 0 12m quayregistry-clair-postgres-7487f5bd86-xnxpr 1/1 Running 1 (12m ago) 12m quayregistry-quay-app-upgrade-xq2v6 0/1 Completed 0 12m quayregistry-quay-database-859d5445ff-cqthr 1/1 Running 0 12m quayregistry-quay-redis-84f888776f-hhgms 1/1 Running 0 12mCopy to Clipboard Copied! Toggle word wrap Toggle overflow
== 备份 Red Hat Quay 管理的数据库
使用以下步骤备份 Red Hat Quay 管理的数据库。
如果您的 Red Hat Quay 部署配置了外部或未管理,PostgreSQL 数据库,请参阅您的厂商的文档,了解如何创建这些数据库的一致性备份。
流程
识别 Quay PostgreSQL pod 名称:
oc get pod -l quay-component=postgres -n <quay_namespace> -o jsonpath='{.items[0].metadata.name}'$ oc get pod -l quay-component=postgres -n <quay_namespace> -o jsonpath='{.items[0].metadata.name}'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例:
quayregistry-quay-database-59f54bb7-58xs7
quayregistry-quay-database-59f54bb7-58xs7Copy to Clipboard Copied! Toggle word wrap Toggle overflow 下载备份数据库:
oc -n <quay_namespace> exec quayregistry-quay-database-59f54bb7-58xs7 -- /usr/bin/pg_dump -C quayregistry-quay-database > backup.sql
$ oc -n <quay_namespace> exec quayregistry-quay-database-59f54bb7-58xs7 -- /usr/bin/pg_dump -C quayregistry-quay-database > backup.sqlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
=== 备份 Red Hat Quay 管理的对象存储
使用以下步骤备份 Red Hat Quay 管理的对象存储。本节中的说明适用于以下配置:
- 独立、多云对象网关配置
- OpenShift Data Foundation 存储需要 Red Hat Quay Operator 通过 ObjectStorageBucketClaim API 从中置备 S3 对象存储存储桶
如果您的 Red Hat Quay 部署配置了外部(无限)对象存储,请参阅您的厂商的文档,了解如何创建 Quay 存储桶的内容副本。
流程
输入以下命令解码并导出
AWS_ACCESS_KEY_ID:export AWS_ACCESS_KEY_ID=$(oc get secret -l app=noobaa -n <quay-namespace> -o jsonpath='{.items[0].data.AWS_ACCESS_KEY_ID}' |base64 -d)$ export AWS_ACCESS_KEY_ID=$(oc get secret -l app=noobaa -n <quay-namespace> -o jsonpath='{.items[0].data.AWS_ACCESS_KEY_ID}' |base64 -d)Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输入以下命令解码并导出
AWS_SECRET_ACCESS_KEY_ID:export AWS_SECRET_ACCESS_KEY=$(oc get secret -l app=noobaa -n <quay-namespace> -o jsonpath='{.items[0].data.AWS_SECRET_ACCESS_KEY}' |base64 -d)$ export AWS_SECRET_ACCESS_KEY=$(oc get secret -l app=noobaa -n <quay-namespace> -o jsonpath='{.items[0].data.AWS_SECRET_ACCESS_KEY}' |base64 -d)Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建新目录:
mkdir blobs
$ mkdir blobsCopy to Clipboard Copied! Toggle word wrap Toggle overflow
您还可以使用 rclone 或 sc3md 而不是 AWS 命令行工具。
输入以下命令将所有 Blob 复制到目录中:
aws s3 sync --no-verify-ssl --endpoint https://$(oc get route s3 -n openshift-storage -o jsonpath='{.spec.host}') s3://$(oc get cm -l app=noobaa -n <quay-namespace> -o jsonpath='{.items[0].data.BUCKET_NAME}') ./blobs$ aws s3 sync --no-verify-ssl --endpoint https://$(oc get route s3 -n openshift-storage -o jsonpath='{.spec.host}') s3://$(oc get cm -l app=noobaa -n <quay-namespace> -o jsonpath='{.items[0].data.BUCKET_NAME}') ./blobsCopy to Clipboard Copied! Toggle word wrap Toggle overflow
== 扩展 Red Hat Quay 部署
根据 Red Hat Quay 部署的版本,使用以下选项之一扩展部署:
对于 Operator 版本 3.7 及更新版本: 如果需要,通过重新启用自动扩展(如果需要),并删除 Quay、镜像 worker 和 Clair 的副本覆盖来扩展 Red Hat Quay 部署。您的
QuayRegistry资源应类似于如下:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 对于 Operator 版本 3.6 及更早版本: 通过扩展 Red Hat Quay registry 来扩展 Red Hat Quay 部署:
oc scale --replicas=1 deployment $(oc get deployment -n <quay_operator_namespace> | awk '/^quay-operator/ {print $1}') -n <quay_operator_namespace>$ oc scale --replicas=1 deployment $(oc get deployment -n <quay_operator_namespace> | awk '/^quay-operator/ {print $1}') -n <quay_operator_namespace>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
输入以下命令检查 Red Hat Quay 部署的状态:
oc wait quayregistry registry --for=condition=Available=true -n <quay_namespace>
$ oc wait quayregistry registry --for=condition=Available=true -n <quay_namespace>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
= 恢复 Red Hat Quay
当 Red Hat Quay Operator 管理数据库时,请使用以下步骤恢复 Red Hat Quay。它应该在执行 Red Hat Quay registry 备份后执行。如需更多信息,请参阅 备份 Red Hat Quay。
先决条件
- Red Hat Quay 使用 Red Hat Quay Operator 部署到 OpenShift Container Platform 上。
- 根据 备份 Red Hat Quay 部分中的说明创建由 Red Hat Quay Operator 管理的 Red Hat Quay 配置的备份。
- 您的 Red Hat Quay 数据库已备份。
- Red Hat Quay 使用的对象存储桶已被备份。
-
组件
quay,postgres和objectstorage设置为managed: true -
如果组件
clair设置为managed: true,则组件clairpostgres也被设置为managed: true(从 Red Hat Quay v3.7 或更高版本开始) - 在 OpenShift Container Platform 集群上的目标命名空间中没有运行由 Red Hat Quay Operator 管理的 Red Hat Quay 部署
如果您的部署包含部分非受管数据库或存储组件,并且您使用外部服务 PostgreSQL 或 S3 兼容对象存储来运行 Red Hat Quay 部署,则必须参考服务提供商或供应商文档从备份中恢复其数据,然后再恢复 Red Hat Quay
== 从备份中恢复 Red Hat Quay 及其配置
使用以下步骤从备份中恢复 Red Hat Quay 及其配置文件。
这些说明假设您遵循了 备份 Red Hat Quay 指南中的流程,并创建同名的备份文件。
流程
输入以下命令恢复备份的 Red Hat Quay 配置:
oc create -f ./config-bundle.yaml
$ oc create -f ./config-bundle.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
如果您接收到错误 Error from server (AlreadyExists): error when creating "./config-bundle.yaml": secrets "config-bundle-secret" already exists,您需要使用 $ oc delete Secret config-bundle-secret -n <quay-namespace> 删除现有的资源,并使用 $ oc create -f ./config-bundle.yaml 重新创建它。
输入以下命令从备份中恢复生成的密钥:
oc create -f ./managed-secret-keys.yaml
$ oc create -f ./managed-secret-keys.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 恢复
QuayRegistry自定义资源:oc create -f ./quay-registry.yaml
$ oc create -f ./quay-registry.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 检查 Red Hat Quay 部署的状态并等待它可用:
oc wait quayregistry registry --for=condition=Available=true -n <quay-namespace>
$ oc wait quayregistry registry --for=condition=Available=true -n <quay-namespace>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
== 缩减 Red Hat Quay 部署
使用以下步骤缩减 Red Hat Quay 部署。
流程
根据 Red Hat Quay 部署的版本,使用以下选项之一缩减部署。
对于 Operator 版本 3.7 及更新版本: 通过禁用自动扩展并覆盖 Quay、mirror worker 和 Clair (如果托管)的副本数来缩减 Red Hat Quay 部署。您的
QuayRegistry资源应类似于如下:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 对于 Operator 版本 3.6 及更早版本: 首先缩减 Red Hat Quay registry,然后是管理的 Red Hat Quay 资源,以缩减 Red Hat Quay 部署:
oc scale --replicas=0 deployment $(oc get deployment -n <quay-operator-namespace>|awk '/^quay-operator/ {print $1}') -n <quay-operator-namespace>$ oc scale --replicas=0 deployment $(oc get deployment -n <quay-operator-namespace>|awk '/^quay-operator/ {print $1}') -n <quay-operator-namespace>Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc scale --replicas=0 deployment $(oc get deployment -n <quay-namespace>|awk '/quay-app/ {print $1}') -n <quay-namespace>$ oc scale --replicas=0 deployment $(oc get deployment -n <quay-namespace>|awk '/quay-app/ {print $1}') -n <quay-namespace>Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc scale --replicas=0 deployment $(oc get deployment -n <quay-namespace>|awk '/quay-mirror/ {print $1}') -n <quay-namespace>$ oc scale --replicas=0 deployment $(oc get deployment -n <quay-namespace>|awk '/quay-mirror/ {print $1}') -n <quay-namespace>Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc scale --replicas=0 deployment $(oc get deployment -n <quay-namespace>|awk '/clair-app/ {print $1}') -n <quay-namespace>$ oc scale --replicas=0 deployment $(oc get deployment -n <quay-namespace>|awk '/clair-app/ {print $1}') -n <quay-namespace>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
等待
registry-quay-app、registry-quay-mirror和registry-clair-apppod (取决于您设置为由 Red Hat Quay Operator 管理的组件)消失。您可以运行以下命令来检查其状态:oc get pods -n <quay-namespace>
$ oc get pods -n <quay-namespace>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例:
registry-quay-config-editor-77847fc4f5-nsbbv 1/1 Running 0 9m1s registry-quay-database-66969cd859-n2ssm 1/1 Running 0 6d1h registry-quay-redis-7cc5f6c977-956g8 1/1 Running 0 5d21h
registry-quay-config-editor-77847fc4f5-nsbbv 1/1 Running 0 9m1s registry-quay-database-66969cd859-n2ssm 1/1 Running 0 6d1h registry-quay-redis-7cc5f6c977-956g8 1/1 Running 0 5d21hCopy to Clipboard Copied! Toggle word wrap Toggle overflow
== 恢复 Red Hat Quay 数据库
使用以下步骤恢复 Red Hat Quay 数据库。
流程
输入以下命令识别您的
Quay数据库 pod:oc get pod -l quay-component=postgres -n <quay-namespace> -o jsonpath='{.items[0].metadata.name}'$ oc get pod -l quay-component=postgres -n <quay-namespace> -o jsonpath='{.items[0].metadata.name}'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例:
quayregistry-quay-database-59f54bb7-58xs7
quayregistry-quay-database-59f54bb7-58xs7Copy to Clipboard Copied! Toggle word wrap Toggle overflow 通过从本地环境复制并复制到 pod 来上传备份:
oc cp ./backup.sql -n <quay-namespace> registry-quay-database-66969cd859-n2ssm:/tmp/backup.sql
$ oc cp ./backup.sql -n <quay-namespace> registry-quay-database-66969cd859-n2ssm:/tmp/backup.sqlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输入以下命令为数据库打开远程终端:
oc rsh -n <quay-namespace> registry-quay-database-66969cd859-n2ssm
$ oc rsh -n <quay-namespace> registry-quay-database-66969cd859-n2ssmCopy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来输入 psql :
bash-4.4$ psql
bash-4.4$ psqlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 您可以运行以下命令来列出数据库:
postgres=# \l
postgres=# \lCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
List of databases Name | Owner | Encoding | Collate | Ctype | Access privileges ----------------------------+----------------------------+----------+------------+------------+----------------------- postgres | postgres | UTF8 | en_US.utf8 | en_US.utf8 | quayregistry-quay-database | quayregistry-quay-database | UTF8 | en_US.utf8 | en_US.utf8 |List of databases Name | Owner | Encoding | Collate | Ctype | Access privileges ----------------------------+----------------------------+----------+------------+------------+----------------------- postgres | postgres | UTF8 | en_US.utf8 | en_US.utf8 | quayregistry-quay-database | quayregistry-quay-database | UTF8 | en_US.utf8 | en_US.utf8 |Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输入以下命令丢弃数据库:
postgres=# DROP DATABASE "quayregistry-quay-database";
postgres=# DROP DATABASE "quayregistry-quay-database";Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
DROP DATABASE
DROP DATABASECopy to Clipboard Copied! Toggle word wrap Toggle overflow 退出 postgres CLI 以重新输入 bash-4.4:
\q
\qCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将您的 PostgreSQL 数据库重定向到备份数据库:
psql < /tmp/backup.sql
sh-4.4$ psql < /tmp/backup.sqlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输入以下命令退出 bash :
exit
sh-4.4$ exitCopy to Clipboard Copied! Toggle word wrap Toggle overflow
== 恢复您的 Red Hat Quay 对象存储数据
使用以下步骤恢复 Red Hat Quay 对象存储数据。
流程
输入以下命令导出
AWS_ACCESS_KEY_ID:export AWS_ACCESS_KEY_ID=$(oc get secret -l app=noobaa -n <quay-namespace> -o jsonpath='{.items[0].data.AWS_ACCESS_KEY_ID}' |base64 -d)$ export AWS_ACCESS_KEY_ID=$(oc get secret -l app=noobaa -n <quay-namespace> -o jsonpath='{.items[0].data.AWS_ACCESS_KEY_ID}' |base64 -d)Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输入以下命令导出
AWS_SECRET_ACCESS_KEY:export AWS_SECRET_ACCESS_KEY=$(oc get secret -l app=noobaa -n <quay-namespace> -o jsonpath='{.items[0].data.AWS_SECRET_ACCESS_KEY}' |base64 -d)$ export AWS_SECRET_ACCESS_KEY=$(oc get secret -l app=noobaa -n <quay-namespace> -o jsonpath='{.items[0].data.AWS_SECRET_ACCESS_KEY}' |base64 -d)Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,将所有 Blob 上传到存储桶:
aws s3 sync --no-verify-ssl --endpoint https://$(oc get route s3 -n openshift-storage -o jsonpath='{.spec.host}') ./blobs s3://$(oc get cm -l app=noobaa -n <quay-namespace> -o jsonpath='{.items[0].data.BUCKET_NAME}')$ aws s3 sync --no-verify-ssl --endpoint https://$(oc get route s3 -n openshift-storage -o jsonpath='{.spec.host}') ./blobs s3://$(oc get cm -l app=noobaa -n <quay-namespace> -o jsonpath='{.items[0].data.BUCKET_NAME}')Copy to Clipboard Copied! Toggle word wrap Toggle overflow
您还可以使用 rclone 或 sc3md 而不是 AWS 命令行工具。
== 扩展 Red Hat Quay 部署
根据 Red Hat Quay 部署的版本,使用以下选项之一扩展部署:
对于 Operator 版本 3.7 及更新版本: 如果需要,通过重新启用自动扩展(如果需要),并删除 Quay、镜像 worker 和 Clair 的副本覆盖来扩展 Red Hat Quay 部署。您的
QuayRegistry资源应类似于如下:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 对于 Operator 版本 3.6 及更早版本: 再次扩展 Red Hat Quay registry 来扩展 Red Hat Quay 部署:
oc scale --replicas=1 deployment $(oc get deployment -n <quay-operator-namespace> | awk '/^quay-operator/ {print $1}') -n <quay-operator-namespace>$ oc scale --replicas=1 deployment $(oc get deployment -n <quay-operator-namespace> | awk '/^quay-operator/ {print $1}') -n <quay-operator-namespace>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
检查 Red Hat Quay 部署的状态:
oc wait quayregistry registry --for=condition=Available=true -n <quay-namespace>
$ oc wait quayregistry registry --for=condition=Available=true -n <quay-namespace>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
= 卷大小覆盖
您可以指定为受管组件置备的存储资源的大小。Clair 和 PostgreSQL 数据库的默认大小为 50Gi。现在,您可以选择足够大的容量前期,要么出于性能原因,或者在存储后端没有调整大小的情况下选择容量。
在以下示例中,Clair 和 Quay PostgreSQL 数据库的卷大小已设置为 70Gi :
clairpostgres 组件的卷大小不能被覆盖。要覆盖 clairpostgres 组件,您必须覆盖 clair 组件。这是一个已知问题,并将在以后的 Red Hat Quay 版本中解决。(PROJQUAY-4301)
= 使用 Container Security Operator 扫描 pod 镜像
Container Security Operator (CSO)是 OpenShift Container Platform 和其他 Kubernetes 平台上提供的 Clair 安全扫描程序的一个附加组件。通过 CSO,用户可以扫描与活跃 pod 关联的容器镜像以了解已知漏洞。
没有 Red Hat Quay 和 Clair 时 CSO 无法正常工作。
Container Security Operator (CSO)包括以下功能:
- 监视与指定或所有命名空间上的 pod 关联的容器。
- 查询容器来自漏洞信息的容器 registry,只要镜像的 registry 支持镜像扫描,如带有 Clair 扫描的 Red Hat Quay registry。
-
通过 Kubernetes API 中的
ImageManifestVuln对象公开漏洞。
要在 Kubernetes 上安装 CSO 的说明,请从 Container Security OperatorHub.io 页面中选择 Install 按钮。
== 在 OpenShift Container Platform 中下载并运行 Container Security Operator
使用以下步骤下载 Container Security Operator (CSO)。
在以下步骤中,CSO 安装在 marketplace-operators 命名空间中。这允许在 OpenShift Container Platform 集群的所有命名空间中使用 CSO。
流程
- 在 OpenShift Container Platform 控制台页面中,选择 Operators → OperatorHub 并搜索 Container Security Operator。
- 选择 Container Security Operator,然后选择 Install 进入 Create Operator Subscription 页面。
- 检查设置(所有命名空间和自动批准策略),然后选择 Subscribe。在 Installed Operators 屏幕中几分钟后会出现 Container Security。
可选:您可以在 CSO 中添加自定义证书。在本例中,在当前目录中创建一个名为
quay.crt的证书。然后,运行以下命令将证书添加到 CSO 中:oc create secret generic container-security-operator-extra-certs --from-file=quay.crt -n openshift-operators
$ oc create secret generic container-security-operator-extra-certs --from-file=quay.crt -n openshift-operatorsCopy to Clipboard Copied! Toggle word wrap Toggle overflow
您必须重启 Operator pod 才能使新证书生效。
进入到 Home → Overview。至镜像漏洞的链接会出现在 status 部分中,以及目前发现的漏洞数量的列表。选择查看安全分类的链接,如下图所示:
Container Security Operator 目前为 Red Hat 安全公告提供了有问题的链接。例如,可能会提供以下链接 :https://access.redhat.com/errata/RHSA-2023:1842%20https://access.redhat.com/security/cve/CVE-2023-23916。URL 中的 %20 代表空格字符,但它目前将两个 URL 组合为一个不完整的 URL,例如 https://access.redhat.com/errata/RHSA-2023:1842 和 https://access.redhat.com/security/cve/CVE-2023-23916。作为临时解决方案,您可以将每个 URL 复制到您的浏览器中,以导航到正确的页面。这是一个已知问题,并将在以后的 Red Hat Quay 版本中解决。
对于任何检测到的安全漏洞,您可以在此时进行两个操作之一:
选择到这个漏洞的链接。您会进入容器 registry、Red Hat Quay 或其他来自容器的 registry,您可以在其中查看有关漏洞的信息。下图显示了从 Quay.io registry 中检测到的漏洞示例:
选择 namespaces 链接以进入 Image Manifest Vulnerabilities 页面,您可以在其中查看所选镜像的名称以及运行该镜像的所有命名空间。下图显示了特定存在安全漏洞的镜像在两个命名空间中运行:
执行此流程后,您可以了解哪些镜像存在安全漏洞,您必须做什么才能修复这些漏洞,以及镜像运行的每个命名空间。了解这一点,您可以执行以下操作:
- 警报运行需要更正漏洞的镜像的用户。
- 通过删除启动镜像所在 pod 的部署或对象来停止镜像运行。
如果删除 pod,可能需要几分钟时间才能在仪表板上重置漏洞。
== 通过 CLI 查询镜像漏洞
使用以下步骤从命令行界面(CLI)查询镜像漏洞。
流程
输入以下命令查询检测到的漏洞:
oc get vuln --all-namespaces
$ oc get vuln --all-namespacesCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAMESPACE NAME AGE default sha256.ca90... 6m56s skynet sha256.ca90... 9m37s
NAMESPACE NAME AGE default sha256.ca90... 6m56s skynet sha256.ca90... 9m37sCopy to Clipboard Copied! Toggle word wrap Toggle overflow 可选。要显示特定漏洞的详情,请识别特定漏洞及其命名空间,并使用
oc describe命令。以下示例显示了一个活跃的容器,其镜像包含带有漏洞的 RPM 软件包:oc describe vuln --namespace <namespace> sha256.ac50e3752...
$ oc describe vuln --namespace <namespace> sha256.ac50e3752...Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
== 卸载 Container Security Operator
要从 OpenShift Container Platform 部署中卸载 Container Security Operator,您必须卸载 Operator 并删除 imagemanifestvulns.secscan.quay.redhat.com 自定义资源定义(CRD)。如果没有删除 CRD,OpenShift Container Platform Overview 页面中仍会报告镜像漏洞。
流程
- 在 OpenShift Container Platform web 控制台中,点 Operators → Installed Operators。
- 点 Container Security Operator 的 kebab 菜单。
- 点击 Uninstall Operator。在弹出窗口中点 Uninstall 确认您的决定。
输入以下命令删除
imagemanifestvulns.secscan.quay.redhat.com自定义资源定义:oc delete customresourcedefinition imagemanifestvulns.secscan.quay.redhat.com
$ oc delete customresourcedefinition imagemanifestvulns.secscan.quay.redhat.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
customresourcedefinition.apiextensions.k8s.io "imagemanifestvulns.secscan.quay.redhat.com" deleted
customresourcedefinition.apiextensions.k8s.io "imagemanifestvulns.secscan.quay.redhat.com" deletedCopy to Clipboard Copied! Toggle word wrap Toggle overflow
= 为 Red Hat Quay 配置 AWS STS
对于独立的 Red Hat Quay 部署和 OpenShift Container Platform 上的 Red Hat Quay 部署,支持 Amazon Web Services (AWS)安全令牌服务(STS)。AWS STS 是一个 web 服务,用于为 AWS Identity and Access Management (IAM)用户以及您验证或 联邦用户请求临时的、有有限权限的凭证。此功能对于使用 Amazon S3 作为对象存储的集群很有用,允许 Red Hat Quay 使用 STS 协议与 Amazon S3 进行身份验证,这可以增强集群的整体安全性,并帮助确保正确验证敏感数据的访问。
配置 AWS STS 是一个多步骤过程,需要创建 AWS IAM 用户、创建 S3 角色并配置 Red Hat Quay config.yaml 文件使其包含正确的资源。
使用以下步骤为 Red Hat Quay 配置 AWS STS。
== 创建 IAM 用户
使用以下步骤创建 IAM 用户。
流程
- 登录到 Amazon Web Services (AWS)控制台,再进入 Identity and Access Management (IAM)控制台。
- 在导航窗格中,在 Access management 下点 Users。
点 Create User 并输入以下信息:
-
输入有效的用户名,如
quay-user。 - 对于 Permissions 选项,请单击 Add user to group。
-
输入有效的用户名,如
- 在 review and create 页面中,单击 Create user。您将被重定向到 Users 页面。
- 单击用户名,如 quay-user。
-
复制用户的 ARN,例如
arn:aws:iam::123492922789:user/quay-user。 - 在同一页面上,点 Security credentials 选项卡。
- 导航到 Access keys。
- 点 Create access key。
- 在 Access key 最佳实践和 alternatives 页面中,点 Command Line Interface (CLI),然后选中确认框。然后单击"下一步"。
- 可选。在 Set description tag - optional 页面中,输入描述描述。
- 点 Create access key。
- 复制并存储 access key 和 secret access key。
这是唯一可以查看或下载 secret 访问密钥的时间。您不能在以后恢复它。但是,您可以随时创建新的访问密钥。
- 点 Done。
== 创建 S3 角色
使用以下步骤为 AWS STS 创建 S3 角色。
先决条件
- 您已创建了 IAM 用户并存储了访问密钥和 secret 访问密钥。
流程
- 如果您还没有,点 Dashboard 进入 IAM 仪表板。
- 在导航窗格中,单击 Access management 下的 Roles。
单击 Create role。
点 Custom Trust Policy,它显示可编辑的 JSON 策略。默认情况下,它显示以下信息:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
在
Principal配置 字段中,添加 AWS ARN 信息。例如:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 点击 Next。
-
在 Add permissions 页面中,在搜索框中输入
AmazonS3FullAccess。选中该框,将该策略添加到 S3 角色,然后单击 Next。 在 Name, review, and create 页中输入以下信息:
-
输入角色名称,如
example-role。 - 可选。添加描述。
-
输入角色名称,如
- 点 Create role 按钮。您可以导航到 Roles 页面。在角色名称下,新创建的 S3 应该可用。
= 在 OpenShift Container Platform 上配置 Red Hat Quay 以使用 AWS STS
使用以下步骤编辑 OpenShift Container Platform config.yaml 文件中的 Red Hat Quay 以使用 AWS STS。
您还可以直接编辑 Red Hat Quay on OpenShift Container Platform config.yaml 文件,而不是使用 OpenShift Container Platform UI。
先决条件
- 您已配置了角色 ARN。
- 您已生成了一个用户访问密钥。
- 您已生成了一个 User Secret Key。
流程
- 在 OpenShift Container Platform 部署的 Home 页面中,点 Operators → Installed Operators。
- 点 Red Hat Quay。
- 点 Quay Registry,然后点 Red Hat Quay registry 的名称。
- 在 Config Bundle Secret 下,单击 registry 配置捆绑包的名称,例如 quay-registry-config-bundle-qet56。
- 在配置捆绑包页面中,单击 Actions 以显示下拉菜单。然后单击 Edit Secret。
使用以下信息更新
config.yaml文件的DISTRIBUTED_STORAGE_CONFIG字段:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 点击 Save。
验证
标记示例镜像,如
busybox,它将推送到存储库。例如:podman tag docker.io/library/busybox <quay-server.example.com>/<organization_name>/busybox:test
$ podman tag docker.io/library/busybox <quay-server.example.com>/<organization_name>/busybox:testCopy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来推送示例镜像:
podman push <quay-server.example.com>/<organization_name>/busybox:test
$ podman push <quay-server.example.com>/<organization_name>/busybox:testCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 进入您在 Red Hat Quay registry → Tags 中将镜像推送到的机构,验证推送是否成功。
- 导航到 Amazon Web Services (AWS)控制台并找到您的 s3 存储桶。
- 点 s3 存储桶的名称。
- 在 Objects 页面上,单击 datastorage/。
在 datastorage/ 页面中,应该看到以下资源:
- sha256/
上传/
这些资源表示推送成功,并且 AWS STS 已正确配置。
= 将 Red Hat Quay 与 OpenShift Container Platform 与 Quay Bridge Operator 集成
Quay Bridge Operator 将集成的 OpenShift Container Platform registry 的功能复制到新的 Red Hat Quay registry 中。使用 Quay Bridge Operator,您可以将 OpenShift Container Platform 中的集成容器 registry 替换为 Red Hat Quay registry。
Quay Bridge Operator 启用的功能包括:
- 将 OpenShift Container Platform 命名空间同步为 Red Hat Quay 组织。
- 为每个 default 命名空间服务帐户创建机器人帐户。
-
为每个创建的机器人帐户创建 secret,并将每个机器人 secret 与一个服务账户关联作为
Mountable和Image Pull Secret。 - 将 OpenShift Container Platform 镜像流同步为 Red Hat Quay 存储库。
- 自动重写新构建,利用镜像流输出到 Red Hat Quay。
- 构建完成后自动导入镜像流标签。
通过使用以下步骤,您可以在 Red Hat Quay 和 OpenShift Container Platform 集群间启用双向通信。
= 为 Quay Bridge Operator 设置 Red Hat Quay Bridge
在此过程中,您将创建一个专用的 Red Hat Quay 机构,并从该机构中创建的新应用程序创建一个 OAuth 令牌,以便在 OpenShift Container Platform 中使用 Quay Bridge Operator。
流程
- 通过 Web UI 登录 Red Hat Quay。
- 选择要配置外部应用程序的组织。
- 在导航窗格中,选择 Applications。
-
选择 Create New Application,并为新应用程序输入一个名称,如
openshift。 -
在 OAuth Applications 页面中,选择您的应用程序,如
openshift。 - 在导航窗格中,选择 Generate Token。
选择以下字段:
- 管理机构
- 管理软件仓库
- 创建软件仓库
- 查看所有可见的存储库
- 对任何可访问的软件仓库的读/写
- 管理用户
- 读取用户信息
- 检查分配的权限。
- 选择 Authorize Application,然后选择 Authorize Application 确认授权。
- 保存生成的访问令牌。
Red Hat Quay 不提供令牌管理。您无法列出令牌、删除令牌或修改令牌。生成的访问令牌仅显示一次,在关闭页面后无法恢复。
= 在 OpenShift Container Platform 上安装 Quay Bridge Operator
在此过程中,您将在 OpenShift Container Platform 上安装 Quay Bridge Operator。
先决条件
- 您已设置 Red Hat Quay 并获取了一个 访问令牌。
- 具有集群管理员权限的 OpenShift Container Platform 4.6 或更高版本环境。
流程
- 打开 Web 控制台的 Administrator 视角,并进入到导航窗格上的 Operators → OperatorHub。
-
搜索
Quay Bridge Operator,点 Quay Bridge Operator 标题,然后点 Install。 - 选择要安装的版本,如 stable-3.7,然后单击 Install。
- 安装完成后,点 View Operator 进入 Quay Bridge Operator 的 Details 页面。或者,您可以点 Installed Operators → Red Hat Quay Bridge Operator 进入 Details 页面。
= 为 OAuth 令牌创建 OpenShift Container Platform secret
在此过程中,您将添加之前获取的访问令牌来与 Red Hat Quay 部署通信。访问令牌将作为 secret 存储在 OpenShift Container Platform 中。
先决条件
- 您已设置 Red Hat Quay 并获取了访问令牌。
- 您已在 OpenShift Container Platform 上部署了 Quay Bridge Operator。
- 具有集群管理员权限的 OpenShift Container Platform 4.6 或更高版本环境。
- 已安装 OpenShift CLI(oc)。
流程
在
openshift-operators命名空间中创建一个包含访问令牌的 secret:oc create secret -n openshift-operators generic <secret-name> --from-literal=token=<access_token>
$ oc create secret -n openshift-operators generic <secret-name> --from-literal=token=<access_token>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
= 创建 QuayIntegration 自定义资源
在此过程中,您将创建一个 QuayIntegration 自定义资源,该资源可以从 Web 控制台或命令行完成。
先决条件
- 您已设置 Red Hat Quay 并获取了访问令牌。
- 您已在 OpenShift Container Platform 上部署了 Quay Bridge Operator。
- 具有集群管理员权限的 OpenShift Container Platform 4.6 或更高版本环境。
- 可选: 已安装 OpenShift CLI (oc)。
== 可选:使用 CLI 创建 QuayIntegration 自定义资源
按照以下步骤,使用命令行创建 QuayIntegration 自定义资源。
流程
创建一个
quay-integration.yaml:touch quay-integration.yaml
$ touch quay-integration.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 对
QuayIntegration自定义资源的最小部署使用以下配置:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
有关所有配置字段的列表,请参阅"QuayIntegration 配置字段"。
创建
QuayIntegration自定义资源:oc create -f quay-integration.yaml
$ oc create -f quay-integration.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
== 可选:使用 Web 控制台创建 QuayIntegration 自定义资源
按照以下步骤,使用 Web 控制台创建 QuayIntegration 自定义资源。
流程
- 打开 Web 控制台的 Administrator 视角,并导航到 Operators → Installed Operators。
- 点 Red Hat Quay Bridge Operator。
- 在 Quay Bridge Operator 的 Details 页面中,点 Quay Integration API 卡上的 Create Instance。
在 Create QuayIntegration 页面中,在 Form view 或 YAML view 中输入以下所需信息:
-
Name :引用
QuayIntegration自定义资源对象的名称。 -
集群 ID:与此集群关联的 ID。此值应该在整个生态系统中唯一。如果未指定,则默认为
openshift。 - credentials secret :引用包含之前创建的令牌的 secret 的命名空间和名称。
- Quay 主机名 : Quay registry 的主机名。
-
Name :引用
有关所有配置字段的列表,请参阅"QuayIntegration 配置字段"
创建 QuayIntegration 自定义资源后,您的 OpenShift Container Platform 集群将链接到 Red Hat Quay 实例。应该为 OpenShift Container Platform 环境的相关命名空间创建 Red Hat Quay registry 中的机构。
= 使用 Quay Bridge Operator
使用以下步骤使用 Quay Bridge Operator。
先决条件
- 已安装 Red Hat Quay Operator。
- 以集群管理员身份登录 OpenShift Container Platform。
- 已登陆到 Red Hat Quay registry。
- 已安装 Quay Bridge Operator。
-
您已配置了
QuayIntegration自定义资源。
流程
输入以下命令创建一个名为
e2e-demo的新 OpenShift Container Platform 项目:oc new-project e2e-demo
$ oc new-project e2e-demoCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
创建新项目后,会在 Red Hat Quay 中创建一个新机构。导航到 Red Hat Quay registry,并确认您已创建一个名为
openshift_e2e-demo的新机构。
如果 QuayIntegration 资源中的 clusterID 使用不同的值,则机构的 openshift 值可能会有所不同。
- 在 Red Hat Quay UI 上,单击新组织的名称,如 openshift_e2e-demo。
在导航窗格中,单击 Robot Accounts。作为新项目的一部分,应创建以下 Robot Accounts:
- openshift_e2e-demo+deployer
- openshift_e2e-demo+default
- openshift_e2e-demo+builder
输入以下命令确认创建了包含与适用 Robot Accounts 关联的 Docker 配置的三个 secret:
oc get secrets builder-quay-openshift deployer-quay-openshift default-quay-openshift
$ oc get secrets builder-quay-openshift deployer-quay-openshift default-quay-openshiftCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
stevsmit@stevsmit ocp-quay $ oc get secrets builder-quay-openshift deployer-quay-openshift default-quay-openshift NAME TYPE DATA AGE builder-quay-openshift kubernetes.io/dockerconfigjson 1 77m deployer-quay-openshift kubernetes.io/dockerconfigjson 1 77m default-quay-openshift kubernetes.io/dockerconfigjson 1 77m
stevsmit@stevsmit ocp-quay $ oc get secrets builder-quay-openshift deployer-quay-openshift default-quay-openshift NAME TYPE DATA AGE builder-quay-openshift kubernetes.io/dockerconfigjson 1 77m deployer-quay-openshift kubernetes.io/dockerconfigjson 1 77m default-quay-openshift kubernetes.io/dockerconfigjson 1 77mCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输入以下命令显示有关
构建器ServiceAccount (SA)的详细信息,包括其 secret、令牌过期和相关角色和角色绑定。这样可确保项目通过 Quay Bridge Operator 集成。oc describe sa builder default deployer
$ oc describe sa builder default deployerCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输入以下命令来创建和部署名为
httpd-template的新应用程序:oc new-app --template=httpd-example
$ oc new-app --template=httpd-exampleCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行此命令后,会创建
BuildConfig、ImageStream、Service、Route和DeploymentConfig资源。创建ImageStream资源时,会在 Red Hat Quay 中创建关联的存储库。例如:
当
openshift命名空间中的 Apache HTTPD 镜像被解析时,BuildConfig的ImageChangeTrigger会触发新的构建。创建新 Build 后,MutatingWebhookConfiguration会自动重写输出以指向 Red Hat Quay。您可以运行以下命令来查询构建的输出字段来确认构建已完成:oc get build httpd-example-1 --template='{{ .spec.output.to.name }}'$ oc get build httpd-example-1 --template='{{ .spec.output.to.name }}'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
example-registry-quay-quay-enterprise.apps.quay-ocp.gcp.quaydev.org/openshift_e2e-demo/httpd-example:latest
example-registry-quay-quay-enterprise.apps.quay-ocp.gcp.quaydev.org/openshift_e2e-demo/httpd-example:latestCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
在 Red Hat Quay UI 中,导航到
openshift_e2e-demo机构,再选择 httpd-example 存储库。 -
单击导航窗格中的 Tags,并确认
latest标签已成功推送。 输入以下命令来确保 latest 标签已被解决:
oc describe is httpd-example
$ oc describe is httpd-exampleCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ImageStream被解决后,应触发新部署。输入以下命令生成 URL 输出:oc get route httpd-example --template='{{ .spec.host }}'$ oc get route httpd-example --template='{{ .spec.host }}'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
httpd-example-e2e-demo.apps.quay-ocp.gcp.quaydev.org
httpd-example-e2e-demo.apps.quay-ocp.gcp.quaydev.orgCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 访问此 URL。如果显示示例网页,则代表部署成功。
输入以下命令删除资源并清理您的 Red Hat Quay 存储库:
oc delete project e2e-demo
$ oc delete project e2e-demoCopy to Clipboard Copied! Toggle word wrap Toggle overflow
命令会等待项目资源被删除。这可以通过在上述命令中添加- -wait=false 来绕过
-
命令完成后,导航到您的 Red Hat Quay 存储库,并确认
openshift_e2e-demo机构不再可用。
其他资源
- 最佳实践规定客户端和镜像 registry 之间的所有通信都通过安全方法促进。通信应利用各方之间证书信任的 HTTPS/TLS。虽然 Red Hat Quay 可以配置为提供不安全的配置,但应在服务器上使用正确的证书并在客户端上配置。按照 OpenShift Container Platform 文档 在容器运行时级别添加和删除证书。
= 在 OpenShift Container Platform 上的 Red Hat Quay 上部署 IPv6
目前,IBM Power 和 IBM Z 不支持在 OpenShift Container Platform 上的 Red Hat Quay 上部署 IPv6。
OpenShift Container Platform 部署上的 Red Hat Quay 现在可在只支持 IPv6 的位置提供,如 Telco 和 Edge 环境。
有关已知限制列表,请参阅 IPv6 限制
== 启用 IPv6 协议系列
使用以下步骤在 Red Hat Quay 部署中启用 IPv6 支持。
先决条件
- 您已将 Red Hat Quay 更新至至少 3.8 版本。
- 您的主机和容器软件平台(Docker,Podman)必须配置为支持 IPv6。
流程
在部署的
config.yaml文件中,添加FEATURE_LISTEN_IP_VERSION参数,并将其设置为IPv6,例如:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 启动或重启您的 Red Hat Quay 部署。
输入以下命令检查您的部署是否侦听 IPv6:
curl <quay_endpoint>/health/instance {"data":{"services":{"auth":true,"database":true,"disk_space":true,"registry_gunicorn":true,"service_key":true,"web_gunicorn":true}},"status_code":200}$ curl <quay_endpoint>/health/instance {"data":{"services":{"auth":true,"database":true,"disk_space":true,"registry_gunicorn":true,"service_key":true,"web_gunicorn":true}},"status_code":200}Copy to Clipboard Copied! Toggle word wrap Toggle overflow
在部署 config.yaml 中启用 IPv6 后,所有 Red Hat Quay 功能都可以正常使用,只要您的环境被配置为使用 IPv6,并且不会被 IPv6 和双栈限制阻止。
如果您的环境被配置为 IPv4,但 FEATURE_LISTEN_IP_VERSION 配置字段被设置为 IPv6,Red Hat Quay 将无法部署。
== IPv6 限制
目前,尝试使用通用 Microsoft Azure Blob Storage 配置配置 Red Hat Quay 部署在 IPv6 单堆栈环境中无法正常工作。因为 Microsoft Azure Blob Storage 的端点不支持 IPv6,所以这个问题没有临时解决方案。
如需更多信息,请参阅 PROJQUAY-4433。
目前,尝试使用 Amazon S3 CloudFront 配置 Red Hat Quay 部署无法在 IPv6 单堆栈环境中工作。因为 Amazon S3 CloudFront 的端点不支持 IPv6,所以这个问题没有临时解决方案。
如需更多信息,请参阅 PROJQUAY-4470。
= 当在 Kubernetes 上部署 Red Hat Quay 时添加自定义 SSL/TLS 证书
在 Kubernetes 上部署时,Red Hat Quay 将 secret 中的挂载为卷来存储配置资产。目前,这会破坏超级用户面板的上传证书功能。
作为临时解决方案,在部署 Red Hat Quay 后,base64 编码证书可以添加到 secret 中。
当在 Kubernetes 上部署 Red Hat Quay 时,请使用以下步骤添加自定义 SSL/TLS 证书。
先决条件
- 已部署 Red Hat Quay。
-
您有一个自定义
ca.crt文件。
流程
输入以下命令对 SSL/TLS 证书的内容进行 Base64 编码:
cat ca.crt | base64 -w 0
$ cat ca.crt | base64 -w 0Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
...c1psWGpqeGlPQmNEWkJPMjJ5d0pDemVnR2QNCnRsbW9JdEF4YnFSdVd3PT0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=
...c1psWGpqeGlPQmNEWkJPMjJ5d0pDemVnR2QNCnRsbW9JdEF4YnFSdVd3PT0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输入以下
kubectl命令来编辑quay-enterprise-config-secret文件:kubectl --namespace quay-enterprise edit secret/quay-enterprise-config-secret
$ kubectl --namespace quay-enterprise edit secret/quay-enterprise-config-secretCopy to Clipboard Copied! Toggle word wrap Toggle overflow 为证书添加一个条目,并粘贴条目下的完整
base64编码字符串er。例如:custom-cert.crt: c1psWGpqeGlPQmNEWkJPMjJ5d0pDemVnR2QNCnRsbW9JdEF4YnFSdVd3PT0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=
custom-cert.crt: c1psWGpqeGlPQmNEWkJPMjJ5d0pDemVnR2QNCnRsbW9JdEF4YnFSdVd3PT0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用
kubectl delete命令删除所有 Red Hat Quay pod。例如:kubectl delete pod quay-operator.v3.7.1-6f9d859bd-p5ftc quayregistry-clair-postgres-7487f5bd86-xnxpr quayregistry-quay-app-upgrade-xq2v6 quayregistry-quay-database-859d5445ff-cqthr quayregistry-quay-redis-84f888776f-hhgms
$ kubectl delete pod quay-operator.v3.7.1-6f9d859bd-p5ftc quayregistry-clair-postgres-7487f5bd86-xnxpr quayregistry-quay-app-upgrade-xq2v6 quayregistry-quay-database-859d5445ff-cqthr quayregistry-quay-redis-84f888776f-hhgmsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 之后,Red Hat Quay 部署会自动将 pod 替换为新证书数据。
= 升级 Red Hat Quay Operator 概述
Red Hat Quay Operator 遵循一个同步 版本方案,这意味着每个 Operator 版本都与 Red Hat Quay 的版本及其管理的组件相关联。QuayRegistry 自定义资源上没有设置 要部署 Red Hat Quay 版本的字段。Operator 只能部署所有组件的单个版本。选择这个方案是为了确保所有组件都可以正常工作,并降低 Operator 的复杂性,了解如何管理 Kubernetes 上许多不同版本的 Red Hat Quay 版本。
== Operator Lifecycle Manager
应该使用 Operator Lifecycle Manager (OLM) 安装和升级 Red Hat Quay Operator。当使用默认 approvalStrategy: Automatic 创建订阅时,每当有新版本可用时,OLM 将自动升级 Red Hat Quay Operator。
当 Operator Lifecycle Manager 安装 Red Hat Quay Operator 时,可能会将其配置为支持自动或手动升级。这个选项会在安装过程中显示在 Red Hat Quay Operator 的 OperatorHub 页面中。它还可以通过 approvalStrategy 字段在 Red Hat Quay Operator Subscription 对象中找到。选择 Automatic 意味着,您的 Red Hat Quay Operator 会在发布新的 Operator 版本时自动升级。如果这不是需要的,则应选择 Manual 批准策略。
== 升级 Red Hat Quay Operator
在 OpenShift Container Platform 中升级已安装的 Operator 的标准方法包括在 升级安装的 Operator 中。
通常,Red Hat Quay 仅支持从以前的(N-1)次版本进行升级。例如,不支持直接从 Red Hat Quay 3.0.5 升级到 3.5 的最新版本。相反,用户需要升级如下:
- 3.0.5 → 3.1.3
- 3.1.3 → 3.2.2
- 3.2.2 → 3.3.4
- 3.3.4 → 3.4.z
- 3.4.z → 3.5.z
这需要确保正确完成所有必要的数据库迁移,并在升级过程中按照正确顺序完成。
在某些情况下,Red Hat Quay 支持从以前的(N-2, N-3)次版本直接、单步升级。这简化了旧版本的客户的升级步骤。Red Hat Quay 3.12 支持以下升级路径:
- 3.10.z → 3.12.z
- 3.11.z → 3.12.z
有关 Red Hat Quay 的独立部署中的用户,希望升级到 3.12,请参阅 独立 升级指南。
===将 Red Hat Quay 升级到 3.12
要将 Red Hat Quay 从一个次版本升级到下一个次版本,如 3.11 → 3.12,您必须更改 Red Hat Quay Operator 的更新频道。
流程
- 在 OpenShift Container Platform Web 控制台中导航至 Operators → Installed Operators。
- 点 Red Hat Quay Operator。
- 进入到 Subscription 选项卡。
- 在 Subscription details 下,点 Update channel。
- 选择 stable-3.12 → Save。
- 在 Upgrade status 下检查新安装的进度。在继续操作前,等待升级 状态变为 1。
- 在 OpenShift Container Platform 集群中,进入到 Workloads → Pods。现有 pod 应该被终止,或正在终止。
-
等待以下 pod (负责升级数据库和现有数据的模式迁移)到启动:
clair-postgres-upgrade、quay-postgres-upgrade、quay-postgres-upgrade和quay-app-upgrade。 -
在
clair-postgres-upgrade、quay-postgres-upgrade和quay-app-upgradepod 标记为 Completed 后,您的 Red Hat Quay 部署剩余的 pod 会启动。这大约需要十分钟。 -
验证
quay-database和clair-postgrespod 现在使用postgresql-13镜像。 -
在
quay-apppod 标记为 Running 后,就可以访问 Red Hat Quay registry。
=== 升级到下一个次版本
对于 z 流升级,例如 3.11.1 → 3.11.2,用户在安装过程中最初选择的主次频道中会发布更新。执行 z 流升级的过程取决于上述 approvalStrategy。如果批准策略被设置为 Automatic,Red Hat Quay Operator 会自动升级到最新的 z 流。这会导致自动的、将 Red Hat Quay 更新部署到较新的 z 流,而无需停机。否则,必须在开始安装前手动批准更新。
如果您的 Red Hat Quay 部署从一个 y-stream 升级到下一个版本,例如从 3.8.10 → 3.8.11,则不得将升级频道从 stable-3.8 切换到 stable-3.9。在 y-stream 升级过程中更改升级频道将不允许 Red Hat Quay 升级到 3.9。这是一个已知问题,并将在以后的 Red Hat Quay 版本中解决。
更新 Red Hat Quay 3.8 → 3.9 时,Operator 会自动将 Clair 和 Red Hat Quay 的 PostgreSQL 数据库从版本 10 升级到版本 13。
- 这个升级是不可逆的。强烈建议您升级到 PostgreSQL 13。PostgreSQL 10 在 2022 年 11 月 10 日已发布,并不再被支持。如需更多信息,请参阅 PostgreSQL 版本策略。
-
默认情况下,Red Hat Quay 配置为从 PostgreSQL 10 中删除旧的持久性卷声明(PVC)。要禁用此设置并备份旧的 PVC,您必须在
quay-operatorSubscription对象中将POSTGRES_UPGRADE_RETAIN_BACKUP设置为True。
先决条件
- 您已在 OpenShift Container Platform 中安装了 Red Hat Quay 3.8。
100 GB 可用,额外存储.
在升级过程中,会置备额外的持久性卷声明(PVC)来存储迁移的数据。这有助于防止对用户数据进行破坏性操作。升级过程为 Red Hat Quay 数据库升级和 Clair 数据库升级推出 50 GB 的 PVC。
流程
可选。通过将
POSTGRES_UPGRADE_RETAIN_BACKUP设置为Trueyourquay-operatorSubscription对象来备份来自 PostgreSQL 10 的旧 PVC。例如:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 在 OpenShift Container Platform Web 控制台中导航至 Operators → Installed Operators。
- 点 Red Hat Quay Operator。
- 进入到 Subscription 选项卡。
- 在 Subscription details 下,点 Update channel。
- 选择 stable-3.9 并保存更改。
- 在 Upgrade status 下检查新安装的进度。在继续操作前,等待升级 状态变为 1。
- 在 OpenShift Container Platform 集群中,进入到 Workloads → Pods。现有 pod 应该被终止,或正在终止。
-
等待以下 pod (负责升级数据库和现有数据的模式迁移)到启动:
clair-postgres-upgrade、quay-postgres-upgrade、quay-postgres-upgrade和quay-app-upgrade。 -
在
clair-postgres-upgrade、quay-postgres-upgrade和quay-app-upgradepod 标记为 Completed 后,您的 Red Hat Quay 部署剩余的 pod 会启动。这大约需要十分钟。 -
验证
quay-database和clair-postgrespod 现在使用postgresql-13镜像。 -
在
quay-apppod 标记为 Running 后,就可以访问 Red Hat Quay registry。
=== 直接从 3.3.z 或 3.4.z 升级到 3.6
下面的部分提供了从 Red Hat Quay 3.3.z 或 3.4.z 升级到 3.6 时的重要信息。
==== 在启用了边缘路由的情况下升级
- 在以前的版本中,当运行启用了边缘路由的 Red Hat Quay 的 3.3.z 版本时,用户无法升级到 Red Hat Quay 的 3.4.z 版本。这个问题已在 Red Hat Quay 3.6 发行版本中解决。
当从 3.3.z 升级到 3.6 时,如果在 Red Hat Quay 3.3.z 部署中将
tls.termination设置为none,它将改为使用 TLS 边缘终止的 HTTPS,并使用默认集群通配符证书。例如:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
==== 带有自定义 SSL/TLS 证书/密钥对,而无需 Subject Alternative Names
从 Red Hat Quay 3.3.4 直接升级到 Red Hat Quay 3.6 时,使用其自身 SSL/TLS 证书/密钥对时没有 Subject Alternative Names (SANs)的客户存在问题。在升级到 Red Hat Quay 3.6 的过程中,部署会被阻断,并显示 Red Hat Quay SSL/TLS 证书必须具有 SAN 的错误信息。
如果可能,您应该使用 SAN 中的正确主机名重新生成 SSL/TLS 证书。可能的临时解决方案是在升级后在 quay-app、quay-upgrade 和 quay-config-editor pod 中定义环境变量,以启用 CommonName 匹配:
GODEBUG=x509ignoreCN=0
GODEBUG=x509ignoreCN=0
GODEBUG=x509ignoreCN=0 标志允许将 X.509 证书中的 CommonName 字段视为没有 SAN 时主机名的传统行为。但是,不建议使用这个临时解决方案,因为它不会在重新部署后保留。
==== 配置 Clair v4 时,使用 Red Hat Quay Operator 从 3.3.z 或 3.4.z 升级到 3.6
要在 OpenShift Container Platform 上的新的 Red Hat Quay 部署中设置 Clair v4,强烈建议您使用 Red Hat Quay Operator。默认情况下,Red Hat Quay Operator 将安装或升级 Clair 部署以及 Red Hat Quay 部署并配置 Clair。
有关在断开连接的 OpenShift Container Platform 集群中设置 Clair v4 的说明,请参阅在 Red Hat Quay OpenShift 部署中设置 Clair。
=== Swift 配置在从 3.3.z 升级到 3.6 时
当从 Red Hat Quay 3.3.z 升级到 3.6.z 时,一些用户可能会收到以下错误: Switch auth v3 requires tenant_id (字符串)在 os_options 中。作为临时解决方案,您可以手动更新 DISTRIBUTED_STORAGE_CONFIG 以添加 os_options 和 tenant_id 参数:
如果您的 QuayEcosystem 管理 PostgreSQL 数据库,升级过程会将您的数据迁移到由升级 Operator 管理的新 PostgreSQL 数据库。您的旧数据库不会被更改或删除,但 Red Hat Quay 在迁移完成后不再使用它。如果数据迁移过程中出现问题,升级过程将退出,建议您继续将数据库作为非受管组件。
=== 为升级支持的 QuayEcosystem 配置
如果迁移 QuayEcosystem 组件失败或不受支持,Red Hat Quay Operator 会在日志中报告错误,并在 status.conditions 中报告错误。所有非受管组件都应成功迁移,因为不需要采用 Kubernetes 资源,并且 Red Hat Quay 的 config.yaml 文件中已提供了所有必要的值。
数据库
不支持临时数据库(必须设置volumeSize 字段)。
Redis
不需要特别要求。
外部访问
自动迁移只支持 passthrough Route 访问。其他方法所需的手动迁移。
-
没有自定义主机名的
LoadBalancer:当QuayEcosystem使用标签"quay-operator/migration-complete": "true"标记后,在删除QuayEcosystem前需要从现存的Service中删除metadata.ownerReferences字段,这可以防止 Kubernetes 对Service进行垃圾回收并并删除负载均衡器。一个新的Service将被创建,带有metadata.name格式<QuayEcosystem-name>-quay-app。编辑现有Service的spec.selector,使其与新Service的spec.selector匹配,以便进入旧负载均衡器端点的流量现在会被定向到新的 pod。旧的Service将会被您管理; Quay Operator 将不再管理它。 -
带有自定义主机名的
LoadBalancer/NodePort/Ingress:将创建一个类型为LoadBalancer的新的Service,带有metadata.name格式<QuayEcosystem-name>-quay-app。将您的 DNS 设置更改为指向由新Service提供的status.loadBalancer端点。
Clair
不需要特别要求。
对象存储
QuayEcosystem 没有受管对象存储组件,因此对象存储始终标记为非受管。不支持本地存储。
仓库镜像
不需要特别要求。
其他资源
- 有关 Red Hat Quay Operator 的详情,请参阅上游 quay-operator 项目。