在 OpenShift Container Platform 上部署 Red Hat Quay Operator
在 OpenShift Container Platform 上部署 Red Hat Quay Operator
摘要
前言
Red Hat Quay 是一个企业级容器 registry。使用 Red Hat Quay 构建和存储容器镜像,然后将其能够在您的企业中部署。
Red Hat Quay Operator 提供了在 OpenShift 集群中部署和管理 Red Hat Quay 的简单方法。
随着 Red Hat Quay 3.4.0 的发布,Red Hat Quay Operator 被重新编写,以提供更好的体验并添加更多对第 2 天操作的支持。因此,Red Hat Quay Operator 现在更易于使用,并更明确。Red Hat Quay 3.4.0 之前版本的主要区别包括:
-
QuayEcosystem
自定义资源已被QuayRegistry
自定义资源替代。 默认安装选项生成完全支持的 Red Hat Quay 环境,以及所有受管依赖项,如数据库、缓存、对象存储等,支持在生产环境中使用。
注意有些组件可能不是高可用性。
- 用于 Red Hat Quay 配置的新验证库。
对象存储现在可以由 Red Hat Quay Operator 使用
ObjectBucketClaim
Kubernetes API 管理注意Red Hat OpenShift Data Foundation 可用于在 OpenShift Container Platform 上提供此 API 的支持实现。
- 自定义部署容器集用于测试和开发场景的容器镜像。
第 1 章 Red Hat Quay Operator 简介
使用本章中的内容执行以下操作:
- 使用 Red Hat Quay Operator 在 OpenShift Container Platform 上安装 Red Hat Quay
- 配置受管或非受管对象存储
- 配置非受管组件,如数据库、Redis、route、TLS 等
- 使用 Red Hat Quay Operator 在 OpenShift Container Platform 上部署 Red Hat Quay registry
- 使用 Red Hat Quay 支持的高级功能
- 使用 Red Hat Quay Operator 升级 Red Hat Quay registry
1.1. Red Hat Quay Operator 组件
Red Hat Quay 有很多依赖项。这些依赖项包括数据库、对象存储、Redis 等。Red Hat Quay Operator 管理 Red Hat Quay 及其对 Kubernetes 的依赖的部署。这些依赖项被视为 组件,并通过 QuayRegistry
API 配置。
在 QuayRegistry
自定义资源中,spec.components
字段配置组件。每个组件包含两个字段: kind
(组件名称) 和管理
(一个布尔值,用于处理组件生命周期是否由 Red Hat Quay Operator 处理)。
默认情况下,所有组件都会在协调后被管理并自动填充,以了解可见性:
QuayRegistry
资源示例
apiVersion: quay.redhat.com/v1 kind: QuayRegistry metadata: name: example-registry namespace: quay-enterprise spec: configBundleSecret: config-bundle-secret components: - kind: quay managed: true - kind: postgres managed: true - kind: clair managed: true - kind: redis managed: true - kind: horizontalpodautoscaler managed: true - kind: objectstorage managed: true - kind: route managed: true - kind: mirror managed: true - kind: monitoring managed: true - kind: tls managed: true - kind: clairpostgres managed: true
1.2. 使用受管组件
除非 QuayRegistry
自定义资源指定,否则 Red Hat Quay Operator 会使用以下受管组件的默认值:
- quay: 保存覆盖以在 OpenShift Container Platform 上部署 Red Hat Quay,如环境变量和副本数。此组件是 Red Hat Quay 3.7 的新组件,不能设置为 unmanaged。
postgres: 为了存储 registry 元数据,从 Red Hat Quay 3.9 开始,使用软件集合中的 PostgreSQL 13 版本。https://www.softwarecollections.org/en/
注意当从 Red Hat Quay 3.8 → 3.9 升级时,Operator 会自动处理将 PostgreSQL 10 升级到 PostgreSQL 13。这个升级是必需的。PostgreSQL 10 在 2022 年 11 月 10 日已发布,并不再被支持。
- Clair: 提供镜像漏洞扫描。
- Redis: 存储实时构建器日志和 Red Hat Quay 教程。还包括垃圾回收所需的锁定机制。
-
HorizontalPodAutoscaler : 根据内存/cpu 消耗来调整
Quay
pod 的数量。 -
ObjectStorage : 用于存储镜像层 blob,使用由 Noobaa 或 Red Hat OpenShift Data Foundation 提供的
ObjectBucketClaim
Kubernetes API。 - Route : 提供到 OpenShift Container Platform 外部的 Red Hat Quay registry 的外部入口点。
- mirror: 配置存储库镜像 worker 以支持可选存储库镜像。
-
监控 : 功能包括 Grafana 仪表板,访问单个指标,以及经常重启
Quay
pod 的通知。 - TLS : 配置 Red Hat Quay 或 OpenShift Container Platform 是否处理 SSL/TLS。
- clairpostgres : 配置受管 Clair 数据库。这是一个单独的数据库,与用于部署 Red Hat Quay 的 PostgreSQL 数据库不同。
Red Hat Quay Operator 处理 Red Hat Quay 使用受管组件所需的任何必要的配置和安装工作。如果 Red Hat Quay Operator 执行的 opinionated 部署不适合您的环境,您可以为 Red Hat Quay Operator 提供 非受管
资源或覆盖,如以下部分所述。
1.3. 将非受管组件用于依赖项
如果您有要与 Red Hat Quay 搭配使用的现有组件,如 PostgreSQL、Red Hat Quay 或对象存储,则首先在 Red Hat Quay 配置捆绑包或 config.yaml
文件中配置它们。然后,必须在您的 QuayRegistry
捆绑包中将其引用为 Kubernetes Secret
,同时指示哪些组件是非受管的。
如果您使用非受管 PostgreSQL 数据库,且版本是 PostgreSQL 10,则强烈建议您升级到 PostgreSQL 13。PostgreSQL 10 在 2022 年 11 月 10 日已发布,并不再被支持。如需更多信息,请参阅 PostgreSQL 版本策略。
有关配置非受管组件,请参见以下小节:
1.4. 配置捆绑包 secret
spec.configBundleSecret
字段是对与 QuayRegistry
资源相同的命名空间中的 Secret
的 metadata.name
的引用。此 Secret
必须包含 config.yaml
键/值对。
config.yaml
文件是一个 Red Hat Quay config.yaml
文件。此字段是可选的,由 Red Hat Quay Operator 自动填充(如果未提供)。如果提供,它将作为基础配置字段,稍后与来自任何受管组件的其他字段合并,以形成最终输出 Secret
,然后挂载到 Red Hat Quay 应用程序 pod 中。
1.5. OpenShift Container Platform 上的 Red Hat Quay 的先决条件
在使用 Red Hat Quay Operator 在 OpenShift Container Platform 上部署 Red Hat Quay 前,请考虑以下先决条件。
1.5.1. OpenShift Container Platform 集群
要部署 Red Hat Quay Operator,您必须有一个 OpenShift Container Platform 4.5 或更高版本的集群,并可以访问管理帐户。管理帐户必须具有在集群范围内创建命名空间的功能。
1.5.2. 资源要求
每个 Red Hat Quay 应用程序 pod 都具有以下资源要求:
- 8 Gi 内存
- 2000 millicore CPU
Red Hat Quay Operator 的每个 Red Hat Quay 部署至少创建一个应用程序 pod。确保 OpenShift Container Platform 集群有足够的计算资源来满足这些要求。
1.5.3. 对象存储
默认情况下,Red Hat Quay Operator 使用 ObjectBucketClaim
Kubernetes API 来置备对象存储。消耗此 API 将 Red Hat Quay Operator 与任何特定于供应商的实现分离。Red Hat OpenShift Data Foundation 通过其 NooBaa 组件提供此 API,该组件在整个文档中用作示例。
Red Hat Quay 可以手动配置为使用多个存储云供应商,包括:
- Amazon S3 (请参阅 S3 IAM Bucket 策略 以了解为 Red Hat Quay 配置 S3 存储桶策略的详情)
- Microsoft Azure Blob Storage
- Google Cloud Storage
- Ceph 对象网关(RADOS)
- OpenStack Swift
- CloudFront + S3
如需对象存储提供程序的完整列表,Quay Enterprise 3.x 支持列表。
1.5.4. StorageClass
当使用 Red Hat Quay
Operator 部署 Quay 和 Clair
PostgreSQL 数据库时,集群中配置了默认 StorageClass
。
Red Hat Quay Operator 使用的默认 StorageClass
置备 Quay
和 Clair
数据库所需的持久性卷声明。这些 PVC 用于持久存储数据,确保 Red Hat Quay registry 和 Clair 漏洞扫描程序仍然可用,并在重启或失败时保持其状态。
在继续安装前,请验证集群中是否配置了默认 StorageClass
,以确保为 Quay
和 Clair
组件无缝置备存储。
第 2 章 从 OperatorHub 安装 Red Hat Quay Operator
使用以下步骤从 OpenShift Container Platform OperatorHub 安装 Red Hat Quay Operator。
流程
- 使用 OpenShift Container Platform 控制台,选择 Operators → OperatorHub。
- 在搜索框中,键入 Red Hat Quay 并选择红帽提供的官方 Red Hat Quay Operator。这会将您定向到 安装 页面,其中概述了功能、先决条件和部署信息。
- 选择 Install。这会将您定向到 Operator 安装 页面。
以下选项可用于自定义安装:
-
更新频道 : 选择更新频道,例如
stable-3.12
作为最新版本。 安装模式:
-
如果您希望 Red Hat Quay Operator 在集群范围内可用,请选择
All namespaces on the cluster
。建议您在集群范围安装 Red Hat Quay Operator。如果您选择了单个命名空间,则监控组件默认不可用。 如果您希望仅在单一命名空间中部署它,选择
A specific namespace on the cluster
。- Approval Strategy: 选择批准自动或手动更新。建议自动更新策略。
-
如果您希望 Red Hat Quay Operator 在集群范围内可用,请选择
-
更新频道 : 选择更新频道,例如
- 选择 Install。
第 3 章 在部署前配置 Red Hat Quay
当在 OpenShift Container Platform 上部署时,Red Hat Quay Operator 可以管理所有 Red Hat Quay 组件。这是默认配置,但当您希望对设置进行更多控制时,您可以在外部管理一个或多个组件。
使用以下模式配置非受管 Red Hat Quay 组件。
流程
使用适当的设置创建
config.yaml
配置文件。对最小配置使用以下引用:$ touch config.yaml
AUTHENTICATION_TYPE: Database BUILDLOGS_REDIS: host: <quay-server.example.com> password: <strongpassword> port: 6379 ssl: false DATABASE_SECRET_KEY: <0ce4f796-c295-415b-bf9d-b315114704b8> DB_URI: <postgresql://quayuser:quaypass@quay-server.example.com:5432/quay> DEFAULT_TAG_EXPIRATION: 2w DISTRIBUTED_STORAGE_CONFIG: default: - LocalStorage - storage_path: /datastorage/registry DISTRIBUTED_STORAGE_DEFAULT_LOCATIONS: [] DISTRIBUTED_STORAGE_PREFERENCE: - default PREFERRED_URL_SCHEME: http SECRET_KEY: <e8f9fe68-1f84-48a8-a05f-02d72e6eccba> SERVER_HOSTNAME: <quay-server.example.com> SETUP_COMPLETE: true TAG_EXPIRATION_OPTIONS: - 0s - 1d - 1w - 2w - 4w - 3y USER_EVENTS_REDIS: host: <quay-server.example.com> port: 6379 ssl: false
输入以下命令,使用配置文件创建
Secret
:$ oc create secret generic --from-file config.yaml=./config.yaml config-bundle-secret
创建一个
quayregistry.yaml
文件,识别非受管组件并引用所创建的Secret
,例如:QuayRegistry
YAML 文件示例apiVersion: quay.redhat.com/v1 kind: QuayRegistry metadata: name: example-registry namespace: quay-enterprise spec: configBundleSecret: <config_bundle_secret> components: - kind: objectstorage managed: false # ...
输入以下命令使用
quayregistry.yaml
文件部署 registry:$ oc create -n quay-enterprise -f quayregistry.yaml
3.1. 预配置 Red Hat Quay 以进行自动化
Red Hat Quay 支持几个启用自动化的配置选项。用户可以在部署前配置这些选项,以减少与用户界面交互的需求。
3.1.1. 允许 API 创建第一个用户
要创建第一个用户,用户需要将 FEATURE_USER_INITIALIZE
参数设置为 true
,并调用 /api/v1/user/initialize
API。与需要现有机构中 OAuth 应用生成的 OAuth 令牌的其他 registry API 调用不同,API 端点不需要身份验证。
在部署 Red Hat Quay 后,用户可以使用 API 创建用户,如 quayadmin
,只要没有创建其他用户。如需更多信息,请参阅使用 API 创建第一个用户。
3.1.2. 启用常规 API 访问
用户应将 BROWSER_API_CALLS_XHR_ONLY
配置选项设置为 false
,以允许常规访问 Red Hat Quay registry API。
3.1.3. 添加超级用户
部署 Red Hat Quay 后,用户可以创建用户,并授予第一个具有完整权限的管理员特权。用户可以使用 SUPER_USER
配置对象提前配置完全权限。例如:
# ... SERVER_HOSTNAME: quay-server.example.com SETUP_COMPLETE: true SUPER_USERS: - quayadmin # ...
3.1.4. 限制用户创建
配置超级用户后,您可以通过将 FEATURE_USER_CREATION
设置为 false
来限制新用户到超级用户组。例如:
# ... FEATURE_USER_INITIALIZE: true BROWSER_API_CALLS_XHR_ONLY: false SUPER_USERS: - quayadmin FEATURE_USER_CREATION: false # ...
3.1.5. 在 Red Hat Quay 3.12 中启用新功能
要使用新的 Red Hat Quay 3.12 功能,请启用一些或全部功能:
# ... FEATURE_UI_V2: true FEATURE_UI_V2_REPO_SETTINGS: true FEATURE_AUTO_PRUNE: true ROBOTS_DISALLOW: false # ...
3.1.6. 推荐的自动化配置
建议对自动化使用以下 config.yaml
参数:
# ... FEATURE_USER_INITIALIZE: true BROWSER_API_CALLS_XHR_ONLY: false SUPER_USERS: - quayadmin FEATURE_USER_CREATION: false # ...
3.2. 配置对象存储
在安装 Red Hat Quay 前,您需要配置对象存储,无论您是否允许 Red Hat Quay Operator 管理存储或自己管理它。
如果您希望 Red Hat Quay Operator 负责管理存储,请参阅 Managed 存储中的部分来安装和配置 NooBaa 和 Red Hat OpenShift Data Foundation Operator。
如果您使用单独的存储解决方案,请在配置 Operator 时将 objectstorage
设置为 unmanaged
。请参见以下部分。非受管存储,以了解配置现有存储的详细信息。
3.2.1. 使用非受管存储
本节为方便起见,为非受管存储提供了配置示例。有关如何设置对象存储的完整说明,请参阅 Red Hat Quay 配置指南。
3.2.1.1. AWS S3 存储
在为 Red Hat Quay 部署配置 AWS S3 存储时,请使用以下示例。
DISTRIBUTED_STORAGE_CONFIG: s3Storage: - S3Storage - host: s3.us-east-2.amazonaws.com s3_access_key: ABCDEFGHIJKLMN s3_secret_key: OL3ABCDEFGHIJKLMN s3_bucket: quay_bucket s3_region: <region> storage_path: /datastorage/registry DISTRIBUTED_STORAGE_DEFAULT_LOCATIONS: [] DISTRIBUTED_STORAGE_PREFERENCE: - s3Storage
3.2.1.2. Google Cloud 存储
在为 Red Hat Quay 部署配置 Google Cloud 存储时,请使用以下示例。
DISTRIBUTED_STORAGE_CONFIG:
googleCloudStorage:
- GoogleCloudStorage
- access_key: GOOGQIMFB3ABCDEFGHIJKLMN
bucket_name: quay-bucket
secret_key: FhDAYe2HeuAKfvZCAGyOioNaaRABCDEFGHIJKLMN
storage_path: /datastorage/registry
boto_timeout: 120 1
DISTRIBUTED_STORAGE_DEFAULT_LOCATIONS: []
DISTRIBUTED_STORAGE_PREFERENCE:
- googleCloudStorage
- 1
- 可选。从连接时抛出超时异常的时间(以秒为单位)。默认值为
60
秒。另外,还包括时间(以秒为单位),直到尝试进行连接时抛出超时异常。默认值为60
秒。
3.2.1.3. Microsoft Azure 存储
在为 Red Hat Quay 部署配置 Microsoft Azure 存储时,请使用以下示例。
DISTRIBUTED_STORAGE_CONFIG:
azureStorage:
- AzureStorage
- azure_account_name: azure_account_name_here
azure_container: azure_container_here
storage_path: /datastorage/registry
azure_account_key: azure_account_key_here
sas_token: some/path/
endpoint_url: https://[account-name].blob.core.usgovcloudapi.net 1
DISTRIBUTED_STORAGE_DEFAULT_LOCATIONS: []
DISTRIBUTED_STORAGE_PREFERENCE:
- azureStorage
- 1
- Microsoft Azure 存储的
endpoint_url
参数是可选的,可用于 Microsoft Azure Government (MAG)端点。如果留空,则endpoint_url
将连接到正常的 Microsoft Azure 区域。从 Red Hat Quay 3.7 开始,您必须使用 MAG Blob 服务的主端点。使用 MAG Blob 服务的二级端点将导致以下错误:
AuthenticationErrorDetail:Cannot find the claimed account when trying the account whusc8-secondary
。
3.2.1.4. Ceph/RadosGW Storage
在为 Red Hat Quay 部署配置 Ceph/RadosGW 存储时,请使用以下示例。
DISTRIBUTED_STORAGE_CONFIG: radosGWStorage: #storage config name - RadosGWStorage #actual driver - access_key: access_key_here #parameters secret_key: secret_key_here bucket_name: bucket_name_here hostname: hostname_here is_secure: 'true' port: '443' storage_path: /datastorage/registry DISTRIBUTED_STORAGE_DEFAULT_LOCATIONS: [] DISTRIBUTED_STORAGE_PREFERENCE: #must contain name of the storage config - radosGWStorage
3.2.1.5. Swift 存储
在为 Red Hat Quay 部署配置 Swift 存储时,请使用以下示例。
DISTRIBUTED_STORAGE_CONFIG: swiftStorage: - SwiftStorage - swift_user: swift_user_here swift_password: swift_password_here swift_container: swift_container_here auth_url: https://example.org/swift/v1/quay auth_version: 3 os_options: tenant_id: <osp_tenant_id_here> user_domain_name: <osp_domain_name_here> ca_cert_path: /conf/stack/swift.cert" storage_path: /datastorage/registry DISTRIBUTED_STORAGE_DEFAULT_LOCATIONS: [] DISTRIBUTED_STORAGE_PREFERENCE: - swiftStorage
3.2.1.6. NooBaa 非受管存储
使用以下步骤将 NooBaa 部署为您的非受管存储配置。
流程
- 在 Red Hat Quay 控制台中,导航到 Storage → Object Bucket Claims,在 Red Hat Quay 控制台中创建一个 NooBaa Object Bucket Claim。
- 检索 Object Bucket Claim 数据详情,包括 Access Key, Bucket Name, Endpoint (hostname)和 Secret Key。
创建
config.yaml
配置文件,该文件使用 Object Bucket Claim 的信息:DISTRIBUTED_STORAGE_CONFIG: default: - RHOCSStorage - access_key: WmrXtSGk8B3nABCDEFGH bucket_name: my-noobaa-bucket-claim-8b844191-dc6c-444e-9ea4-87ece0abcdef hostname: s3.openshift-storage.svc.cluster.local is_secure: true port: "443" secret_key: X9P5SDGJtmSuHFCMSLMbdNCMfUABCDEFGH+C5QD storage_path: /datastorage/registry DISTRIBUTED_STORAGE_DEFAULT_LOCATIONS: [] DISTRIBUTED_STORAGE_PREFERENCE: - default
有关配置对象 Bucket 声明的更多信息,请参阅 Object Bucket Claim。
3.2.2. 使用非受管 NooBaa 实例
使用以下步骤将非受管 NooBaa 实例用于 Red Hat Quay 部署。
流程
- 在控制台的 Storage → Object Bucket Claims 中创建 NooBaa Object Bucket Claim。
-
检索 Object Bucket Claim 数据详细信息,包括
Access Key
、Bucket Name
、Endpoint (hostname)
和Secret Key
。 使用 Object Bucket Claim 的信息创建
config.yaml
配置文件。例如:DISTRIBUTED_STORAGE_CONFIG: default: - RHOCSStorage - access_key: WmrXtSGk8B3nABCDEFGH bucket_name: my-noobaa-bucket-claim-8b844191-dc6c-444e-9ea4-87ece0abcdef hostname: s3.openshift-storage.svc.cluster.local is_secure: true port: "443" secret_key: X9P5SDGJtmSuHFCMSLMbdNCMfUABCDEFGH+C5QD storage_path: /datastorage/registry DISTRIBUTED_STORAGE_DEFAULT_LOCATIONS: [] DISTRIBUTED_STORAGE_PREFERENCE: - default
3.2.3. 受管存储
如果您希望 Red Hat Quay Operator 管理 Red Hat Quay 的对象存储,您的集群需要能够通过 ObjectBucketClaim
API 提供对象存储。使用 Red Hat OpenShift Data Foundation Operator,有两个支持的选项:
由本地 Kubernetes
PersistentVolume
存储支持的 Multi-Cloud Object Gateway 的独立实例- 不提供高可用性
- 包括在 Red Hat Quay 订阅中
- Red Hat OpenShift Data Foundation 不需要单独的订阅
使用扩展对象服务和 Ceph 的生产环境部署 Red Hat OpenShift Data Foundation
- 高可用性
- Red Hat OpenShift Data Foundation 需要单独的订阅
要使用 standalone 实例选项,请继续阅读以下内容。对于 Red Hat OpenShift Data Foundation 的生产环境部署,请参阅 官方文档。
Object storage 磁盘空间由 Red Hat Quay Operator 自动分配 50 GiB。这个数字代表了大多数中小型 Red Hat Quay 安装的可用存储,但可能不足以满足您的用例。Red Hat OpenShift Data Foundation 重新定义大小目前没有被 Red Hat Quay Operator 处理。如需了解更多详细信息,请参见以下有关重新定义受管存储大小的部分。
3.2.3.1. 在 Red Hat OpenShift Data Foundation Operator for Red Hat Quay 中使用 Multicloud Object Gateway 组件
作为 Red Hat Quay 订阅的一部分,用户可以使用 Red Hat OpenShift Data Foundation Operator 的 Multicloud Object Gateway 组件(以前称为 OpenShift Container Storage Operator)。此网关组件允许您为基于 Kubernetes PersistentVolume
的块存储支持的 Red Hat Quay 提供 S3 兼容对象存储接口。使用量仅限于由 Operator 管理的 Red Hat Quay 部署,以及 multicloud Object Gateway 实例的确切规格,如下所述。
因为 Red Hat Quay 不支持本地文件系统存储,所以用户可以使用网关与 Kubernetes PersistentVolume
存储结合使用,以提供受支持的部署。PersistentVolume
直接在网关实例上挂载,作为对象存储的后备存储,支持任何基于块的 StorageClass
。
按照 PersistentVolume
的性质,这不是横向扩展、高度可用的解决方案,且不会取代 Red Hat OpenShift Data Foundation 等横向扩展的存储系统。只有网关的一个实例正在运行。如果因为重新调度、更新或计划外停机而运行网关的 pod 不可用,这会导致连接的 Red Hat Quay 实例的临时降级。
使用以下步骤,您将安装 Local Storage Operator、Red Hat OpenShift Data Foundation,并创建一个独立多云对象网关以在 OpenShift Container Platform 上部署 Red Hat Quay。
以下文档与官方 Red Hat OpenShift Data Foundation 文档 共享通用性。
3.2.3.1.1. 在 OpenShift Container Platform 上安装 Local Storage Operator
在本地存储设备上创建 Red Hat OpenShift Data Foundation 集群前,请使用以下步骤从 OperatorHub 安装 Local Storage Operator。
- 登录 OpenShift Web 控制台。
- 点 Operators → OperatorHub。
- 在搜索框中输入 本地存储,从 Operator 列表中查找 Local Storage Operator。点 Local Storage。
- 点 Install。
在 Install Operator 页面中设置以下选项:
- 对于更新频道,请选择 stable。
- 对于 Installation 模式,选择 A specific namespace on the cluster。
- 对于 Installed Namespace,选择 Operator recommended namespace openshift-local-storage。
- 对于更新批准,请选择 Automatic。
- 点 Install。
3.2.3.1.2. 在 OpenShift Container Platform 上安装 Red Hat OpenShift Data Foundation
使用以下步骤在 OpenShift Container Platform 上安装 Red Hat OpenShift Data Foundation。
先决条件
-
使用具有
cluster-admin
和 Operator 安装权限的账户访问 OpenShift Container Platform 集群。 - OpenShift Container Platform 集群中必须至少有三个 worker 节点。
- 有关其他资源要求,请参阅规划您的部署指南。
流程
- 登录 OpenShift Web 控制台。
- 点 Operators → OperatorHub。
- 在搜索框中输入 OpenShift Data Foundation。单击 OpenShift Data Foundation。
- 点 Install。
在 Install Operator 页面中设置以下选项:
- 对于 Update channel,请选择最新的稳定版本。
- 对于 Installation 模式,选择 A specific namespace on the cluster。
- 对于 Installed Namespace,选择 Operator recommended Namespace: openshift-storage。
对于更新批准,请选择 Automatic 或 Manual。
如果选择 Automatic 更新,Operator Lifecycle Manager(OLM)将自动升级 Operator 的运行实例,而无需任何干预。
如果选择 手动 更新,则 OLM 会创建一个更新请求。作为集群管理员,您必须手动批准该更新请求,才能将 Operator 更新至更新的版本。
- 对于 Console 插件,选择 Enable。
点 Install。
安装 Operator 后,用户界面中会出现带有
Web 控制台更新信息
的弹出窗口。点这个弹出窗口中的 Refresh web console 来反映控制台的更改。- 继续以下部分"创建独立多云对象网关",以使用 Red Hat Quay 的 Multicloud 对象网关组件。
3.2.3.1.3. 使用 OpenShift Container Platform UI 创建独立多云对象网关
使用以下步骤创建独立多云对象网关。
先决条件
- 已安装 Local Storage Operator。
- 已安装 Red Hat OpenShift Data Foundation Operator。
流程
在 OpenShift Web 控制台中,点 Operators → Installed Operators 查看所有已安装的 Operator。
确保命名空间为
openshift-storage
。- 单击 Create StorageSystem。
在 Backing storage 页面中,选择以下内容:
- 为 Deployment 类型选择 Multicloud Object Gateway。
- 选择 Create a new StorageClass using the local storage devices 选项。
点 Next。
注意如果还没有安装,系统会提示您安装 Local Storage Operator。点 Install 并按照"在 OpenShift Container Platform 上安装 Local Storage Operator"中所述的步骤进行操作。
在 Create local volume set 页面中,提供以下信息:
- 为 LocalVolumeSet 和 StorageClass 输入一个名称。默认情况下,存储类名称会出现本地卷集名称。您可以更改名称。
选择以下任意一项:
所有节点上的磁盘
使用与所有节点上所选过滤器匹配的可用磁盘。
所选节点上的磁盘
仅在所选节点上使用与所选过滤器匹配的可用磁盘。
- 从可用 Disk Type 列表中,选择 SSD/NVMe。
展开 Advanced 部分并设置以下选项:
卷模式
文件系统会被默认选择。始终为卷模式选择 Filesystem。
设备类型
从下拉列表中选择一个或多个设备类型。
磁盘大小
为设备设置最小 100GB 大小,以及需要包含的设备的最大可用大小。
磁盘限制上限
这表示节点上可以创建的 PV 数量上限。如果此字段留空,则为匹配节点上的所有可用磁盘创建 PV。
点 Next
此时会显示一个用于确认创建
LocalVolumeSet
的弹出窗口。- 单击 Yes 以继续。
在 Capacity 和 nodes 页面中,配置以下内容:
- 可用的原始容量会根据与存储类关联的所有附加磁盘填充容量值。这将需要一些时间才能出现。Selected nodes 列表根据存储类显示节点。
- 点 Next 继续。
可选。选择 Connect to an external key management service 复选框。这是集群范围加密的可选选项。
- 从 Key Management Service Provider 下拉列表中,选择 Vault 或 Thales CipherTrust Manager (using KMIP)。如果选择了 Vault,请进入下一步。如果您选择了 Thales CipherTrust Manager (using KMIP),请转到步骤 iii。
选择身份验证方法。
使用令牌验证方法
- 输入唯一的连接名称 , Vault 服务器的主机地址('https://<hostname 或 ip>'),端口号和令牌。
展开 Advanced Settings,以根据您的
Vault
配置输入其他设置和证书详情:- 在 后端路径中输入为 OpenShift Data Foundation 专用且唯一的 Key Value secret 路径。
- (可选)输入 TLS 服务器名称和 Vault Enterprise 命名空间。
- 上传对应的 PEM 编码证书文件,以提供 CA 证书、 客户端证书和客户端私钥。
点 Save 并跳过步骤 iv。
使用 Kubernetes 验证方法
- 输入唯一的 Vault Connection Name, Vault 服务器的主机地址('https://<hostname 或 ip>')、端口号和角色名称。
展开 Advanced Settings 以根据您的 Vault 配置输入额外的设置和证书详情:
- 在 后端路径中输入为 Red Hat OpenShift Data Foundation 专用 且唯一的 Key Value secret 路径。
- 可选:输入 TLS Server Name 和 Authentication Path (如果适用)。
- 上传对应的 PEM 编码证书文件,以提供 CA 证书、客户端证书和客户端私钥。
- 点 Save 并跳过步骤 iv。
要使用 Thales CipherTrust Manager (using KMIP) 作为 KMS 供应商,请按照以下步骤执行:
- 在项目中输入密钥管理服务的唯一连接名称。
在 Address 和 Port 部分中,输入 Thales CipherTrust Manager 的 IP 以及在其中启用了 KMIP 接口的端口。例如:
- 地址: 123.34.3.2
- 端口 :5696
- 上传 客户端证书、CA 证书和 客户端私钥。
- 如果启用了 StorageClass 加密,请输入用于加密和解密的唯一标识符。
-
TLS Server 字段是可选的,并在没有 KMIP 端点的 DNS 条目时使用。例如:
kmip_all_<port>.ciphertrustmanager.local
。
- 选择 网络。
- 点 Next。
- 在 Review and create 页面中,检查配置详情。若要修改任何配置设置,请单击 Back。
- 单击 Create StorageSystem。
3.2.3.1.4. 使用 CLI 创建独立多云对象网关
使用以下步骤安装 Red Hat OpenShift Data Foundation (以前称为 OpenShift Container Storage)Operator 并配置单个实例 Multi-Cloud Gateway 服务。
安装 Red Hat OpenShift Data Foundation 的集群中无法并行运行以下配置。
流程
- 在 OpenShift Web 控制台中,然后选择 Operators → OperatorHub。
- 搜索 Red Hat OpenShift Data Foundation,然后选择 Install。
- 接受所有默认选项,然后选择 Install。
通过查看 Status 列确认 Operator 已安装,该列应标记为 Succeeded。
警告安装 Red Hat OpenShift Data Foundation Operator 后,会提示您创建存储系统。不要遵循这一指令。反之,按照以下步骤所述创建 NooBaa 对象存储。
在您的机器上,使用以下信息创建一个名为
noobaa.yaml
的文件:apiVersion: noobaa.io/v1alpha1 kind: NooBaa metadata: name: noobaa namespace: openshift-storage spec: dbResources: requests: cpu: '0.1' memory: 1Gi dbType: postgres coreResources: requests: cpu: '0.1' memory: 1Gi
这将创建 Multi-cloud 对象网关 的单一实例部署。
使用以下命令应用配置:
$ oc create -n openshift-storage -f noobaa.yaml
输出示例
noobaa.noobaa.io/noobaa created
几分钟后,Multi-cloud 对象网关 应完成调配。您可以输入以下命令检查其状态:
$ oc get -n openshift-storage noobaas noobaa -w
输出示例
NAME MGMT-ENDPOINTS S3-ENDPOINTS IMAGE PHASE AGE noobaa [https://10.0.32.3:30318] [https://10.0.32.3:31958] registry.redhat.io/ocs4/mcg-core-rhel8@sha256:56624aa7dd4ca178c1887343c7445a9425a841600b1309f6deace37ce6b8678d Ready 3d18h
通过创建以下 YAML 文件,名为
noobaa-pv-backing-store.yaml
来配置网关的后备存储:apiVersion: noobaa.io/v1alpha1 kind: BackingStore metadata: finalizers: - noobaa.io/finalizer labels: app: noobaa name: noobaa-pv-backing-store namespace: openshift-storage spec: pvPool: numVolumes: 1 resources: requests: storage: 50Gi 1 storageClass: STORAGE-CLASS-NAME 2 type: pv-pool
输入以下命令应用配置:
$ oc create -f noobaa-pv-backing-store.yaml
输出示例
backingstore.noobaa.io/noobaa-pv-backing-store created
这会为网关创建后备存储配置。Red Hat Quay 中的所有镜像将通过由上述配置创建的
PersistentVolume
中的网关存储为对象。运行以下命令,使
PersistentVolume
后备存储 Red Hat Quay Operator 发布的所有ObjectBucketClaims
默认:$ oc patch bucketclass noobaa-default-bucket-class --patch '{"spec":{"placementPolicy":{"tiers":[{"backingStores":["noobaa-pv-backing-store"]}]}}}' --type merge -n openshift-storage
第 4 章 配置流量入口
4.1. 配置 SSL/TLS 和路由
通过新的受管组件 tls
添加了对 OpenShift Container Platform 边缘终止路由 的支持。这会将 路由
组件与 SSL/TLS 分开,并允许用户单独配置它们。
EXTERNAL_TLS_TERMINATION: true
是建议的设置。
-
Managed
tls
表示使用默认集群通配符证书。 -
Unmanaged
tls
意味着用户提供的密钥和证书对注入到路由中。
ssl.cert
和 ssl.key
现在被移到一个单独的持久 secret 中,这样可确保每次协调时不会重新生成密钥和证书对。密钥和证书对现在格式化为 边缘路由
,并挂载到 Quay
容器中的同一目录。
在配置 SSL/TLS 和路由时,可以有多个 permutations,但会应用以下规则:
-
如果
管理
SSL/TLS,则您的路由还必须管理
。 -
如果 SSL/TLS 是
非受管状态
,则必须直接在 config 捆绑包中提供证书。
下表描述了有效选项:
选项 | Route | TLS | 提供的证书 | 结果 |
---|---|---|---|---|
我自己的负载均衡器处理 TLS | 受管 | 受管 | 否 | 带有默认通配符证书的边缘路由 |
Red Hat Quay 处理 TLS | 受管 | Unmanaged | 是 | 使用挂载到 pod 中的证书传递路由 |
Red Hat Quay 处理 TLS | Unmanaged | Unmanaged | 是 |
证书在 |
4.1.1. 使用 SSL/TLS 证书和密钥对创建配置捆绑包 secret
使用以下步骤创建包含您自己的 SSL/TLS 证书和密钥对的配置捆绑包 secret。
流程
输入以下命令来创建包含您自己的 SSL/TLS 证书和密钥对的配置捆绑包 secret:
$ oc create secret generic --from-file config.yaml=./config.yaml --from-file ssl.cert=./ssl.cert --from-file ssl.key=./ssl.key config-bundle-secret
第 5 章 在 OpenShift Container Platform 中为受管组件配置资源
您可以为运行 pod 的以下组件手动调整 OpenShift Container Platform 上的 Red Hat Quay 资源:
-
Quay
-
Clair
-
镜像
-
clairpostgres
-
postgres
此功能允许用户运行较小的测试集群,或者请求更多资源前期,以避免部分降级的 Quay
pod。限制和请求可根据 Kubernetes 资源单元 设置。
不应设置以下组件小于其最低要求。这可能会导致部署出现问题,在某些情况下会导致 pod 的部署失败。
-
Quay
: 最小 6 GB、2vCPU -
Clair
:建议 2 GB 内存,2 个 vCPU -
clairpostgres
:最小 200 MB
您可以在 OpenShift Container Platform UI 上配置资源请求,或者直接通过更新 QuayRegistry
YAML 来配置资源请求。
为这些组件设置的默认值是推荐的值。设置资源请求过高或太低可能会导致资源利用率低低,或者分别降低资源利用率或性能下降。
5.1. 使用 OpenShift Container Platform UI 配置资源请求
使用以下步骤使用 OpenShift Container Platform UI 配置资源。
流程
- 在 OpenShift Container Platform 开发人员控制台中,点 Operators → Installed Operators → Red Hat Quay。
- 单击 QuayRegistry。
- 点 registry 的名称,如 example-registry。
- 点 YAML。
在
spec.components
字段中,您可以通过设置.overrides.resources.limits
和overrides.resources.requests
字段的值来覆盖quay
、clair
、mirror
clairpostgres
和postgres
资源的资源。例如:spec: components: - kind: clair managed: true overrides: resources: limits: cpu: "5" # Limiting to 5 CPU (equivalent to 5000m or 5000 millicpu) memory: "18Gi" # Limiting to 18 Gibibytes of memory requests: cpu: "4" # Requesting 4 CPU memory: "4Gi" # Requesting 4 Gibibytes of memory - kind: postgres managed: true overrides: resources: limits: {} 1 requests: cpu: "700m" # Requesting 700 millicpu or 0.7 CPU memory: "4Gi" # Requesting 4 Gibibytes of memory - kind: mirror managed: true overrides: resources: limits: 2 requests: cpu: "800m" # Requesting 800 millicpu or 0.8 CPU memory: "1Gi" # Requesting 1 Gibibyte of memory - kind: quay managed: true overrides: resources: limits: cpu: "4" # Limiting to 4 CPU memory: "10Gi" # Limiting to 10 Gibibytes of memory requests: cpu: "4" # Requesting 4 CPU memory: "10Gi" # Requesting 10 Gibi of memory - kind: clairpostgres managed: true overrides: resources: limits: cpu: "800m" # Limiting to 800 millicpu or 0.8 CPU memory: "3Gi" # Limiting to 3 Gibibytes of memory requests: {}
5.2. 通过编辑 QuayRegistry YAML 来配置资源请求
在部署 registry 后,您可以重新配置 Red Hat Quay 来配置资源请求。这可以通过直接编辑 QuayRegistry
YAML 文件,然后重新部署 registry 来完成。
流程
可选:如果您没有
QuayRegistry
YAML 文件的本地副本,请输入以下命令来获取该文件:$ oc get quayregistry <registry_name> -n <namespace> -o yaml > quayregistry.yaml
打开从此流程的第 1 步中创建的
quayregistry.yaml
,并进行所需的更改。例如:- kind: quay managed: true overrides: resources: limits: {} requests: cpu: "0.7" # Requesting 0.7 CPU (equivalent to 500m or 500 millicpu) memory: "512Mi" # Requesting 512 Mebibytes of memory
- 保存更改。
运行以下命令,使用更新的配置应用 Red Hat Quay registry:
$ oc replace -f quayregistry.yaml
输出示例
quayregistry.quay.redhat.com/example-registry replaced
第 6 章 配置数据库
6.1. 使用现有的 PostgreSQL 数据库
如果使用外部管理的 PostgreSQL 数据库,则必须手动启用 pg_trgm
扩展才能成功部署。
您不能为 Red Hat Quay 和 Clair 部署使用相同的外部管理的 PostgreSQL 数据库。您的 PostgreSQL 数据库还必须与其他工作负载共享,因为在连接密集型工作负载(如 Red Hat Quay 或 Clair)时,它可能会耗尽 PostgreSQL 端的自然连接限制。另外,Red Hat Quay 或 Clair 不支持 pgBouncer,因此这不是解决这个问题的选项。
使用以下步骤部署现有的 PostgreSQL 数据库。
流程
使用所需的数据库字段创建
config.yaml
文件。例如:config.yaml
文件示例:DB_URI: postgresql://test-quay-database:postgres@test-quay-database:5432/test-quay-database
使用配置文件创建
Secret
:$ kubectl create secret generic --from-file config.yaml=./config.yaml config-bundle-secret
创建一个
QuayRegistry.yaml
文件,将postgres
组件标记为非受管
,并引用所创建的Secret
。例如:quayregistry.yaml
文件示例apiVersion: quay.redhat.com/v1 kind: QuayRegistry metadata: name: example-registry namespace: quay-enterprise spec: configBundleSecret: config-bundle-secret components: - kind: postgres managed: false
后续步骤
- 继续以下部分来部署 registry。
6.1.1. 数据库配置
本节论述了 Red Hat Quay 部署可用的数据库配置字段。
6.1.1.1. 数据库 URI
使用 Red Hat Quay 时,使用所需的 DB_URI
字段配置与数据库的连接。
下表描述了 DB_URI
配置字段:
字段 | 类型 | 描述 |
---|---|---|
DB_URI | 字符串 | 用于访问数据库的 URI,包括任何凭据。
postgresql://quayuser:quaypass@quay-server.example.com:5432/quay |
6.1.1.2. 数据库连接参数
可选的连接参数由 DB_CONNECTION_ARGS
参数配置。DB_CONNECTION_ARGS
中定义的一些键值对是通用的,另一些则特定于数据库。
下表描述了数据库连接参数:
字段 | 类型 | 描述 |
---|---|---|
DB_CONNECTION_ARGS | 对象 | 数据库的可选连接参数,如超时和 SSL/TLS。 |
.autorollback | 布尔值 |
是否使用 thread-local 连接。 |
.threadlocals | 布尔值 |
是否使用自动滚动连接。 |
6.1.1.2.1. PostgreSQL SSL/TLS 连接参数
使用 SSL/TLS 时,配置取决于您部署的数据库。以下示例显示了 PostgreSQL SSL/TLS 配置:
DB_CONNECTION_ARGS: sslmode: verify-ca sslrootcert: /path/to/cacert
sslmode
选项决定是否使用,安全 SSL/TLS TCP/IP 连接的优先级将与服务器协商。有六个模式:
模式 | 描述 |
---|---|
disable | 您的配置只尝试非 SSL/TLS 连接。 |
allow | 您的配置首先会尝试非 SSL/TLS 连接。失败时,尝试 SSL/TLS 连接。 |
首选 | 您的配置首先会尝试 SSL/TLS 连接。失败时,尝试非 SSL/TLS 连接。 |
require | 您的配置只尝试 SSL/TLS 连接。如果存在 root CA 文件,它将像指定了 verify-ca 一样验证证书。 |
verify-ca | 您的配置只尝试 SSL/TLS 连接,并验证服务器证书是否由可信证书颁发机构(CA)发布。 |
verify-full | 仅尝试 SSL/TLS 连接,并验证服务器证书是否由可信 CA 发布,并且请求的服务器主机名与证书中的主机名匹配。 |
有关 PostgreSQL 有效参数的更多信息,请参阅 数据库连接控制功能。
6.1.1.2.2. MySQL SSL/TLS 连接参数
以下示例显示了 MySQL SSL/TLS 配置示例:
DB_CONNECTION_ARGS: ssl: ca: /path/to/cacert
有关 MySQL 的有效连接参数的信息,请访问 使用类似URI的字符串或键-值对连接到服务器。
6.1.2. 使用受管 PostgreSQL 数据库
使用 Red Hat Quay 3.9 时,如果您的数据库由 Red Hat Quay Operator 管理,从 Red Hat Quay 3.8 → 3.9 更新会自动处理将 PostgreSQL 10 升级到 PostgreSQL 13。
- 需要具有受管数据库的用户才能将其 PostgreSQL 数据库从 10 到 13 升级。
- 如果您的 Red Hat Quay 和 Clair 数据库由 Operator 管理,则每个组件的数据库升级必须成功进行 3.9.0 升级。如果任何一个数据库升级失败,则整个 Red Hat Quay 版本升级会失败。这是预期的行为。
如果您不希望 Red Hat Quay Operator 从 PostgreSQL 10 → 13 升级 PostgreSQL 部署,您必须在 quayregistry.yaml
文件中将 PostgreSQL 参数设置为 managed: false
。有关将数据库设置为非受管的更多信息,请参阅使用现有的 Postgres 数据库。
- 强烈建议您升级到 PostgreSQL 13。PostgreSQL 10 在 2022 年 11 月 10 日已发布,并不再被支持。如需更多信息,请参阅 PostgreSQL 版本策略。
如果您希望 PostgreSQL 数据库与 Red Hat Enterprise Linux (RHEL)系统相同的版本,请参阅 迁移到 RHEL 8 的 RHEL 8 版本 ,或迁移到 RHEL 9 的 PostgreSQL 版本。
有关 Red Hat Quay 3.8 → 3.9 流程的更多信息,请参阅升级 Red Hat Quay Operator 概述。
6.1.2.1. PostgreSQL 数据库建议
Red Hat Quay 团队推荐以下用于管理 PostgreSQL 数据库。
- 数据库备份应该定期使用 PostgreSQL 镜像中提供的工具或您自己的备份基础架构来执行。Red Hat Quay Operator 目前没有确保备份 PostgreSQL 数据库。
-
必须使用 PostgreSQL 工具和程序从备份中恢复 PostgreSQL 数据库。请注意,您的
Quay
pod 在数据库恢复过程中不应运行。 - 数据库磁盘空间由 Red Hat Quay Operator 自动分配 50 GiB。这个数字代表了大多数中小型 Red Hat Quay 安装的可用存储,但可能不足以满足您的用例。Red Hat Quay Operator 当前不会处理数据库卷的大小。
6.2. 配置外部 Redis
使用本节中的内容设置外部 Redis 部署。
6.2.1. 使用非受管 Redis 数据库
使用以下步骤设置外部 Redis 数据库。
流程
使用以下 Redis 字段创建
config.yaml
文件:# ... BUILDLOGS_REDIS: host: <quay-server.example.com> port: 6379 ssl: false # ... USER_EVENTS_REDIS: host: <quay-server.example.com> port: 6379 ssl: false # ...
输入以下命令使用配置文件创建 secret:
$ oc create secret generic --from-file config.yaml=./config.yaml config-bundle-secret
创建一个
quayregistry.yaml
文件,将 Redis 组件设置为非受管
组件并引用所创建的 secret:apiVersion: quay.redhat.com/v1 kind: QuayRegistry metadata: name: example-registry namespace: quay-enterprise spec: configBundleSecret: config-bundle-secret components: - kind: redis managed: false # ...
- 部署 Red Hat Quay registry。
其他资源
6.2.2. 使用非受管 Horizontal Pod Autoscaler
Pod 横向自动扩展(HPA)现在包含在 Clair
、Quay
和 Mirror
pod 中,以便它们现在会在负载激增过程中自动扩展。
由于 HPA 默认配置为 managed,因此 Clair
、Quay
和 Mirror
pod 的数量被设置为 2。这有助于避免在通过 Operator 或重新调度事件更新或重新配置 Red Hat Quay 时造成停机。
禁用 HorizontalPodAutoscaler
组件并尝试编辑 HPA 资源本身并增加 minReplicas
字段的值时,存在一个已知问题。当尝试此设置时,Quay
应用程序 pod 由非受管 HPA 扩展,并在 60 秒后扩展,副本数由 Red Hat Quay Operator 协调。因此,HPA pod 会持续创建,然后由 Operator 删除。
要解决这个问题,您应该将 Red Hat Quay 部署升级到至少版本 3.12.5 或 3.13.1,然后使用以下示例来避免问题。
此问题将在 Red Hat Quay 以后的版本中解决。如需更多信息,请参阅 PROJQUAY-6474。
6.2.2.1. 禁用 Horizontal Pod Autoscaler
要禁用自动扩展或创建自己的 HorizontalPodAutoscaler
组件,请在 QuayRegistry
自定义资源定义中将组件指定为 unmanaged
。要避免上面记录的已知问题,您必须修改 QuayRegistry
CRD 对象,并将 quay
、clair
和 mirror
组件的副本等于 null
。
流程
编辑
QuayRegistry
CRD,为quay
组件包含以下replicas: null
:$ oc edit quayregistry <quay_registry_name> -n <quay_namespace>
apiVersion: quay.redhat.com/v1 kind: QuayRegistry metadata: name: quay-registry namespace: quay-enterprise spec: components: - kind: horizontalpodautoscaler managed: false - kind: quay managed: true overrides: replicas: null 1 - kind: clair managed: true overrides: replicas: null - kind: mirror managed: true overrides: replicas: null # ...
- 1
- 在
QuayRegistry
CRD 中设置replicas: null
后,可能会生成新的副本集,因为Quay
应用程序的部署清单被replicas: 1
更改。
验证
创建自定义
HorizontalPodAutoscalers
CRD,并将minReplicas
量增加到更高的值,用于考试pe,3
:kind: HorizontalPodAutoscaler apiVersion: autoscaling/v2 metadata: name: quay-registry-quay-app namespace: quay-enterprise spec: scaleTargetRef: kind: Deployment name: quay-registry-quay-app apiVersion: apps/v1 minReplicas: 3 maxReplicas: 20 metrics: - type: Resource resource: name: memory target: type: Utilization averageUtilization: 90 - type: Resource resource: name: cpu target: type: Utilization averageUtilization: 90
输入以下命令来确保
QuayRegistry
应用程序成功启动:$ oc get pod | grep quay-app
输出示例
quay-registry-quay-app-5b8fd49d6b-7wvbk 1/1 Running 0 34m quay-registry-quay-app-5b8fd49d6b-jslq9 1/1 Running 0 3m42s quay-registry-quay-app-5b8fd49d6b-pskpz 1/1 Running 0 43m quay-registry-quay-app-upgrade-llctl 0/1 Completed 0 51m
输入以下命令来确保
HorizontalPodAutoscalers
可以成功启动:$ oc get hpa
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE quay-registry-quay-app Deployment/quay-registry-quay-app 67%/90%, 54%/90% 3 20 3 51m
6.2.3. 禁用 Route 组件
使用以下步骤防止 Red Hat Quay Operator 创建路由。
流程
在
quayregistry.yaml
文件中将组件设置为managed: false
:apiVersion: quay.redhat.com/v1 kind: QuayRegistry metadata: name: example-registry namespace: quay-enterprise spec: components: - kind: route managed: false
编辑
config.yaml
文件,以指定 Red Hat Quay 处理 SSL/TLS。例如:# ... EXTERNAL_TLS_TERMINATION: false # ... SERVER_HOSTNAME: example-registry-quay-quay-enterprise.apps.user1.example.com # ... PREFERRED_URL_SCHEME: https # ...
如果没有正确配置非受管路由,则会返回以下错误:
{ { "kind":"QuayRegistry", "namespace":"quay-enterprise", "name":"example-registry", "uid":"d5879ba5-cc92-406c-ba62-8b19cf56d4aa", "apiVersion":"quay.redhat.com/v1", "resourceVersion":"2418527" }, "reason":"ConfigInvalid", "message":"required component `route` marked as unmanaged, but `configBundleSecret` is missing necessary fields" }
禁用默认路由意味着您现在负责 创建路由
、Service
或 Ingress
,以访问 Red Hat Quay 实例。此外,您使用的任何 DNS 都必须与 Red Hat Quay 配置中的 SERVER_HOSTNAME
匹配。
6.2.4. 禁用监控组件
如果您在单一命名空间中安装 Red Hat Quay Operator,则监控组件会自动设置为 managed: false
。使用以下参考来显式禁用监控。
Unmanaged 监控
apiVersion: quay.redhat.com/v1 kind: QuayRegistry metadata: name: example-registry namespace: quay-enterprise spec: components: - kind: monitoring managed: false
要在这种情况下启用监控,请参阅 在单一命名空间中安装 Red Hat Quay Operator 时启用监控。
6.2.5. 禁用镜像组件
要禁用镜像,请使用以下 YAML 配置:
非受管镜像示例 YAML 配置示例
apiVersion: quay.redhat.com/v1 kind: QuayRegistry metadata: name: example-registry namespace: quay-enterprise spec: components: - kind: mirroring managed: false
第 7 章 使用 Operator 部署 Red Hat Quay
可以使用命令行界面或 OpenShift Container Platform 控制台部署 OpenShift Container Platform 上的 Red Hat Quay。这些步骤基本相同。
7.1. 从命令行部署 Red Hat Quay
使用以下步骤,使用命令行界面(CLI)从 部署 Red Hat Quay。
先决条件
- 已使用 CLI 登录 OpenShift Container Platform。
流程
输入以下命令创建一个命名空间,如
quay-enterprise
:$ oc new-project quay-enterprise
可选。如果要预先配置 Red Hat Quay 部署的任何方面,请为配置捆绑包创建一个
Secret
:$ oc create secret generic quay-enterprise-config-bundle --from-file=config-bundle.tar.gz=/path/to/config-bundle.tar.gz
在名为
quayregistry.yaml
的文件中创建QuayRegistry
自定义资源对于最小部署,请使用所有默认值:
quayregistry.yaml:
apiVersion: quay.redhat.com/v1 kind: QuayRegistry metadata: name: example-registry namespace: quay-enterprise
可选。如果要有一些组件非受管状态,请在
spec
字段中添加此信息。最小部署可能类似以下示例:带有非受管组件的 quayregistry.yaml 示例
apiVersion: quay.redhat.com/v1 kind: QuayRegistry metadata: name: example-registry namespace: quay-enterprise spec: components: - kind: clair managed: false - kind: horizontalpodautoscaler managed: false - kind: mirror managed: false - kind: monitoring managed: false
可选。如果您已创建了配置捆绑包,如
init-config-bundle-secret
,请在quayregistry.yaml
文件中引用它:带有配置捆绑包的 quayregistry.yaml 示例
apiVersion: quay.redhat.com/v1 kind: QuayRegistry metadata: name: example-registry namespace: quay-enterprise spec: configBundleSecret: init-config-bundle-secret
可选。如果配置了代理,您可以使用覆盖为 Red Hat Quay、Clair 和 mirror 添加信息:
配置了代理的 quayregistry.yaml 示例
kind: QuayRegistry metadata: name: quay37 spec: configBundleSecret: config-bundle-secret components: - kind: objectstorage managed: false - kind: route managed: true - kind: mirror managed: true overrides: env: - name: DEBUGLOG value: "true" - name: HTTP_PROXY value: quayproxy.qe.devcluster.openshift.com:3128 - name: HTTPS_PROXY value: quayproxy.qe.devcluster.openshift.com:3128 - name: NO_PROXY value: svc.cluster.local,localhost,quay370.apps.quayperf370.perfscale.devcluster.openshift.com - kind: tls managed: false - kind: clair managed: true overrides: env: - name: HTTP_PROXY value: quayproxy.qe.devcluster.openshift.com:3128 - name: HTTPS_PROXY value: quayproxy.qe.devcluster.openshift.com:3128 - name: NO_PROXY value: svc.cluster.local,localhost,quay370.apps.quayperf370.perfscale.devcluster.openshift.com - kind: quay managed: true overrides: env: - name: DEBUGLOG value: "true" - name: NO_PROXY value: svc.cluster.local,localhost,quay370.apps.quayperf370.perfscale.devcluster.openshift.com - name: HTTP_PROXY value: quayproxy.qe.devcluster.openshift.com:3128 - name: HTTPS_PROXY value: quayproxy.qe.devcluster.openshift.com:3128
输入以下命令在指定命名空间中创建
QuayRegistry
:$ oc create -n quay-enterprise -f quayregistry.yaml
输入以下命令查看
status.registryEndpoint
何时填充:$ oc get quayregistry -n quay-enterprise example-registry -o jsonpath="{.status.registryEndpoint}" -w
其他资源
- 有关如何跟踪 Red Hat Quay 部署进度的更多信息,请参阅监控和调试部署过程。
7.1.1. 使用 API 创建第一个用户
使用以下步骤在 Red Hat Quay 组织中创建第一个用户。
先决条件
-
配置选项
FEATURE_USER_INITIALIZE
必须设为true
。 - 数据库中不存在任何用户。
此流程通过指定 "access_token": true
来请求 OAuth 令牌。
打开 Red Hat Quay 配置文件并更新以下配置字段:
FEATURE_USER_INITIALIZE: true SUPER_USERS: - quayadmin
输入以下命令停止 Red Hat Quay 服务:
$ sudo podman stop quay
输入以下命令启动 Red Hat Quay 服务:
$ sudo podman run -d -p 80:8080 -p 443:8443 --name=quay -v $QUAY/config:/conf/stack:Z -v $QUAY/storage:/datastorage:Z {productrepo}/{quayimage}:{productminv}
运行以下
CURL
命令,以使用用户名、密码、电子邮件和访问令牌生成新用户:$ curl -X POST -k http://quay-server.example.com/api/v1/user/initialize --header 'Content-Type: application/json' --data '{ "username": "quayadmin", "password":"quaypass12345", "email": "quayadmin@example.com", "access_token": true}'
如果成功,命令会返回带有用户名、电子邮件和加密密码的对象。例如:
{"access_token":"6B4QTRSTSD1HMIG915VPX7BMEZBVB9GPNY2FC2ED", "email":"quayadmin@example.com","encrypted_password":"1nZMLH57RIE5UGdL/yYpDOHLqiNCgimb6W9kfF8MjZ1xrfDpRyRs9NUnUuNuAitW","username":"quayadmin"} # gitleaks:allow
如果用户存在于数据库中,则返回错误:
{"message":"Cannot initialize user in a non-empty database"}
如果您的密码至少没有 8 个字符或包含空格,则返回错误:
{"message":"Failed to initialize user: Invalid password, password must be at least 8 characters and contain no whitespace."}
输入以下命令登录到 Red Hat Quay 部署:
$ sudo podman login -u quayadmin -p quaypass12345 http://quay-server.example.com --tls-verify=false
输出示例
Login Succeeded!
7.1.2. 使用命令行查看创建的组件
使用以下步骤查看部署的 Red Hat Quay 组件。
先决条件
- 您已在 OpenShift Container Platform 上部署了 Red Hat Quay。
流程
输入以下命令查看部署的组件:
$ oc get pods -n quay-enterprise
输出示例
NAME READY STATUS RESTARTS AGE example-registry-clair-app-5ffc9f77d6-jwr9s 1/1 Running 0 3m42s example-registry-clair-app-5ffc9f77d6-wgp7d 1/1 Running 0 3m41s example-registry-clair-postgres-54956d6d9c-rgs8l 1/1 Running 0 3m5s example-registry-quay-app-79c6b86c7b-8qnr2 1/1 Running 4 3m42s example-registry-quay-app-79c6b86c7b-xk85f 1/1 Running 4 3m41s example-registry-quay-app-upgrade-5kl5r 0/1 Completed 4 3m50s example-registry-quay-database-b466fc4d7-tfrnx 1/1 Running 2 3m42s example-registry-quay-mirror-6d9bd78756-6lj6p 1/1 Running 0 2m58s example-registry-quay-mirror-6d9bd78756-bv6gq 1/1 Running 0 2m58s example-registry-quay-postgres-init-dzbmx 0/1 Completed 0 3m43s example-registry-quay-redis-8bd67b647-skgqx 1/1 Running 0 3m42s
7.1.3. Pod 横向自动扩展
默认部署显示了以下正在运行的 pod:
-
两个用于 Red Hat Quay 应用程序本身的 pod (
example-registry-quay-app requirements'
) -
一个 Red Hat Quay 日志记录的 Redis pod (
example-registry-quay-redis ldapmodify
) -
一个用于 PostgreSQL 的数据库 pod 用于元数据存储(
例如:-registry-quay-database fluentd
) -
两个
Quay
镜像 pod (example-registry-quay-mirror Case
) -
Clair 应用程序的两个 pod (
example-registry-clair-app channel
) -
一个用于 Clair 的 PostgreSQL pod (
example-registry-clair-postgres suit
)
默认情况下,水平 PPod 自动扩展配置为 管理
,并且 Quay 的 pod 数量,Clair 和存储库镜像的数量设置为 2。这有助于避免在通过 Red Hat Quay Operator 或重新调度事件更新或重新配置 Red Hat Quay 时造成停机。您可以输入以下命令查看有关 HPA 对象的信息:
$ oc get hpa -n quay-enterprise
输出示例
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE example-registry-clair-app Deployment/example-registry-clair-app 16%/90%, 0%/90% 2 10 2 13d example-registry-quay-app Deployment/example-registry-quay-app 31%/90%, 1%/90% 2 20 2 13d example-registry-quay-mirror Deployment/example-registry-quay-mirror 27%/90%, 0%/90% 2 20 2 13d
其他资源
有关预先配置 Red Hat Quay 部署的更多信息,请参阅为自动化配置 Red Hat Quay部分
7.1.4. 监控和调试部署过程
用户现在可以在部署阶段排除问题。QuayRegistry
对象中的状态可帮助您在部署期间监控组件的健康状况,可帮助您调试可能出现的任何问题。
流程
输入以下命令检查部署的状态:
$ oc get quayregistry -n quay-enterprise -o yaml
输出示例
部署后,Quay
Registry
对象将显示基本配置:apiVersion: v1 items: - apiVersion: quay.redhat.com/v1 kind: QuayRegistry metadata: creationTimestamp: "2021-09-14T10:51:22Z" generation: 3 name: example-registry namespace: quay-enterprise resourceVersion: "50147" selfLink: /apis/quay.redhat.com/v1/namespaces/quay-enterprise/quayregistries/example-registry uid: e3fc82ba-e716-4646-bb0f-63c26d05e00e spec: components: - kind: postgres managed: true - kind: clair managed: true - kind: redis managed: true - kind: horizontalpodautoscaler managed: true - kind: objectstorage managed: true - kind: route managed: true - kind: mirror managed: true - kind: monitoring managed: true - kind: tls managed: true - kind: clairpostgres managed: true configBundleSecret: example-registry-config-bundle-kt55s kind: List metadata: resourceVersion: "" selfLink: ""
使用
oc get pods
命令查看部署组件的当前状态:$ oc get pods -n quay-enterprise
输出示例
NAME READY STATUS RESTARTS AGE example-registry-clair-app-86554c6b49-ds7bl 0/1 ContainerCreating 0 2s example-registry-clair-app-86554c6b49-hxp5s 0/1 Running 1 17s example-registry-clair-postgres-68d8857899-lbc5n 0/1 ContainerCreating 0 17s example-registry-quay-app-upgrade-h2v7h 0/1 ContainerCreating 0 9s example-registry-quay-database-66f495c9bc-wqsjf 0/1 ContainerCreating 0 17s example-registry-quay-mirror-854c88457b-d845g 0/1 Init:0/1 0 2s example-registry-quay-mirror-854c88457b-fghxv 0/1 Init:0/1 0 17s example-registry-quay-postgres-init-bktdt 0/1 Terminating 0 17s example-registry-quay-redis-f9b9d44bf-4htpz 0/1 ContainerCreating 0 17s
在部署进行过程中,Quay
Registry
对象将显示当前状态。在这个实例中,数据库迁移会发生,其他组件会在完成前等待:status: conditions: - lastTransitionTime: "2021-09-14T10:52:04Z" lastUpdateTime: "2021-09-14T10:52:04Z" message: all objects created/updated successfully reason: ComponentsCreationSuccess status: "False" type: RolloutBlocked - lastTransitionTime: "2021-09-14T10:52:05Z" lastUpdateTime: "2021-09-14T10:52:05Z" message: running database migrations reason: MigrationsInProgress status: "False" type: Available lastUpdated: 2021-09-14 10:52:05.371425635 +0000 UTC unhealthyComponents: clair: - lastTransitionTime: "2021-09-14T10:51:32Z" lastUpdateTime: "2021-09-14T10:51:32Z" message: 'Deployment example-registry-clair-postgres: Deployment does not have minimum availability.' reason: MinimumReplicasUnavailable status: "False" type: Available - lastTransitionTime: "2021-09-14T10:51:32Z" lastUpdateTime: "2021-09-14T10:51:32Z" message: 'Deployment example-registry-clair-app: Deployment does not have minimum availability.' reason: MinimumReplicasUnavailable status: "False" type: Available mirror: - lastTransitionTime: "2021-09-14T10:51:32Z" lastUpdateTime: "2021-09-14T10:51:32Z" message: 'Deployment example-registry-quay-mirror: Deployment does not have minimum availability.' reason: MinimumReplicasUnavailable status: "False" type: Available
当部署过程成功完成时,QuayRegistry 对象中的状态不会显示不健康的组件:
status: conditions: - lastTransitionTime: "2021-09-14T10:52:36Z" lastUpdateTime: "2021-09-14T10:52:36Z" message: all registry component healthchecks passing reason: HealthChecksPassing status: "True" type: Available - lastTransitionTime: "2021-09-14T10:52:46Z" lastUpdateTime: "2021-09-14T10:52:46Z" message: all objects created/updated successfully reason: ComponentsCreationSuccess status: "False" type: RolloutBlocked currentVersion: {producty} lastUpdated: 2021-09-14 10:52:46.104181633 +0000 UTC registryEndpoint: https://example-registry-quay-quay-enterprise.apps.docs.quayteam.org unhealthyComponents: {}
7.2. 从 OpenShift Container Platform 控制台部署 Red Hat Quay
-
创建一个命名空间,如
quay-enterprise
。 - 选择 Operators → Installed Operators,然后选择 Quay Operator 以导航到 Operator 详细视图。
- 在 'Provided APIs' 下的 'Quay Registry' 标题中点 'Create Instance'。
-
(可选)更改
QuayRegistry
的 'Name'。这将影响 registry 的主机名。所有其他字段都填充了默认值。 -
点 'Create' 以提交由 Quay Operator 部署的
QuayRegistry
。 -
您应该被重定向到
QuayRegistry
列表视图。点您刚才创建的QuayRegistry
来查看详情视图。 - 在 'Registry Endpoint' 有值后,可以在 UI 中点来访问新的 Quay registry。现在,您可以选择"Create Account"来创建用户并登录。
7.2.1. 使用 Red Hat Quay UI 创建第一个用户
使用以下步骤通过 Red Hat Quay UI 创建第一个用户。
此流程假设 FEATURE_USER_CREATION
配置选项没有设置为 false。
如果为 false
,则 UI 上的 Create Account
功能将被禁用,您必须使用 API 来创建第一个用户。
流程
- 在 OpenShift Container Platform 控制台中,使用适当的命名空间 / 项目进入到 Operators → Installed Operators。
单击新安装的
QuayRegistry
对象以查看详细信息。例如:-
在
Registry Endpoint
具有值后,在浏览器中导航到此 URL。 在 Red Hat Quay registry UI 中,选择 Create Account 来创建用户。例如:
输入用户名、密码、电子邮件 的详细信息,然后单击 创建帐户。例如:
创建第一个用户后,会自动登录到 Red Hat Quay registry。例如:
第 8 章 查看 QuayRegistry 对象的状态
给定 Red Hat Quay 部署的生命周期可观察性会在对应的 QuayRegistry
对象的 status
部分中报告。Red Hat Quay Operator 持续更新这个部分,这应该是第一个位置,以便查找 Red Hat Quay 或其受管依赖项中的任何问题或状态更改。
8.1. 查看 registry 端点
使用 Red Hat Quay 后,status.registryEndpoint
字段将填充 registry 的公开可用主机名。
8.2. 查看正在使用的 Red Hat Quay 版本
当前运行的 Red Hat Quay 的当前版本将报告为 status.currentVersion
。
8.3. 查看 Red Hat Quay 部署的条件
某些条件将在 status.conditions
中报告。
第 9 章 在 OpenShift Container Platform 上自定义 Red Hat Quay
部署后,您可以通过编辑 Red Hat Quay 配置捆绑包 secret spec.configBundleSecret
来自定义 Red Hat Quay 应用程序。您还可以更改组件的受管状态,并为 QuayRegistry
资源的 spec.components
对象中为一些组件配置资源请求。
9.1. 在 OpenShift Container Platform 控制台中编辑配置捆绑包 secret
使用以下步骤在 OpenShift Container Platform 控制台中编辑配置捆绑包 secret。
流程
在 Red Hat Quay Registry 概述屏幕上,单击 Config Bundle Secret 的链接。
要编辑 secret,请点击 Actions → Edit Secret。
修改配置并保存更改。
- 监控部署以确保成功完成并且配置更改已生效。
9.2. 确定 QuayRegistry 端点和 secret
使用以下步骤查找 QuayRegistry
端点和 secret。
流程
您可以输入以下命令来检查
QuayRegistry
资源,使用oc describe quayregistry
或oc get quayregistry -o yaml
来查找当前的端点和 secret:$ oc get quayregistry example-registry -n quay-enterprise -o yaml
输出示例
apiVersion: quay.redhat.com/v1 kind: QuayRegistry metadata: ... name: example-registry namespace: quay-enterprise ... spec: components: - kind: quay managed: true ... - kind: clairpostgres managed: true configBundleSecret: init-config-bundle-secret 1 status: currentVersion: 3.7.0 lastUpdated: 2022-05-11 13:28:38.199476938 +0000 UTC registryEndpoint: https://example-registry-quay-quay-enterprise.apps.docs.gcp.quaydev.org 2
9.3. 下载现有配置
以下流程描述了如何使用不同策略下载现有配置。
9.3.1. 使用 config bundle secret 下载现有配置
您可以使用 config bundle secret 来下载现有配置。
流程
输入以下命令描述
QuayRegistry
资源:$ oc describe quayregistry -n <quay_namespace>
# ... Config Bundle Secret: example-registry-config-bundle-v123x # ...
输入以下命令来获取 secret 数据:
$ oc get secret -n <quay_namespace> <example-registry-config-bundle-v123x> -o jsonpath='{.data}'
输出示例
{ "config.yaml": "RkVBVFVSRV9VU0 ... MDAwMAo=" }
输入以下命令解码数据:
$ echo 'RkVBVFVSRV9VU0 ... MDAwMAo=' | base64 --decode
输出示例
FEATURE_USER_INITIALIZE: true BROWSER_API_CALLS_XHR_ONLY: false SUPER_USERS: - quayadmin FEATURE_USER_CREATION: false FEATURE_QUOTA_MANAGEMENT: true FEATURE_PROXY_CACHE: true FEATURE_BUILD_SUPPORT: true DEFAULT_SYSTEM_REJECT_QUOTA_BYTES: 102400000
可选。您可以通过传递 >>
config.yaml
标志,将数据导出到当前目录中。例如:$ echo 'RkVBVFVSRV9VU0 ... MDAwMAo=' | base64 --decode >> config.yaml
第 10 章 在 OpenShift Container Platform 上的 Red Hat Quay 中配置自定义 SSL/TLS 证书
您可以在 OpenShift Container Platform 上的 Red Hat Quay 初始部署前或之后配置自定义 SSL/TLS 证书。这个过程涉及在 QuayRegistry
YAML 文件中创建或更新 configBundleSecret
资源,以集成您的自定义证书。
如果要将证书添加到现有部署中,则必须在新配置捆绑包 secret 中包含现有 config.yaml
文件,即使您没有进行任何配置更改。
以下流程允许您应用自定义 SSL/TLS 证书,以确保安全通信,并满足 OpenShift Container Platform 部署中的 Red Hat Quay 的特定安全要求。这些步骤包括生成证书颁发机构(CA)文件、ssl.key
和 ssl.cert
。然后,它演示了如何将这些文件集成到 OpenShift Container Platform 部署的 Red Hat Quay 中,以确保 registry 使用指定的安全设置,并符合机构的 SSL/TLS 策略。
以下流程用于使用 HTTPS 证书保护 Red Hat Quay。请注意,这与管理证书颁发机构信任捆绑包不同。CA Trust Bundles 由 Quay
容器中的系统进程用来根据可信 CA 验证证书,并确保 LDAP、存储后端和 OIDC 连接等服务是可信的。
10.1. 创建证书颁发机构
要使用自签名证书配置 Red Hat Quay,您必须首先创建一个证书颁发机构(CA)。使用以下步骤创建证书颁发机构(CA)。
流程
输入以下命令生成 root CA 密钥:
$ openssl genrsa -out rootCA.key 2048
输入以下命令生成 root CA 证书:
$ openssl req -x509 -new -nodes -key rootCA.key -sha256 -days 1024 -out rootCA.pem
输入要合并到证书请求中的信息,包括服务器主机名,例如:
Country Name (2 letter code) [XX]:IE State or Province Name (full name) []:GALWAY Locality Name (eg, city) [Default City]:GALWAY Organization Name (eg, company) [Default Company Ltd]:QUAY Organizational Unit Name (eg, section) []:DOCS Common Name (eg, your name or your server's hostname) []:quay-server.example.com
10.1.1. 签署证书
使用以下步骤为证书签名。
流程
输入以下命令生成服务器密钥:
$ openssl genrsa -out ssl.key 2048
输入以下命令生成签名请求:
$ openssl req -new -key ssl.key -out ssl.csr
输入要合并到证书请求中的信息,包括服务器主机名,例如:
Country Name (2 letter code) [XX]:IE State or Province Name (full name) []:GALWAY Locality Name (eg, city) [Default City]:GALWAY Organization Name (eg, company) [Default Company Ltd]:QUAY Organizational Unit Name (eg, section) []:DOCS Common Name (eg, your name or your server's hostname) []:quay-server.example.com Email Address []:
创建配置文件
openssl.cnf
,指定服务器主机名,例如:openssl.cnf
[req] req_extensions = v3_req distinguished_name = req_distinguished_name [req_distinguished_name] [ v3_req ] basicConstraints = CA:FALSE keyUsage = nonRepudiation, digitalSignature, keyEncipherment subjectAltName = @alt_names [alt_names] DNS.1 = <quay-server.example.com> IP.1 = 192.168.1.112
使用配置文件生成证书
ssl.cert
:$ openssl x509 -req -in ssl.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out ssl.cert -days 356 -extensions v3_req -extfile openssl.cnf
10.2. 创建自定义 SSL/TLS configBundleSecret 资源
在创建自定义 SSL/TLS 证书后,您可以在 OpenShift Container Platform 上为 Red Hat Quay 创建自定义 configBundleSecret
资源,允许您上传 ssl.cert
和 ssl.key
文件。
先决条件
-
您有 base64 将原始配置捆绑包解码为一个
config.yaml
文件。 - 您已生成了自定义 SSL 证书和密钥。
流程
创建新的 YAML 文件,如
custom-ssl-config-bundle-secret.yaml
:$ touch custom-ssl-config-bundle-secret.yaml
创建
custom-ssl-config-bundle-secret
资源。运行以下命令来创建资源:
$ oc -n <namespace> create secret generic custom-ssl-config-bundle-secret \ --from-file=config.yaml=<config.yaml> \ 1 --from-file=ssl.cert=<ssl.cert> \ 2 --from-file=extra_ca_cert=<ca.cert> \ 3 --from-file=ssl.key=<ssl.key> \ 4 --dry-run=client -o yaml > custom-ssl-config-bundle-secret.yaml
可选。您可以输入以下命令来检查
custom-ssl-config-bundle-secret.yaml
文件的内容:$ cat custom-ssl-config-bundle-secret.yaml
输出示例
apiVersion: v1 data: config.yaml: QUxMT1dfUFVMTFNfV0lUSE9VVF9TVFJJQ1RfTE9HR0lORzogZmFsc2UKQVVUSEVOVElDQVRJT05fVFlQRTogRGF0YWJhc2UKREVGQVVMVF9UQUdfRVhQSVJBVElPTjogMncKRElTVFJJQlVURURfU1R... ssl.cert: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUVYakNDQTBhZ0F3SUJBZ0lVTUFBRk1YVWlWVHNoMGxNTWI3U1l0eFV5eTJjd0RRWUpLb1pJaHZjTkFRRUwKQlFBd2dZZ3hDekFKQmdOVkJBWVR... extra_ca_cert:LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUVYakNDQTBhZ0F3SUJBZ0lVTUFBRk1YVWlWVHNoMGxNTWI3U1l0eFV5eTJjd0RRWUpLb1pJaHZjTkFRRUwKQlFBd2dZZ3hDe... ssl.key: LS0tLS1CRUdJTiBQUklWQVRFIEtFWS0tLS0tCk1JSUV2UUlCQURBTkJna3Foa2lHOXcwQkFRRUZBQVNDQktjd2dnU2pBZ0VBQW9JQkFRQ2c0VWxZOVV1SVJPY1oKcFhpZk9MVEdqaS9neUxQMlpiMXQ... kind: Secret metadata: creationTimestamp: null name: custom-ssl-config-bundle-secret namespace: <namespace>
输入以下命令来创建
configBundleSecret
资源:$ oc create -n <namespace> -f custom-ssl-config-bundle-secret.yaml
输出示例
secret/custom-ssl-config-bundle-secret created
输入以下命令更新
QuayRegistry
YAML 文件来引用custom-ssl-config-bundle-secret
对象:$ oc patch quayregistry <registry_name> -n <namespace> --type=merge -p '{"spec":{"configBundleSecret":"custom-ssl-config-bundle-secret"}}'
输出示例
quayregistry.quay.redhat.com/example-registry patched
输入以下命令将
QuayRegistry
YAML 的tls
组件设置为false
:$ oc patch quayregistry <registry_name> -n <namespace> --type=merge -p '{"spec":{"components":[{"kind":"tls","managed":false}]}}'
输出示例
quayregistry.quay.redhat.com/example-registry patched
输入以下命令来确保
QuayRegistry
YAML 文件已更新为使用自定义 SSLconfigBundleSecret
资源,并且您的 和tls
资源已设置为false
:$ oc get quayregistry <registry_name> -n <namespace> -o yaml
输出示例
# ... configBundleSecret: custom-ssl-config-bundle-secret # ... spec: components: - kind: tls managed: false # ...
验证
输入以下命令确认到服务器和端口的 TLS 连接:
$ openssl s_client -connect <quay-server.example.com>:443
输出示例
# ... SSL-Session: Protocol : TLSv1.3 Cipher : TLS_AES_256_GCM_SHA384 Session-ID: 0E995850DC3A8EB1A838E2FF06CE56DBA81BD8443E7FA05895FBD6FBDE9FE737 Session-ID-ctx: Resumption PSK: 1EA68F33C65A0F0FA2655BF9C1FE906152C6E3FEEE3AEB6B1B99BA7C41F06077989352C58E07CD2FBDC363FA8A542975 PSK identity: None PSK identity hint: None SRP username: None TLS session ticket lifetime hint: 7200 (seconds) # ...