14.4. 使用 Red Hat Quay Operator 进行异地复制
在上面的示例中,Red Hat Quay Operator 部署到两个单独的区域中,带有通用数据库和通用 Redis 实例。本地化的镜像存储在每个区域中提供,从最接近的可用存储引擎提供镜像拉取。容器镜像推送被写入 Quay 实例的首选存储引擎,然后在后台复制到其他存储引擎。
由于 Operator 现在单独管理 Clair 安全扫描程序及其数据库,因此可利用 geo-replication setup,使它们不管理 Clair 数据库。相反,会使用外部共享数据库。Red Hat Quay 和 Clair 支持多种 PostgreSQL 供应商和 PostgreSQL 供应商,它们可在 Red Hat Quay 3.x 测试列表中找到。另外,Operator 还支持可注入到部署中的自定义 Clair 配置,它允许用户使用外部数据库的连接凭据配置 Clair。
14.4.1. 在 Openshift 中设置异地复制
流程
部署 Quay postgres 实例:
- 登录到数据库
为 Quay 创建数据库
CREATE DATABASE quay;
在数据库中启用 pg_trm 扩展
\c quay; CREATE EXTENSION IF NOT EXISTS pg_trgm;
部署 Redis 实例:
注意- 如果您的云供应商有自己的服务,部署 Redis 实例可能会不需要。
- 如果使用 Builder,则需要部署 Redis 实例。
- 为 Redis 部署虚拟机
- 确保可以从运行 Quay 的集群进行访问
- 端口 6379/TCP 必须被打开
在实例内运行 Redis
sudo dnf install -y podman podman run -d --name redis -p 6379:6379 redis
创建两个对象存储后端,每个集群一个
理想情况下,一个对象存储存储桶接近于第 1 个集群(主设备),其它接近第 2 个集群(次要)。
- 使用环境变量覆盖部署具有相同配置捆绑包的集群,为单个集群选择适当的存储后端
- 配置负载均衡器,为集群提供单一入口点
14.4.1.1. 配置
config.yaml
文件在集群间共享,并将包含常见 PostgreSQL、Redis 和存储后端的详情:
config.yaml
SERVER_HOSTNAME: <georep.quayteam.org or any other name> 1 DB_CONNECTION_ARGS: autorollback: true threadlocals: true DB_URI: postgresql://postgres:password@10.19.0.1:5432/quay 2 BUILDLOGS_REDIS: host: 10.19.0.2 port: 6379 USER_EVENTS_REDIS: host: 10.19.0.2 port: 6379 DISTRIBUTED_STORAGE_CONFIG: usstorage: - GoogleCloudStorage - access_key: GOOGQGPGVMASAAMQABCDEFG bucket_name: georep-test-bucket-0 secret_key: AYWfEaxX/u84XRA2vUX5C987654321 storage_path: /quaygcp eustorage: - GoogleCloudStorage - access_key: GOOGQGPGVMASAAMQWERTYUIOP bucket_name: georep-test-bucket-1 secret_key: AYWfEaxX/u84XRA2vUX5Cuj12345678 storage_path: /quaygcp DISTRIBUTED_STORAGE_DEFAULT_LOCATIONS: - usstorage - eustorage DISTRIBUTED_STORAGE_PREFERENCE: - usstorage - eustorage FEATURE_STORAGE_REPLICATION: true
- 1
- 必须使用正确的
SERVER_HOSTNAME
作为路由,且必须与全局负载均衡器的主机名匹配。 - 2
- 要检索使用 OpenShift Operator 部署的 Clair 实例的配置文件,请参阅检索 Clair 配置。
创建 configBundleSecret
:
$ oc create secret generic --from-file config.yaml=./config.yaml georep-config-bundle
在每个集群中,设置 configBundleSecret
并使用 QUAY_DISTRIBUTED_STORAGE_PREFERENCE
环境变量覆盖来为集群配置适当的存储:
两个部署之间的 config.yaml
文件都必须匹配。如果对一个集群进行更改,则必须同时更改它。
美国集群
apiVersion: quay.redhat.com/v1 kind: QuayRegistry metadata: name: example-registry namespace: quay-enterprise spec: configBundleSecret: georep-config-bundle components: - kind: objectstorage managed: false - kind: route managed: true - kind: tls managed: false - kind: postgres managed: false - kind: clairpostgres managed: false - kind: redis managed: false - kind: quay managed: true overrides: env: - name: QUAY_DISTRIBUTED_STORAGE_PREFERENCE value: usstorage - kind: mirror managed: true overrides: env: - name: QUAY_DISTRIBUTED_STORAGE_PREFERENCE value: usstorage
+
由于 TLS 为非受管,且路由是受管的,所以您必须使用 config 工具或直接在 config 捆绑包中提供证书。如需更多信息,请参阅配置 TLS 和路由。
欧洲集群
apiVersion: quay.redhat.com/v1 kind: QuayRegistry metadata: name: example-registry namespace: quay-enterprise spec: configBundleSecret: georep-config-bundle components: - kind: objectstorage managed: false - kind: route managed: true - kind: tls managed: false - kind: postgres managed: false - kind: clairpostgres managed: false - kind: redis managed: false - kind: quay managed: true overrides: env: - name: QUAY_DISTRIBUTED_STORAGE_PREFERENCE value: eustorage - kind: mirror managed: true overrides: env: - name: QUAY_DISTRIBUTED_STORAGE_PREFERENCE value: eustorage
+
由于 TLS 为非受管,且路由是受管的,所以您必须使用 config 工具或直接在 config 捆绑包中提供证书。如需更多信息,请参阅配置 TLS 和路由。
14.4.2. 跨地域复制的混合存储
Red Hat Quay geo-replication 支持使用不同的和多个复制目标,例如:在公有云上使用 AWS S3 存储,并使用之前的 Ceph 存储。这简化了授予所有 Red Hat Quay Pod 和集群节点访问所有存储后端的关键要求。因此,建议您:
- 使用 VPN 防止内部存储的可见性 或
- 使用仅允许访问 Quay 使用的指定存储桶的令牌对
这将使 Red Hat Quay 的公有云实例可以访问预先存储,但网络将被加密、保护和使用 ACL,从而满足安全要求。
如果您无法实现这些安全措施,最好部署两个不同的 Red Hat Quay registry,并使用存储库镜像作为异地复制的替代。