在 OpenShift Container Platform 上部署 Red Hat Quay Operator


Red Hat Quay 3.12

在 OpenShift Container Platform 上部署 Red Hat Quay Operator

Red Hat OpenShift Documentation Team

摘要

在 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 资源相同的命名空间中的 Secretmetadata.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 置备 QuayClair 数据库所需的持久性卷声明。这些 PVC 用于持久存储数据,确保 Red Hat Quay registry 和 Clair 漏洞扫描程序仍然可用,并在重启或失败时保持其状态。

在继续安装前,请验证集群中是否配置了默认 StorageClass,以确保为 QuayClair 组件无缝置备存储。

第 2 章 从 OperatorHub 安装 Red Hat Quay Operator

使用以下步骤从 OpenShift Container Platform OperatorHub 安装 Red Hat Quay Operator。

流程

  1. 使用 OpenShift Container Platform 控制台,选择 OperatorsOperatorHub
  2. 在搜索框中,键入 Red Hat Quay 并选择红帽提供的官方 Red Hat Quay Operator。这会将您定向到 安装 页面,其中概述了功能、先决条件和部署信息。
  3. 选择 Install。这会将您定向到 Operator 安装 页面。
  4. 以下选项可用于自定义安装:

    1. 更新频道 : 选择更新频道,例如 stable-3.12 作为最新版本。
    2. 安装模式:

      1. 如果您希望 Red Hat Quay Operator 在集群范围内可用,请选择 All namespaces on the cluster。建议您在集群范围安装 Red Hat Quay Operator。如果您选择了单个命名空间,则监控组件默认不可用。
      2. 如果您希望仅在单一命名空间中部署它,选择 A specific namespace on the cluster

        • Approval Strategy: 选择批准自动或手动更新。建议自动更新策略。
  5. 选择 Install

第 3 章 在部署前配置 Red Hat Quay

当在 OpenShift Container Platform 上部署时,Red Hat Quay Operator 可以管理所有 Red Hat Quay 组件。这是默认配置,但当您希望对设置进行更多控制时,您可以在外部管理一个或多个组件。

使用以下模式配置非受管 Red Hat Quay 组件。

流程

  1. 使用适当的设置创建 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
  2. 输入以下命令,使用配置文件创建 Secret

    $ oc create secret generic --from-file config.yaml=./config.yaml config-bundle-secret
  3. 创建一个 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
    # ...

  4. 输入以下命令使用 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 部署为您的非受管存储配置。

流程

  1. 在 Red Hat Quay 控制台中,导航到 StorageObject Bucket Claims,在 Red Hat Quay 控制台中创建一个 NooBaa Object Bucket Claim。
  2. 检索 Object Bucket Claim 数据详情,包括 Access Key, Bucket Name, Endpoint (hostname)和 Secret Key。
  3. 创建 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 部署。

流程

  1. 在控制台的 Storage → Object Bucket Claims 中创建 NooBaa Object Bucket Claim。
  2. 检索 Object Bucket Claim 数据详细信息,包括 Access KeyBucket NameEndpoint (hostname)Secret Key
  3. 使用 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。

  1. 登录 OpenShift Web 控制台
  2. OperatorsOperatorHub
  3. 在搜索框中输入 本地存储,从 Operator 列表中查找 Local Storage Operator。点 Local Storage
  4. Install
  5. 在 Install Operator 页面中设置以下选项:

    • 对于更新频道,请选择 stable
    • 对于 Installation 模式,选择 A specific namespace on the cluster
    • 对于 Installed Namespace,选择 Operator recommended namespace openshift-local-storage
    • 对于更新批准,请选择 Automatic
  6. 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 节点。
  • 有关其他资源要求,请参阅规划您的部署指南。

流程

  1. 登录 OpenShift Web 控制台
  2. OperatorsOperatorHub
  3. 在搜索框中输入 OpenShift Data Foundation。单击 OpenShift Data Foundation
  4. Install
  5. 在 Install Operator 页面中设置以下选项:

    • 对于 Update channel,请选择最新的稳定版本。
    • 对于 Installation 模式,选择 A specific namespace on the cluster
    • 对于 Installed Namespace,选择 Operator recommended Namespace: openshift-storage
    • 对于更新批准,请选择 AutomaticManual

      如果选择 Automatic 更新,Operator Lifecycle Manager(OLM)将自动升级 Operator 的运行实例,而无需任何干预。

      如果选择 手动 更新,则 OLM 会创建一个更新请求。作为集群管理员,您必须手动批准该更新请求,才能将 Operator 更新至更新的版本。

    • 对于 Console 插件,选择 Enable
  6. Install

    安装 Operator 后,用户界面中会出现带有 Web 控制台更新信息 的弹出窗口。点这个弹出窗口中的 Refresh web console 来反映控制台的更改。

  7. 继续以下部分"创建独立多云对象网关",以使用 Red Hat Quay 的 Multicloud 对象网关组件。
3.2.3.1.3. 使用 OpenShift Container Platform UI 创建独立多云对象网关

使用以下步骤创建独立多云对象网关。

先决条件

  • 已安装 Local Storage Operator。
  • 已安装 Red Hat OpenShift Data Foundation Operator。

流程

  1. OpenShift Web 控制台中,点 OperatorsInstalled Operators 查看所有已安装的 Operator。

    确保命名空间为 openshift-storage

  2. 单击 Create StorageSystem
  3. Backing storage 页面中,选择以下内容:

    1. Deployment 类型选择 Multicloud Object Gateway
    2. 选择 Create a new StorageClass using the local storage devices 选项。
    3. Next

      注意

      如果还没有安装,系统会提示您安装 Local Storage Operator。点 Install 并按照"在 OpenShift Container Platform 上安装 Local Storage Operator"中所述的步骤进行操作。

  4. Create local volume set 页面中,提供以下信息:

    1. LocalVolumeSetStorageClass 输入一个名称。默认情况下,存储类名称会出现本地卷集名称。您可以更改名称。
    2. 选择以下任意一项:

      • 所有节点上的磁盘

        使用与所有节点上所选过滤器匹配的可用磁盘。

      • 所选节点上的磁盘

        仅在所选节点上使用与所选过滤器匹配的可用磁盘。

    3. 从可用 Disk Type 列表中,选择 SSD/NVMe
    4. 展开 Advanced 部分并设置以下选项:

      卷模式

      文件系统会被默认选择。始终为卷模式选择 Filesystem。

      设备类型

      从下拉列表中选择一个或多个设备类型。

      磁盘大小

      为设备设置最小 100GB 大小,以及需要包含的设备的最大可用大小。

      磁盘限制上限

      这表示节点上可以创建的 PV 数量上限。如果此字段留空,则为匹配节点上的所有可用磁盘创建 PV。

    5. Next

      此时会显示一个用于确认创建 LocalVolumeSet 的弹出窗口。

    6. 单击 Yes 以继续。
  5. Capacity 和 nodes 页面中,配置以下内容:

    1. 可用的原始容量会根据与存储类关联的所有附加磁盘填充容量值。这将需要一些时间才能出现。Selected nodes 列表根据存储类显示节点。
    2. Next 继续。
  6. 可选。选择 Connect to an external key management service 复选框。这是集群范围加密的可选选项。

    1. Key Management Service Provider 下拉列表中,选择 VaultThales CipherTrust Manager (using KMIP)。如果选择了 Vault,请进入下一步。如果您选择了 Thales CipherTrust Manager (using KMIP),请转到步骤 iii。
    2. 选择身份验证方法

      使用令牌验证方法

      • 输入唯一的连接名称 , 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 NameAuthentication Path (如果适用)。
        • 上传对应的 PEM 编码证书文件,以提供 CA 证书客户端证书客户端私钥
        • Save 并跳过步骤 iv。
    3. 要使用 Thales CipherTrust Manager (using KMIP) 作为 KMS 供应商,请按照以下步骤执行:

      1. 在项目中输入密钥管理服务的唯一连接名称
      2. AddressPort 部分中,输入 Thales CipherTrust Manager 的 IP 以及在其中启用了 KMIP 接口的端口。例如:

        • 地址: 123.34.3.2
        • 端口 :5696
      3. 上传 客户端证书CA 证书客户端私钥
      4. 如果启用了 StorageClass 加密,请输入用于加密和解密的唯一标识符。
      5. TLS Server 字段是可选的,并在没有 KMIP 端点的 DNS 条目时使用。例如:kmip_all_<port>.ciphertrustmanager.local
    4. 选择 网络
    5. Next
  7. Review and create 页面中,检查配置详情。若要修改任何配置设置,请单击 Back
  8. 单击 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 的集群中无法并行运行以下配置。

流程

  1. OpenShift Web 控制台中,然后选择 OperatorsOperatorHub
  2. 搜索 Red Hat OpenShift Data Foundation,然后选择 Install
  3. 接受所有默认选项,然后选择 Install
  4. 通过查看 Status 列确认 Operator 已安装,该列应标记为 Succeeded

    警告

    安装 Red Hat OpenShift Data Foundation Operator 后,会提示您创建存储系统。不要遵循这一指令。反之,按照以下步骤所述创建 NooBaa 对象存储。

  5. 在您的机器上,使用以下信息创建一个名为 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 对象网关 的单一实例部署。

  6. 使用以下命令应用配置:

    $ oc create -n openshift-storage -f noobaa.yaml

    输出示例

    noobaa.noobaa.io/noobaa created

  7. 几分钟后,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

  8. 通过创建以下 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
    1
    对象存储服务的整体容量。根据需要调整。
    2
    用于请求的 PersistentVolume 的 StorageClass。删除此属性以使用集群默认。
  9. 输入以下命令应用配置:

    $ oc create -f noobaa-pv-backing-store.yaml

    输出示例

    backingstore.noobaa.io/noobaa-pv-backing-store created

    这会为网关创建后备存储配置。Red Hat Quay 中的所有镜像将通过由上述配置创建的 PersistentVolume 中的网关存储为对象。

  10. 运行以下命令,使 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.certssl.key 现在被移到一个单独的持久 secret 中,这样可确保每次协调时不会重新生成密钥和证书对。密钥和证书对现在格式化为 边缘路由,并挂载到 Quay 容器中的同一目录。

在配置 SSL/TLS 和路由时,可以有多个 permutations,但会应用以下规则:

  • 如果 管理 SSL/TLS,则您的路由还必须 管理
  • 如果 SSL/TLS 是 非受管状态,则必须直接在 config 捆绑包中提供证书。

下表描述了有效选项:

表 4.1. TLS 和路由的有效配置选项
选项RouteTLS提供的证书结果

我自己的负载均衡器处理 TLS

受管

受管

带有默认通配符证书的边缘路由

Red Hat Quay 处理 TLS

受管

Unmanaged

使用挂载到 pod 中的证书传递路由

Red Hat Quay 处理 TLS

Unmanaged

Unmanaged

证书在 quay pod 中设置,但必须手动创建路由

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 配置资源。

流程

  1. 在 OpenShift Container Platform 开发人员控制台中,点 OperatorsInstalled OperatorsRed Hat Quay
  2. 单击 QuayRegistry
  3. 点 registry 的名称,如 example-registry
  4. YAML
  5. spec.components 字段中,您可以通过设置 .overrides.resources.limitsoverrides.resources.requests 字段的值来覆盖 quayclairmirror clairpostgrespostgres 资源的资源。例如:

    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: {}
    1
    limitsrequests 字段设置为 {} 使用这些资源的默认值。
    2
    limitsrequests 字段留空时,对这些资源没有限制。

5.2. 通过编辑 QuayRegistry YAML 来配置资源请求

在部署 registry 后,您可以重新配置 Red Hat Quay 来配置资源请求。这可以通过直接编辑 QuayRegistry YAML 文件,然后重新部署 registry 来完成。

流程

  1. 可选:如果您没有 QuayRegistry YAML 文件的本地副本,请输入以下命令来获取该文件:

    $ oc get quayregistry <registry_name> -n <namespace> -o yaml > quayregistry.yaml
  2. 打开从此流程的第 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
  3. 保存更改。
  4. 运行以下命令,使用更新的配置应用 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 数据库。

流程

  1. 使用所需的数据库字段创建 config.yaml 文件。例如:

    config.yaml 文件示例:

    DB_URI: postgresql://test-quay-database:postgres@test-quay-database:5432/test-quay-database

  2. 使用配置文件创建 Secret

    $ kubectl create secret generic --from-file config.yaml=./config.yaml config-bundle-secret
  3. 创建一个 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 配置字段:

表 6.1. 数据库 URI
字段类型描述

DB_URI
(必需)

字符串

用于访问数据库的 URI,包括任何凭据。

DB_URI 字段示例:

postgresql://quayuser:quaypass@quay-server.example.com:5432/quay

6.1.1.2. 数据库连接参数

可选的连接参数由 DB_CONNECTION_ARGS 参数配置。DB_CONNECTION_ARGS 中定义的一些键值对是通用的,另一些则特定于数据库。

下表描述了数据库连接参数:

表 6.2. 数据库连接参数
字段类型描述

DB_CONNECTION_ARGS

对象

数据库的可选连接参数,如超时和 SSL/TLS。

.autorollback

布尔值

是否使用 thread-local 连接。
应该始终为 true

.threadlocals

布尔值

是否使用自动滚动连接。
应该始终为 true

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 连接的优先级将与服务器协商。有六个模式:

表 6.3. SSL/TLS 选项
模式描述

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 数据库。

流程

  1. 使用以下 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
    # ...
  2. 输入以下命令使用配置文件创建 secret:

    $ oc create secret generic --from-file config.yaml=./config.yaml config-bundle-secret
  3. 创建一个 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
    # ...
  4. 部署 Red Hat Quay registry。

其他资源

Redis 配置字段

6.2.2. 使用非受管 Horizontal Pod Autoscaler

Pod 横向自动扩展(HPA)现在包含在 ClairQuayMirror pod 中,以便它们现在会在负载激增过程中自动扩展。

由于 HPA 默认配置为 managed,因此 ClairQuayMirror 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 对象,并将 quayclairmirror 组件的副本等于 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 更改。

验证

  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
  2. 输入以下命令来确保 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

  3. 输入以下命令来确保 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 创建路由。

流程

  1. quayregistry.yaml 文件中将组件设置为 managed: false

    apiVersion: quay.redhat.com/v1
    kind: QuayRegistry
    metadata:
      name: example-registry
      namespace: quay-enterprise
    spec:
      components:
        - kind: route
          managed: false
  2. 编辑 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"
    }
注意

禁用默认路由意味着您现在负责 创建路由ServiceIngress,以访问 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。

流程

  1. 输入以下命令创建一个命名空间,如 quay-enterprise

    $ oc new-project quay-enterprise
  2. 可选。如果要预先配置 Red Hat Quay 部署的任何方面,请为配置捆绑包创建一个 Secret

    $ oc create secret generic quay-enterprise-config-bundle --from-file=config-bundle.tar.gz=/path/to/config-bundle.tar.gz
  3. 在名为 quayregistry.yaml的文件中创建 QuayRegistry 自定义资源

    1. 对于最小部署,请使用所有默认值:

      quayregistry.yaml:

      apiVersion: quay.redhat.com/v1
      kind: QuayRegistry
      metadata:
        name: example-registry
        namespace: quay-enterprise

    2. 可选。如果要有一些组件非受管状态,请在 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

    3. 可选。如果您已创建了配置捆绑包,如 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

    4. 可选。如果配置了代理,您可以使用覆盖为 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

  4. 输入以下命令在指定命名空间中创建 QuayRegistry

    $ oc create -n quay-enterprise -f quayregistry.yaml
  5. 输入以下命令查看 status.registryEndpoint 何时填充:

    $ oc get quayregistry -n quay-enterprise example-registry -o jsonpath="{.status.registryEndpoint}" -w

其他资源

7.1.1. 使用 API 创建第一个用户

使用以下步骤在 Red Hat Quay 组织中创建第一个用户。

先决条件

  • 配置选项 FEATURE_USER_INITIALIZE 必须设为 true
  • 数据库中不存在任何用户。
流程

此流程通过指定 "access_token": true 来请求 OAuth 令牌。

  1. 打开 Red Hat Quay 配置文件并更新以下配置字段:

    FEATURE_USER_INITIALIZE: true
    SUPER_USERS:
         -  quayadmin
  2. 输入以下命令停止 Red Hat Quay 服务:

    $ sudo podman stop quay
  3. 输入以下命令启动 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}
  4. 运行以下 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."}
  5. 输入以下命令登录到 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。

流程

  1. 输入以下命令查看部署的组件:

    $ 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 对象中的状态可帮助您在部署期间监控组件的健康状况,可帮助您调试可能出现的任何问题。

流程

  1. 输入以下命令检查部署的状态:

    $ 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: ""
  2. 使用 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

  3. 在部署进行过程中,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
  4. 当部署过程成功完成时,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

  1. 创建一个命名空间,如 quay-enterprise
  2. 选择 OperatorsInstalled Operators,然后选择 Quay Operator 以导航到 Operator 详细视图。
  3. 在 'Provided APIs' 下的 'Quay Registry' 标题中点 'Create Instance'。
  4. (可选)更改 QuayRegistry 的 'Name'。这将影响 registry 的主机名。所有其他字段都填充了默认值。
  5. 点 'Create' 以提交由 Quay Operator 部署的 QuayRegistry
  6. 您应该被重定向到 QuayRegistry 列表视图。点您刚才创建的 QuayRegistry 来查看详情视图。
  7. 在 '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 来创建第一个用户。

流程

  1. 在 OpenShift Container Platform 控制台中,使用适当的命名空间 / 项目进入到 OperatorsInstalled Operators
  2. 单击新安装的 QuayRegistry 对象以查看详细信息。例如:

    QuayRegistry details

  3. Registry Endpoint 具有值后,在浏览器中导航到此 URL。
  4. 在 Red Hat Quay registry UI 中,选择 Create Account 来创建用户。例如:

    Create Account

  5. 输入用户名、密码电子邮件 的详细信息,然后单击 创建帐户。例如:

    Enter account details

创建第一个用户后,会自动登录到 Red Hat Quay registry。例如:

Initial log in

第 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。

流程

  1. 在 Red Hat Quay Registry 概述屏幕上,单击 Config Bundle Secret 的链接。

    Red Hat Quay Registry overview

  2. 要编辑 secret,请点击 ActionsEdit Secret

    Edit secret

  3. 修改配置并保存更改。

    Save changes

  4. 监控部署以确保成功完成并且配置更改已生效。

9.2. 确定 QuayRegistry 端点和 secret

使用以下步骤查找 QuayRegistry 端点和 secret。

流程

  1. 您可以输入以下命令来检查 QuayRegistry 资源,使用 oc describe quayregistryoc 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

    1
    包含 config.yaml 文件和任何 SSL/TLS 证书的 config bundle secret。
    2
    registry 的 URL,用于浏览器访问 registry UI 和 registry API 端点。

9.3. 下载现有配置

以下流程描述了如何使用不同策略下载现有配置。

9.3.1. 使用 config bundle secret 下载现有配置

您可以使用 config bundle secret 来下载现有配置。

流程

  1. 输入以下命令描述 QuayRegistry 资源:

    $ oc describe quayregistry -n <quay_namespace>
    # ...
      Config Bundle Secret:  example-registry-config-bundle-v123x
    # ...
  2. 输入以下命令来获取 secret 数据:

    $ oc get secret -n <quay_namespace> <example-registry-config-bundle-v123x> -o jsonpath='{.data}'

    输出示例

    {
        "config.yaml": "RkVBVFVSRV9VU0 ... MDAwMAo="
    }

  3. 输入以下命令解码数据:

    $ 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

  4. 可选。您可以通过传递 >> 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.keyssl.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)。

流程

  1. 输入以下命令生成 root CA 密钥:

    $ openssl genrsa -out rootCA.key 2048
  2. 输入以下命令生成 root CA 证书:

    $ openssl req -x509 -new -nodes -key rootCA.key -sha256 -days 1024 -out rootCA.pem
  3. 输入要合并到证书请求中的信息,包括服务器主机名,例如:

    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. 签署证书

使用以下步骤为证书签名。

流程

  1. 输入以下命令生成服务器密钥:

    $ openssl genrsa -out ssl.key 2048
  2. 输入以下命令生成签名请求:

    $ openssl req -new -key ssl.key -out ssl.csr
  3. 输入要合并到证书请求中的信息,包括服务器主机名,例如:

    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 []:
  4. 创建配置文件 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

  5. 使用配置文件生成证书 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.certssl.key 文件。

先决条件

  • 您有 base64 将原始配置捆绑包解码为一个 config.yaml 文件。
  • 您已生成了自定义 SSL 证书和密钥。

流程

  1. 创建新的 YAML 文件,如 custom-ssl-config-bundle-secret.yaml

    $ touch custom-ssl-config-bundle-secret.yaml
  2. 创建 custom-ssl-config-bundle-secret 资源。

    1. 运行以下命令来创建资源:

      $ 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
      1
      其中 <config.yaml& gt; 是您的 base64 解码config.yaml 文件。
      2
      其中 <ssl.cert& gt; 是您的 ssl.cert 文件。
      3
      可选。the -from-file=extra_ca_cert=<ca.cert > 字段允许 Red Hat Quay 识别自定义证书颁发机构(CA)文件。如果您使用使用自定义 CA 的 LDAP、OIDC 或者其它服务,您必须通过 extra_ca_cert 路径添加它们。
      4
      其中 <ssl.key& gt; 是您的 ssl.key 文件。
  3. 可选。您可以输入以下命令来检查 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>

  4. 输入以下命令来创建 configBundleSecret 资源:

    $ oc create -n <namespace> -f custom-ssl-config-bundle-secret.yaml

    输出示例

    secret/custom-ssl-config-bundle-secret created

  5. 输入以下命令更新 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

  6. 输入以下命令将 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

  7. 输入以下命令来确保 QuayRegistry YAML 文件已更新为使用自定义 SSL configBundleSecret 资源,并且您的 和 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)
    
    # ...

后续步骤

法律通告

Copyright © 2025 Red Hat, Inc.
The text of and illustrations in this document are licensed by Red Hat under a Creative Commons Attribution–Share Alike 3.0 Unported license ("CC-BY-SA"). An explanation of CC-BY-SA is available at http://creativecommons.org/licenses/by-sa/3.0/. In accordance with CC-BY-SA, if you distribute this document or an adaptation of it, you must provide the URL for the original version.
Red Hat, as the licensor of this document, waives the right to enforce, and agrees not to assert, Section 4d of CC-BY-SA to the fullest extent permitted by applicable law.
Red Hat, Red Hat Enterprise Linux, the Shadowman logo, the Red Hat logo, JBoss, OpenShift, Fedora, the Infinity logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.
Linux® is the registered trademark of Linus Torvalds in the United States and other countries.
Java® is a registered trademark of Oracle and/or its affiliates.
XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries.
MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries.
Node.js® is an official trademark of Joyent. Red Hat is not formally related to or endorsed by the official Joyent Node.js open source or commercial project.
The OpenStack® Word Mark and OpenStack logo are either registered trademarks/service marks or trademarks/service marks of the OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation's permission. We are not affiliated with, endorsed or sponsored by the OpenStack Foundation, or the OpenStack community.
All other trademarks are the property of their respective owners.
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.