配置 Red Hat Quay

Red Hat Quay 3.7

使用配置选项自定义 Red Hat Quay

Red Hat OpenShift Documentation Team

摘要

配置 Red Hat Quay

第 1 章 Red Hat Quay 配置入门

Red Hat Quay 可以通过独立的独立配置或使用 OpenShift Container Platform Red Hat Quay Operator 部署。

创建、检索、更新和验证 Red Hat Quay 配置的方式因您使用的部署类型而异。但是,对于任一部署类型,核心配置选项都相同。内核配置可通过以下选项之一设置:

对于 Red Hat Quay 的独立部署,您必须提供最低所需的配置参数,然后才能启动 registry。启动 Red Hat Quay registry 的最低要求可以在 检索当前配置部分中找到

如果您使用 Red Hat Quay Operator 在 OpenShift Container Platform 上安装 Red Hat Quay,则不需要提供配置参数,因为 Red Hat Quay Operator 提供了用于部署 registry 的默认信息。

在部署了带有所需配置的 Red Hat Quay 后,您应该从部署中检索并保存完整的配置。完整配置包含重启或升级系统时可能需要的额外生成值。

1.1. Quay 3.7 的配置更新

1.1.1. Red Hat Quay 3.7.7 的新配置字段

字段类型描述

REPO_MIRROR_ROLLBACK

布尔值

当设置为 true 时,存储库会在镜像失败后回滚。

默认false

1.1.2. 新配置字段

Red Hat Quay 3.7 中引入了以下配置字段:

参数描述

FEATURE_QUOTA_MANAGEMENT

现在支持配额管理。通过此功能,用户可以通过建立配置的存储配额限制来报告存储消耗以及包含 registry 增长的能力。有关配额管理的更多信息,请参阅 Red Hat Quay Quota 管理和执行

DEFAULT_SYSTEM_REJECT_QUOTA_BYTES

应用到所有机构和用户的配额大小。有关配额管理的更多信息,请参阅 Red Hat Quay Quota 管理和执行

FEATURE_PROXY_CACHE

现在支持使用 Red Hat Quay 代理远程机构。通过此功能,Red Hat Quay 将充当代理缓存,以绕过上游 registry 的限制。有关配额管理的更多信息,请参阅 Red Hat Quay 作为上游 registry 的代理缓存

1.2. Red Hat Quay 3.6 的配置更新

1.2.1. 新配置字段

Red Hat Quay 3.6 中引入了以下配置字段:

参数描述

FEATURE_EXTENDED_REPOSITORY_NAMES

添加了对嵌套软件仓库和扩展仓库名称的支持。此更改允许使用某些 OpenShift Container Platform 用例所需的存储库名称 /。如需更多信息,请参阅配置嵌套存储库

FEATURE_USER_INITIALIZE

如果设为 true,则可以通过 API /api/v1/user/initialize 来创建第一个 用户 帐户。如需更多信息,请参阅 为自动化配置 Red Hat Quay

ALLOWED_OCI_ARTIFACT_TYPES

Helm、cosign 和 ztsd 压缩方案工件默认内置在 Red Hat Quay 3.6 中。对于不受默认支持的任何其他开放容器项目(OCI)介质类型,您可以将它们添加到 Quay config.yaml 中的 ALLOWED_OCI_ARTIFACT_TYPES 配置中。如需更多信息,请参阅在 Quay 中添加其他 OCI 介质类型

CREATE_PRIVATE_REPO_ON_PUSH

registry 用户现在有一个选项,可根据其安全需要,在其 config.yaml 中将 CREATE_PRIVATE_REPO_ON_PUSH 设置为 TrueFalse

CREATE_NAMESPACE_ON_PUSH

现在,可以将 推送到不存在的组织,以自动创建组织。

1.2.2. 弃用的配置字段

在 Red Hat Quay 3.6 中,以下配置字段已弃用:

参数描述

FEATURE_HELM_OCI_SUPPORT

这个选项已弃用,并将在以后的 Red Hat Quay 版本中删除。在 Red Hat Quay 3.6 中,默认支持 Helm 工件,并包括在 FEATURE_GENERAL_OCI_SUPPORT 属性中。用户不再需要更新其 config.yaml 文件来启用支持。

1.3. 编辑配置文件

要部署独立的 Red Hat Quay 实例,您必须提供最少的配置信息。最小配置的要求可在 Red Hat Quay minimal 配置 中找到。

提供必填字段后,您可以验证您的配置。如果有任何问题,则会突出显示它们。

注意

可以使用配置 API 来验证配置,但这需要以配置模式启动 Quay 容器。如需更多信息,请参阅使用配置工具

要使更改生效,必须重启 registry。

1.4. 在独立部署中配置文件的位置

对于 Red Hat Quay 的独立部署,必须在启动 Red Hat Quay registry 时指定 config.yaml 文件。此文件位于配置卷中。例如,在部署 Red Hat Quay 时,配置文件位于 $QUAY/config/config.yaml

$ sudo podman run -d --rm -p 80:8080 -p 443:8443 \
   --name=quay \
   -v $QUAY/config:/conf/stack:Z \
   -v $QUAY/storage:/datastorage:Z \
   {productrepo}/{quayimage}:{productminv}

1.5. 最小配置

独立部署 Red Hat Quay 需要以下配置选项:

  • 服务器主机名
  • HTTP 或 HTTPS
  • 身份验证类型,如 Database 或轻量级目录访问协议(LDAP)
  • 用于加密数据的机密密钥
  • 镜像存储
  • 元数据的数据库
  • Redis 用于构建日志和用户事件
  • 标签过期选项

1.5.1. 最小配置文件示例

以下示例显示了使用本地存储作为镜像的最小配置文件示例:

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
USER_EVENTS_REDIS:
    host: quay-server.example.com
    port: 6379
    ssl: false
注意

SETUP_COMPLETE 字段表示配置已被验证。在开始 registry 前,您应该使用配置编辑器工具验证您的配置。

1.5.2. 本地存储

只有在部署 registry 进行验证时,才建议使用本地存储作为镜像。

在配置本地存储时,启动 registry 时在命令行中指定存储。以下命令将本地目录( $QUAY/storage )映射到容器中的 datastorage 路径:

$ sudo podman run -d --rm -p 80:8080 -p 443:8443 \
   --name=quay \
   -v $QUAY/config:/conf/stack:Z \
   -v $QUAY/storage:/datastorage:Z \
   {productrepo}/{quayimage}:{productminv}

1.5.3. 云存储

存储配置在镜像存储部分中详细介绍。对于某些用户,比较 Google Cloud Platform 和本地存储配置之间的区别可能会很有用。例如,以下 YAML 会显示 Google Cloud Platform 存储配置:

$QUAY/config/config.yaml

DISTRIBUTED_STORAGE_CONFIG:
    default:
        - GoogleCloudStorage
        - access_key: GOOGQIMFB3ABCDEFGHIJKLMN
          bucket_name: quay_bucket
          secret_key: FhDAYe2HeuAKfvZCAGyOioNaaRABCDEFGHIJKLMN
          storage_path: /datastorage/registry
DISTRIBUTED_STORAGE_DEFAULT_LOCATIONS: []
DISTRIBUTED_STORAGE_PREFERENCE:
    - default

使用云存储启动 registry 时,命令行不需要配置。例如:

$ sudo podman run -d --rm -p 80:8080 -p 443:8443 \
   --name=quay \
   -v $QUAY/config:/conf/stack:Z \
   {productrepo}/{quayimage}:{productminv}

第 2 章 配置字段

本节论述了部署 Red Hat Quay 时必填和可选配置字段。

2.1. 所需的配置字段

配置 Red Hat Quay 所需的字段在以下部分中介绍:

2.2. 自动化选项

以下小节描述了 Red Hat Quay 部署可用的自动化选项:

2.3. 可选配置字段

Red Hat Quay 的可选字段可在以下部分中找到:

2.4. 常规必填字段

下表描述了 Red Hat Quay 部署所需的配置字段:

表 2.1. 常规必填字段

字段类型描述

AUTHENTICATION_TYPE
(必需)

字符串

用于凭证身份验证的身份验证引擎。


of Database,LDAP,JWT,Keystone,OIDC

Default: Database

PREFERRED_URL_SCHEME
(必需)

字符串

访问 Red Hat Quay 时使用的 URL 方案。

值:
以下之一 http, https

Default: http

SERVER_HOSTNAME
(必需)

字符串

可以访问 Red Hat Quay 的 URL,不包括网络协议。

例如:
quay-server.example.com

DATABASE_SECRET_KEY
(必需)

字符串

用于加密数据库中敏感字段的密钥。这个值不能被设置后更改,否则所有查询字段(例如:存储库镜像用户名和密码配置)都无效。

SECRET_KEY
(必需)

字符串

用于加密数据库中及运行时敏感字段的密钥。这个值不能被设置后更改,否则所有查询字段(例如,加密密码凭证)都无效。

SETUP_COMPLETE
(必需)

布尔值

这是软件之前版本超过一批的制造商,目前 必须使用 true 指定一个值。

2.5. 数据库配置

本节论述了可用于 Red Hat Quay 部署的数据库配置字段。

2.5.1. 数据库 URI

使用 Red Hat Quay,使用所需的 DB_URI 字段配置与数据库的连接。

下表描述了 DB_URI 配置字段:

表 2.2. 数据库 URI

字段类型描述

DB_URI
(必需)

字符串

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

DB_URI 字段的示例:

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

2.5.2. 数据库连接参数

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

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

表 2.3. 数据库连接参数

字段类型描述

DB_CONNECTION_ARGS

对象

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

.autorollback

布尔值

是否使用线程本地连接。
应该始终为 true

.threadlocals

布尔值

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

2.5.2.1. PostgreSQL SSL 连接参数

使用 SSL 时,配置取决于您要部署的数据库。以下示例显示了 PostgreSQL SSL 配置:

DB_CONNECTION_ARGS:
  sslmode: verify-ca
  sslrootcert: /path/to/cacert

sslmode 选项决定与服务器协商的安全 SSL TCP/IP 连接中的哪个优先级。有六个模式:

表 2.4. SSL 选项

模式描述

disable

您的配置仅尝试非 SSL 连接。

allow

您的配置首先尝试非 SSL 连接。失败后,尝试 SSL 连接。

首选
(默认)

您的配置首先尝试 SSL 连接。失败后,会尝试非 SSL 连接。

require

您的配置仅尝试 SSL 连接。如果存在 root CA 文件,它将验证证书的方式与是否指定了 verify-ca 相同。

verify-ca

您的配置仅尝试 SSL 连接,并验证服务器证书是否由可信证书颁发机构(CA)发出。

verify-full

仅尝试 SSL 连接,并验证可信 CA 发布服务器证书,并且请求的服务器主机名与证书中的匹配。

如需有关 PostgreSQL 有效参数的更多信息,请参阅 Database Connection Control Functions

2.5.2.2. MySQL SSL 连接参数

以下示例显示了 MySQL SSL 配置示例:

DB_CONNECTION_ARGS:
  ssl:
    ca: /path/to/cacert

有关 MySQL 的有效连接参数的信息,请访问 使用类似URI的字符串或键-值对连接到服务器

2.6. 镜像存储

本节详细介绍了 Red Hat Quay 可用的镜像存储功能和配置字段。

2.6.1. 镜像存储功能

下表描述了 Red Hat Quay 的镜像存储功能:

表 2.5. 存储配置特性

字段类型描述

FEATURE_REPO_MIRROR

布尔值

如果设为 true,请启用存储库镜像。

默认: false

FEATURE_PROXY_STORAGE

布尔值

是否通过 NGINX 代理存储中的所有直接下载 URL。

默认: false

FEATURE_STORAGE_REPLICATION

布尔值

是否在存储引擎之间自动复制。

默认: false

2.6.2. 镜像存储配置字段

下表描述了 Red Hat Quay 的镜像存储配置字段:

表 2.6. 存储配置字段

字段类型描述

DISTRIBUTED_STORAGE_CONFIG
(必需)

对象

在 Red Hat Quay 中使用的存储引擎的配置。每个键代表存储引擎的唯一标识符。该值由一个元组(键、值)组成一个对象来描述存储引擎参数。

默认: []

DISTRIBUTED_STORAGE_DEFAULT_LOCATIONS
(必需)

字符串数组

默认情况下,存储引擎(根据 ID 在 DISTRIBUTED_STORAGE_CONFIG中)的列表,这些镜像应完全复制到所有其他存储引擎。

DISTRIBUTED_STORAGE_PREFERENCE
(必需)

字符串数组

首选存储引擎(根据 ID 在 DISTRIBUTED_STORAGE_CONFIG中)首选引擎表示首先检查拉取,并且镜像被推送(push)到其中。

默认: false

MAXIMUM_LAYER_SIZE

字符串

镜像层允许的最大值。

Pattern:^[0-9]+(G|M)$

示例:100G

Default: 20G

2.6.3. 本地存储

以下 YAML 显示了使用本地存储的示例配置:

DISTRIBUTED_STORAGE_CONFIG:
  default:
    - LocalStorage
    - storage_path: /datastorage/registry
DISTRIBUTED_STORAGE_DEFAULT_LOCATIONS: []
DISTRIBUTED_STORAGE_PREFERENCE:
    - default

2.6.4. OCS/NooBaa

以下 YAML 演示了使用 Open Container Storage/NooBaa 实例配置示例:

DISTRIBUTED_STORAGE_CONFIG:
  rhocsStorage:
    - RHOCSStorage
    - access_key: access_key_here
      secret_key: secret_key_here
      bucket_name: quay-datastore-9b2108a3-29f5-43f2-a9d5-2872174f9a56
      hostname: s3.openshift-storage.svc.cluster.local
      is_secure: 'true'
      port: '443'
      storage_path: /datastorage/registry

2.6.5. Ceph / RadosGW Storage / Hitachi HCP

以下 YAML 显示了使用 Ceph/RadosGW 和 Hitachi HCP 存储的示例配置:

DISTRIBUTED_STORAGE_CONFIG:
  radosGWStorage:
    - RadosGWStorage
    - access_key: access_key_here
      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:
    - default

2.6.6. AWS S3 存储

以下 YAML 显示了使用 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
      storage_path: /datastorage/registry
DISTRIBUTED_STORAGE_DEFAULT_LOCATIONS: []
DISTRIBUTED_STORAGE_PREFERENCE:
    - s3Storage

2.6.7. Google Cloud Storage

以下 YAML 显示了使用 Google Cloud Storage 的示例配置:

DISTRIBUTED_STORAGE_CONFIG:
    googleCloudStorage:
        - GoogleCloudStorage
        - access_key: GOOGQIMFB3ABCDEFGHIJKLMN
          bucket_name: quay-bucket
          secret_key: FhDAYe2HeuAKfvZCAGyOioNaaRABCDEFGHIJKLMN
          storage_path: /datastorage/registry
DISTRIBUTED_STORAGE_DEFAULT_LOCATIONS: []
DISTRIBUTED_STORAGE_PREFERENCE:
    - googleCloudStorage

2.6.8. Azure Storage

以下 YAML 演示了使用 Azure Storage 的示例配置:

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
Azure 存储的 endpoint_url 参数是可选的,可用于 Microsoft Azure Government(MAG)端点。如果留空,则 endpoint_url 将连接到普通的 Azure 区域。

从 Red Hat Quay 3.7 开始,您必须使用 MAG Blob 服务的主端点。使用 MAG Blob 服务的 Secondary 端点将导致以下错误: AuthenticationErrorDetail:Can not found the claimed account when attempt to GetProperties for the account whusc8-secondary.

2.6.9. Swift 存储

以下 YAML 显示了使用 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: 1
      ca_cert_path: /conf/stack/swift.cert"
      storage_path: /datastorage/registry
DISTRIBUTED_STORAGE_DEFAULT_LOCATIONS: []
DISTRIBUTED_STORAGE_PREFERENCE:
    - swiftStorage

2.7. Redis 配置字段

本节详细介绍了 Redis 部署可用的配置字段。

2.7.1. 构建日志

以下构建日志配置字段可用于 Redis 部署:

表 2.7. 构建日志配置

字段类型描述

BUILDLOGS_REDIS
(必需)

对象

构建日志缓存的 redis 连接详情。

.主机
(必需)

字符串

可以访问 Redis 的主机名。
示例:
quay-server.example.com

.port
(必需)

Number

访问 Redis 的端口。
示例:
6379

.password

字符串

可以访问 Redis 的端口。
示例:
strongpassword

.port
(必需)

Number

访问 Redis 的端口。
示例:
6379

ssl

布尔值

是否启用 Redis 和 Quay 之间的 TLS 通信。默认为false。

2.7.2. 用户事件

以下用户事件字段可用于 Redis 部署:

表 2.8. 用户事件配置

字段类型描述

USER_EVENTS_REDIS
(必需)

对象

用户事件处理的 redis 连接详情。

.主机
(必需)

字符串

可以访问 Redis 的主机名。
示例:
quay-server.example.com

.port
(必需)

Number

访问 Redis 的端口。
示例:
6379

.password

字符串

可以访问 Redis 的端口。
示例:
strongpassword

ssl

布尔值

是否启用 Redis 和 Quay 之间的 TLS 通信。默认为false。

2.7.3. Redis 配置示例

以下 YAML 显示了使用 Redis 的配置示例:

BUILDLOGS_REDIS:
    host: quay-server.example.com
    password: strongpassword
    port: 6379
    ssl: true

USER_EVENTS_REDIS:
    host: quay-server.example.com
    password: strongpassword
    port: 6379
    ssl: true
注意

如果您的部署对 Redis 使用 Azure Cache,并且 ssl 设为 true,则端口默认为 6380

2.8. ModelCache 配置选项

Red Hat Quay 中提供了以下选项来配置 ModelCache。

2.8.1. memcache 配置选项

memcache 是默认的 ModelCache 配置选项。使用 Memcache 时,不需要额外的配置。

2.8.2. 单个 Redis 配置选项

以下配置适用于带有可选只读副本的单个 Redis 实例:

    DATA_MODEL_CACHE_CONFIG:
      engine: redis
      redis_config:
        primary:
            host: <host>
            port: <port>
            password: <password if ssl is true>
           ssl: <true | false >
        replica:
            host: <host>
            port: <port>
            password: <password if ssl is true>
           ssl: <true | false >

2.8.3. 集群的 Redis 配置选项

对集群的 Redis 实例使用以下配置:

    DATA_MODEL_CACHE_CONFIG:
      engine: rediscluster
      redis_config:
        startup_nodes:
          - host: <cluster-host>
            port: <port>
        password: <password if ssl: true>
        read_from_replicas: <true|false>
        skip_full_coverage_check: <true | false>
        ssl: <true | false >

2.9. 标签过期配置字段

Red Hat Quay 提供了以下标签过期配置字段:

表 2.9. 标签过期配置字段

字段类型描述

FEATURE_GARBAGE_COLLECTION

布尔值

是否启用存储库垃圾回收。

Default: True

TAG_EXPIRATION_OPTIONS
(必需)

字符串数组

如果启用,用户可以选择其命名空间中的标签过期。

Pattern:
^[0-9]+(w|m|d|h|s)$

DEFAULT_TAG_EXPIRATION
(必需)

字符串

默认可配置标签过期时间。

Pattern:
^[0-9]+(w|m|d|h|s)$
Default: 2w

FEATURE_CHANGE_TAG_EXPIRATION

布尔值

用户和机构是否允许更改其命名空间中标签的标签过期。

Default: True

2.9.1. 标签过期配置示例

以下 YAML 显示了标签过期配置示例:

DEFAULT_TAG_EXPIRATION: 2w
TAG_EXPIRATION_OPTIONS:
    - 0s
    - 1d
    - 1w
    - 2w
    - 4w

2.10. 预配置 Red Hat Quay 以实现自动化

Red Hat Quay 有几个支持自动化的配置选项。这些选项可以在部署前设置,以便尽可能地与用户界面交互。

2.10.1. 允许 API 创建第一个用户

要使用 /api/v1/user/initialize API 创建第一个用户,将 FEATURE_USER_INITIALIZE 参数设置为 true。与需要由现有机构中 OAuth 应用生成的 OAuth 令牌的所有其他 registry API 调用不同,API 端点不需要身份验证。

部署 Red Hat Quay 后,您可以使用 API 来创建用户,如 quayadmin,假设还没有创建其他用户。如需更多信息,请参阅使用 API 创建第一个用户

2.10.2. 启用常规 API 访问

将配置选项 BROWSER_API_CALLS_XHR_ONLY 设置为 false,以允许常规访问 Red Hat Quay registry API。

2.10.3. 添加超级用户

部署 Red Hat Quay 后,您可以创建用户。我们建议第一个用户被授予具有完整权限的管理员特权。可以使用 SUPER_USER 配置对象提前配置完全权限。例如:

...
SERVER_HOSTNAME: quay-server.example.com
SETUP_COMPLETE: true
SUPER_USERS:
  - quayadmin
...

2.10.4. 限制用户创建

配置了超级用户后,您可以限制创建新用户到超级用户组的能力。将 FEATURE_USER_CREATION 设置为 false 以限制用户创建。例如:

...
FEATURE_USER_INITIALIZE: true
BROWSER_API_CALLS_XHR_ONLY: false
SUPER_USERS:
- quayadmin
FEATURE_USER_CREATION: false
...

2.10.5. 启用新功能

要使用新的 Red Hat Quay 3.7 功能,请启用一些或所有以下功能:

...
FEATURE_QUOTA_MANAGEMENT: true
FEATURE_BUILD_SUPPORT: true
FEATURE_PROXY_CACHE: true
FEATURE_STORAGE_REPLICATION: true
DEFAULT_SYSTEM_REJECT_QUOTA_BYTES: 102400000
...

2.10.6. 推荐的自动化配置

建议对自动化使用以下 config.yaml 参数:

...
FEATURE_USER_INITIALIZE: true
BROWSER_API_CALLS_XHR_ONLY: false
SUPER_USERS:
- quayadmin
FEATURE_USER_CREATION: false
...

2.10.7. 使用初始配置部署 Red Hat Quay Operator

使用以下步骤,使用初始配置在 OpenShift Container Platform 上部署 Red Hat Quay。

先决条件

  • 已安装 oc CLI。

流程

  1. 使用配置文件创建 secret:

    $ oc create secret generic -n quay-enterprise --from-file config.yaml=./config.yaml init-config-bundle-secret
  2. 创建 quayregistry.yaml 文件。识别非受管组件并引用创建的 secret,例如:

    apiVersion: quay.redhat.com/v1
    kind: QuayRegistry
    metadata:
      name: example-registry
      namespace: quay-enterprise
    spec:
      configBundleSecret: init-config-bundle-secret
  3. 部署 Red Hat Quay registry:

    $ oc create -n quay-enterprise -f quayregistry.yaml

2.10.8. 使用 API 部署 Red Hat Quay

本节介绍了使用 API 部署 Red Hat Quay。

先决条件

  • 配置选项 FEATURE_USER_INITIALIZE 必须设置为 true
  • 数据库中没有用户。

如需有关预配置 Red Hat Quay 部署的更多信息,请参阅 预配置 Red Hat Quay 的自动化部分

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

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

注意

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

  • 使用 status.registryEndpoint URL,调用 /api/v1/user/initialize API,通过输入以下命令传递用户名、密码和电子邮件地址:

    $  curl -X POST -k  https://example-registry-quay-quay-enterprise.apps.docs.quayteam.org/api/v1/user/initialize --header 'Content-Type: application/json' --data '{ "username": "quayadmin", "password":"quaypass123", "email": "quayadmin@example.com", "access_token": true}'

    如果成功,该命令会返回一个带有用户名、电子邮件和加密密码的对象。例如:

    {"access_token":"6B4QTRSTSD1HMIG915VPX7BMEZBVB9GPNY2FC2ED", "email":"quayadmin@example.com","encrypted_password":"1nZMLH57RIE5UGdL/yYpDOHLqiNCgimb6W9kfF8MjZ1xrfDpRyRs9NUnUuNuAitW","username":"quayadmin"}

    如果用户已存在于数据库中,则返回错误:

    {"message":"Cannot initialize user in a non-empty database"}

    如果您的密码至少为八个字符或者包含空格,则会返回一个错误:

    {"message":"Failed to initialize user: Invalid password, password must be at least 8 characters and contain no whitespace."}

2.10.8.2. 使用 OAuth 令牌

在调用 API 后,您可以通过指定返回的 OAuth 代码来调用 Red Hat Quay API 的剩余部分。

先决条件

  • 您已调用 /api/v1/user/initialize API,并通过用户名、密码和电子邮件地址传递。

流程

  • 输入以下命令来获取当前用户列表:

    $ curl -X GET -k -H "Authorization: Bearer 6B4QTRSTSD1HMIG915VPX7BMEZBVB9GPNY2FC2ED" https://example-registry-quay-quay-enterprise.apps.docs.quayteam.org/api/v1/superuser/users/

    输出示例:

    {
        "users": [
            {
                "kind": "user",
                "name": "quayadmin",
                "username": "quayadmin",
                "email": "quayadmin@example.com",
                "verified": true,
                "avatar": {
                    "name": "quayadmin",
                    "hash": "3e82e9cbf62d25dec0ed1b4c66ca7c5d47ab9f1f271958298dea856fb26adc4c",
                    "color": "#e7ba52",
                    "kind": "user"
                },
                "super_user": true,
                "enabled": true
            }
        ]
    }

    在本例中,quayadmin 用户的详细信息返回,因为它是目前创建的唯一用户。

2.10.8.3. 使用 API 创建机构

以下过程详细介绍了如何使用 API 创建 Red Hat Quay 组织。

先决条件

  • 您已调用 /api/v1/user/initialize API,并通过用户名、密码和电子邮件地址传递。
  • 您可以通过指定返回的 OAuth 代码来调出 Red Hat Quay API 的其他部分。

流程

  1. 要创建机构,使用 POST 调用 api/v1/organization/ 端点:

    $ curl -X POST -k --header 'Content-Type: application/json' -H "Authorization: Bearer 6B4QTRSTSD1HMIG915VPX7BMEZBVB9GPNY2FC2ED" https://example-registry-quay-quay-enterprise.apps.docs.quayteam.org/api/v1/organization/ --data '{"name": "testorg", "email": "testorg@example.com"}'

    输出示例:

    "Created"
  2. 您可以输入以下命令来检索您创建的机构详情:

    $ curl -X GET -k --header 'Content-Type: application/json' -H "Authorization: Bearer 6B4QTRSTSD1HMIG915VPX7BMEZBVB9GPNY2FC2ED" https://min-registry-quay-quay-enterprise.apps.docs.quayteam.org/api/v1/organization/testorg

    输出示例:

    {
        "name": "testorg",
        "email": "testorg@example.com",
        "avatar": {
            "name": "testorg",
            "hash": "5f113632ad532fc78215c9258a4fb60606d1fa386c91b141116a1317bf9c53c8",
            "color": "#a55194",
            "kind": "user"
        },
        "is_admin": true,
        "is_member": true,
        "teams": {
            "owners": {
                "name": "owners",
                "description": "",
                "role": "admin",
                "avatar": {
                    "name": "owners",
                    "hash": "6f0e3a8c0eb46e8834b43b03374ece43a030621d92a7437beb48f871e90f8d90",
                    "color": "#c7c7c7",
                    "kind": "team"
                },
                "can_view": true,
                "repo_count": 0,
                "member_count": 1,
                "is_synced": false
            }
        },
        "ordered_teams": [
            "owners"
        ],
        "invoice_email": false,
        "invoice_email_address": null,
        "tag_expiration_s": 1209600,
        "is_free_account": true
    }

2.11. 基本配置字段

表 2.10. 基本配置

字段类型描述

REGISTRY_TITLE

字符串

如果指定,registry 的长期标题。

Default:
Quay Enterprise

REGISTRY_TITLE_SHORT

字符串

如果指定,registry 的简短标题。

Default:
Quay Enterprise

品牌

对象

Red Hat Quay UI 中的徽标和 URL 的自定义品牌。

.logo
(必需)

字符串

主徽标镜像 URL。

示例:
/static/img/quay-horizontal-color.svg

.footer_img

字符串

UI footer 的徽标。

示例:
/static/img/puppetlabs.svg

.footer_url

字符串

footer 镜像的链接。

示例:
https://redhat.com

CONTACT_INFO

String 数组

如果指定,在联系页面中要显示的联系信息。如果只指定了单一联系人信息,联系页脚将直接链接。

[0]

字符串

添加发送电子邮件的链接。

Pattern:
^mailto: (.)+$
Example:
mailto:support@quay.io

[1]

字符串

添加访问 IRC chat room 的链接。

Pattern:
^irc://(.)+$
Example:
irc://chat.freenode.net:6665/quay

[2]

字符串

添加一个链接来调用电话号码。+
Pattern:
^tel: (.)+$
Example:
tel:+1-888-930-3475

[3]

字符串

添加指向定义的 URL 的链接。

Pattern:
^http (s)?://(.)+$
Example:
https://twitter.com/quayio

2.12. SSL 配置字段

表 2.11. SSL 配置

字段类型描述

PREFERRED_URL_SCHEME

字符串

httphttps 中的一个。请注意,用户只有在客户端到 Quay 的通信路径中没有 TLS 加密时,用户只能将其 PREFERRED_URL_SCHEME 设置为 http

在使用 TLS 终止负载均衡器、反向代理(如 Nginx)或直接使用带有自定义 SSL 证书的 Quay 时,必须将 PREFERRED _URL_SCHEME' 设置为 'https。在大多数情况下,PREFERRED_URL_SCHEME 应该是 https
默认: http

SERVER_HOSTNAME
(必需)

字符串

可以访问 Red Hat Quay 的 URL,不包括网络协议。

例如:
quay-server.example.com

SSL_CIPHERS

String 数组

如果指定,nginx 定义要启用和禁用的 SSL 密码列表

示例:
[CAMELLIA,!3DES]

SSL_PROTOCOLS

String 数组

如果指定了,nginx 被配置为启用列表中定义的 SSL 协议列表。从列表中删除 SSL 协议会禁用 Red Hat Quay 启动过程中的协议。

Example:
['TLSv1','TLSv1.1','TLSv1.2', 'TLSv1.3]'

SESSION_COOKIE_SECURE

布尔值

是否应在会话 Cookie 上设置 secure 属性

Default:
False

Recommendation:
Set to True

2.12.1. 配置 SSL

  1. 将证书文件和主密钥文件复制到您的配置目录中,确保它们分别命名为 ssl.certssl.key

    $ cp ~/ssl.cert $QUAY/config
    $ cp ~/ssl.key $QUAY/config
    $ cd $QUAY/config
  2. 编辑 config.yaml 文件,并指定希望 Quay 处理 TLS:

    config.yaml

    ...
    SERVER_HOSTNAME: quay-server.example.com
    ...
    PREFERRED_URL_SCHEME: https
    ...

  3. 停止 Quay 容器并重启 registry

2.13. 在 Red Hat Quay Container 中添加 TLS 证书

要在 Red Hat Quay 中添加自定义 TLS 证书,请在 Red Hat Quay 配置目录下创建名为 extra_ca_certs/ 的新目录。将任何特定于站点的 TLS 证书复制到此新目录。

2.13.1. 在 Red Hat Quay 中添加 TLS 证书

  1. 查看添加到容器中的证书

    $ cat storage.crt
    -----BEGIN CERTIFICATE-----
    MIIDTTCCAjWgAwIBAgIJAMVr9ngjJhzbMA0GCSqGSIb3DQEBCwUAMD0xCzAJBgNV
    [...]
    -----END CERTIFICATE-----
  2. 创建 certs 目录并复制证书

    $ mkdir -p quay/config/extra_ca_certs
    $ cp storage.crt quay/config/extra_ca_certs/
    $ tree quay/config/
    ├── config.yaml
    ├── extra_ca_certs
    │   ├── storage.crt
  3. 使用 podman ps 获取 Quay 容器的 CONTAINER ID

    $ sudo podman ps
    CONTAINER ID        IMAGE                                COMMAND                  CREATED             STATUS              PORTS
    5a3e82c4a75f        <registry>/<repo>/quay:v3.7.10 "/sbin/my_init"          24 hours ago        Up 18 hours         0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp, 443/tcp   grave_keller
  4. 使用该 ID 重启容器:

    $ sudo podman restart 5a3e82c4a75f
  5. 检查复制到容器命名空间中的证书:

    $ sudo podman exec -it 5a3e82c4a75f cat /etc/ssl/certs/storage.pem
    -----BEGIN CERTIFICATE-----
    MIIDTTCCAjWgAwIBAgIJAMVr9ngjJhzbMA0GCSqGSIb3DQEBCwUAMD0xCzAJBgNV

2.14. LDAP 配置字段

表 2.12. LDAP 配置

字段类型描述

AUTHENTICATION_TYPE
(必需)

字符串

必须设为 LDAP

FEATURE_TEAM_SYNCING

布尔值

是否允许团队成员资格从身份验证引擎(LDAP 或 Keystone)中的后备组同步

默认: true

FEATURE_NONSUPERUSER_TEAM_SYNCING_SETUP

布尔值

如果启用,非超级用户可以使用 LDAP

Default: false在团队上设置同步

LDAP_ADMIN_DN

字符串

用于 LDAP 身份验证的管理员 DN。

LDAP_ADMIN_PASSWD

字符串

LDAP 身份验证的管理员密码。

LDAP_ALLOW_INSECURE_FALLBACK

布尔值

是否允许 SSL insecure fallback 进行 LDAP 身份验证。

LDAP_BASE_DN

String 数组

LDAP 身份验证的基本 DN。

LDAP_EMAIL_ATTR

字符串

LDAP 身份验证的电子邮件属性。

LDAP_UID_ATTR

字符串

LDAP 身份验证的 uid 属性。

LDAP_URI

字符串

LDAP URI。

LDAP_USER_FILTER

字符串

用于 LDAP 身份验证的用户过滤器。

LDAP_USER_RDN

String 数组

用于 LDAP 身份验证的用户 RDN。

TEAM_RESYNC_STALE_TIME

字符串

如果为团队启用了团队同步,如果需要,请检查成员资格和重新同步的频率

Pattern:
^[0-9]+(w|m|d|h|s)$
示例:
2h
Default:
30m

2.14.1. LDAP 配置示例

$QUAY/config/config.yaml

AUTHENTICATION_TYPE: LDAP
...
LDAP_ADMIN_DN: uid=testuser,ou=Users,o=orgid,dc=jumpexamplecloud,dc=com
LDAP_ADMIN_PASSWD: samplepassword
LDAP_ALLOW_INSECURE_FALLBACK: false
LDAP_BASE_DN:
    - o=orgid
    - dc=example
    - dc=com
LDAP_EMAIL_ATTR: mail
LDAP_UID_ATTR: uid
LDAP_URI: ldap://ldap.example.com:389
LDAP_USER_RDN:
    - ou=Users

2.15. 镜像配置字段

表 2.13. 镜像配置

字段类型描述

FEATURE_REPO_MIRROR

布尔值

启用或禁用存储库镜像

默认: false

REPO_MIRROR_INTERVAL

Number

检查存储库镜像候选者之间的秒数

默认:30

REPO_MIRROR_SERVER_HOSTNAME

字符串

替换 SERVER_HOSTNAME 作为镜像的目的地。

Default: None

Example:
openshift-quay-service

REPO_MIRROR_TLS_VERIFY

布尔值

需要 HTTPS 并在镜像过程中验证 Quay registry 的证书。

默认: false

REPO_MIRROR_ROLLBACK

布尔值

当设置为 true 时,存储库会在镜像失败后回滚。

默认false

2.16. 安全扫描程序配置字段

表 2.14. 安全扫描程序配置

字段类型描述

FEATURE_SECURITY_SCANNER

布尔值

启用或禁用安全扫描程序

默认: false

FEATURE_SECURITY_NOTIFICATIONS

布尔值

如果启用了安全扫描程序,请打开或关闭安全通知

默认: false

SECURITY_SCANNER_V4_REINDEX_THRESHOLD

字符串

此参数用于决定在重新索引之前具有之前失败或自上索引以来已更改状态的最短时间(以秒为单位)。数据通过 manifestsecuritystatus 表中的 last_indexed datetime 来计算。这个参数用于避免在每次索引运行时都尝试重新索引每个失败清单。重新索引的默认时间为 300 秒。

SECURITY_SCANNER_V4_ENDPOINT

字符串

V4 安全扫描程序的端点

Pattern:
^http (s)?://(.)+$

Example:
http://192.168.99.101:6060

SECURITY_SCANNER_V4_PSK

字符串

Clair 所生成的预共享密钥(PSK)

SECURITY_SCANNER_INDEXING_INTERVAL

Number

安全扫描程序中索引间隔之间的秒数

默认:30

SECURITY_SCANNER_ENDPOINT

字符串

V2 安全扫描程序的端点

Pattern:
^http (s)?://(.)+$

示例:
http://192.168.99.100:6060

SECURITY_SCANNER_INDEXING_INTERVAL

字符串

这个参数用于决定安全扫描程序索引间隔间隔的秒数。当索引被触发时,Red Hat Quay 将查询其数据库以获取由 Clair 索引的清单。这包括还没有索引的、之前索引的清单和之前失败的清单。

以下是 re-indexing 的特殊情况:

当 Clair v4 索引清单时,结果应该是确定的。例如,同一清单应该生成相同的索引报告。这在扫描程序被改变前为 true,因为使用不同的扫描程序会生成与报告中返回的特定清单相关的信息。因此,Clair v4 会公开索引引擎(/indexer/api/v1/index_state)的状态表示,以确定扫描程序配置是否已改变。

在解析到 Quay 数据库时,Red Hat Quay 将这个索引状态保存到索引报告中。如果自清单之前已扫描以来此状态已更改,Quay 将会在定期索引过程中尝试重新索引该清单。

默认情况下,此参数设为 30 秒。如果用户希望更频繁地运行索引过程,用户可能会缩短。例如,如果他们不希望在推送新标签后等待 30 秒时间查看 UI 的安全扫描结果。如果用户希望对 Clair 的更多控制权以及 Quay 数据库执行的数据库操作的模式,用户也可以更改 参数。

2.17. OCI 和 Helm 配置字段

现在,在 FEATURE_GENERAL_OCI_SUPPORT 属性中支持 Helm 的支持。如果需要显式启用该功能,例如之前禁用了该功能,或者已经从未默认启用的版本升级,则需要在 Quay 配置中添加两个属性来启用 OCI 工件的使用:

FEATURE_GENERAL_OCI_SUPPORT: true
FEATURE_HELM_OCI_SUPPORT: true

表 2.15. OCI 和 Helm 配置字段

字段类型描述

FEATURE_GENERAL_OCI_SUPPORT

布尔值

启用对 OCI 工件的支持

默认: True

FEATURE_HELM_OCI_SUPPORT

布尔值

启用对 Helm 工件的支持

默认: True

重要

从 Red Hat Quay 3.6 开始,FEATURE_HELM_OCI_SUPPORT 已被弃用,并将在以后的 Red Hat Quay 版本中删除。在 Red Hat Quay 3.6 中,默认支持 Helm 工件,并包括在 FEATURE_GENERAL_OCI_SUPPORT 属性中。用户不再需要更新其 config.yaml 文件来启用支持。

2.18. 操作日志配置字段

2.18.1. 操作日志存储配置

表 2.16. 操作日志存储配置

字段类型描述

FEATURE_LOG_EXPORT

布尔值

是否允许导出操作日志

默认: True

LOGS_MODEL

字符串

启用或禁用安全扫描程序

值: database ,transition_reads_both_writes_es,elasticsearch
之一,默认值: database

LOGS_MODEL_CONFIG

对象

操作日志的日志模型配置

  • LOGS_MODEL_CONFIG [object]: Logs model config for action logs

    • elasticsearch_config [object]:Elasticsearch 集群配置

      • access_key [string]:Elasticsearch 用户(或 AWS ES 的 IAM 键)

        • 示例some_string
      • host [string]: Elasticsearch 集群端点

        • 示例host.elasticsearch.example
      • index_prefix [string]:Elasticsearch 的索引前缀

        • 示例logentry_
      • index_settings [object]:Elasticsearch 的索引设置
      • use_ssl [boolean]:对 Elasticsearch 使用 ssl。默认为 True

        • 示例True
      • SECRET_KEY [string]:Elasticsearch 密码(或 AWS ES 的 IAM secret)

        • 示例some_secret_string
      • aws_region [string]: Amazon web service region

        • 示例us-east-1
      • 端口 [number]:Elasticsearch 集群端点端口

        • 示例1234
    • kinesis_stream_config [object]: AWS Kinesis Stream configuration

      • aws_secret_key [string]: AWS secret key

        • 示例some_secret_key
      • stream_name [string]: Kinesis stream to send action logs to

        • 示例logentry-kinesis-stream
      • aws_access_key [string]: AWS access key

        • 示例some_access_key
      • retries [数字]: 在单个请求中尝试次数

        • 示例5
      • read_timeout [number]:从连接读取时超时前的秒数

        • 示例5
      • max_pool_connections [number]:要保留在连接池中的最多连接数

        • 示例 :10
      • aws_region [string]:AWS 区域

        • 示例us-east-1
      • connect_timeout [number]:尝试连接超时前的秒数

        • 示例5
    • producer [string]:日志记录到 Elasticsearch 时的 Logs producer

      • enum: kafka, elasticsearch, kinesis_stream
      • 示例kafka
    • kafka_config [object]: Kafka 集群配置

      • 主题 [string]: Kafka 主题,以发布日志条目

        • 示例logentry
      • bootstrap_servers [array]: Kafka 代理列表到引导客户端
      • max_block_seconds [number]:在 send() 期间要阻断的最大秒数,因为缓冲区已满或元数据不可用

        • 示例 :10

2.18.2. 操作日志轮转和归档配置

表 2.17. 操作日志轮转和归档配置

字段类型描述

FEATURE_ACTION_LOG_ROTATION

布尔值

启用日志轮转和归档会将 30 天以上的所有日志移到 storage

Default: false

ACTION_LOG_ARCHIVE_LOCATION

字符串

如果启用了操作日志归档,则存储引擎放置存档数据

示例: s3_us_east

ACTION_LOG_ARCHIVE_PATH

字符串

如果启用了操作日志归档,则存储中的路径放置存档数据

示例: archive /actionlogs

ACTION_LOG_ROTATION_THRESHOLD

字符串

轮转日志前的时间间隔

示例: 30d

2.19. 构建日志配置字段

表 2.18. 构建日志配置字段

字段类型描述

FEATURE_READER_BUILD_LOGS

布尔值

如果设置为 true,则构建日志可由对存储库具有读取访问权限的用户读取,而不仅仅是写入权限或 admin 访问权限。

Default: False

LOG_ARCHIVE_LOCATION

字符串

DISTRIBUTED_STORAGE_CONFIG 中定义的存储位置,放置存档的构建日志

示例: s3_us_east

LOG_ARCHIVE_PATH

字符串

配置的存储引擎下的路径,将存档的构建日志放在 JSON 格式

示例: archive /buildlogs

2.20. Dockerfile 构建触发器字段

表 2.19. Dockerfile 构建支持

字段类型描述

FEATURE_BUILD_SUPPORT

布尔值

是否支持 Dockerfile 构建。

默认 : False

SUCCESSIVE_TRIGGER_FAILURE_DISABLE_THRESHOLD

Number

如果没有 None,则构建触发器自动禁用前可能出现的连续失败数量

默认:100

SUCCESSIVE_TRIGGER_INTERNAL_ERROR_DISABLE_THRESHOLD

Number

如果没有 None,则构建触发器自动禁用前可能出现的连续内部错误数量

默认: 5

2.20.1. GitHub 构建触发器

表 2.20. GitHub 构建触发器

字段类型描述

FEATURE_GITHUB_BUILD

布尔值

是否要支持 GitHub 构建触发器

默认: False

 

 

 

GITHUB_TRIGGER_CONFIG

对象

使用 GitHub(企业)进行构建触发器的配置

   .GITHUB_ENDPOINT
(必需)

字符串

GitHub (Enterprise)

示例: https://github.com/

   .API_ENDPOINT

字符串

要使用的 GitHub(Enterprise)API 的端点。必须覆盖 github.com

示例https://api.github.com/

   .CLIENT_ID
(必需)

字符串

此 Red Hat Quay 实例注册的客户端 ID;这不能与 GITHUB_LOGIN_CONFIG 共享。

   .CLIENT_SECRET
(必需)

字符串

此 Red Hat Quay 实例注册的客户端 secret。

2.20.2. Bitbucket 构建触发器

表 2.21. Bitbucket 构建触发器

字段类型描述

FEATURE_BITBUCKET_BUILD

布尔值

是否要支持 Bitbucket 构建触发器

默认: False

 

 

 

BITBUCKET_TRIGGER_CONFIG

对象

使用 BitBucket 配置构建触发器

   .CONSUMER_KEY
(必需)

字符串

此 Quay 实例注册的使用者密钥(客户端 ID)

   .CONSUMER_SECRET
(必需)

字符串

此 Quay 实例注册的使用者机密(客户端 secret)

2.20.3. GitLab 构建触发器

表 2.22. GitLab 构建触发器

字段类型描述

FEATURE_GITLAB_BUILD

布尔值

是否要支持 GitLab 构建触发器

默认: False

 

 

 

GITLAB_TRIGGER_CONFIG

对象

使用 Gitlab 进行构建触发器的配置

   .GITLAB_ENDPOINT
(必需)

字符串

运行 Gitlab(Enterprise)的端点

   .CLIENT_ID
(必需)

字符串

此 Quay 实例的注册的客户端 ID

   .CLIENT_SECRET
(必需)

字符串

此 Quay 实例注册的客户端 secret

2.21. OAuth 配置字段

表 2.23. OAuth 字段

字段类型描述

DIRECT_OAUTH_CLIENTID_WHITELIST

String 数组

允许在没有用户批准的情况下执行直接 OAuth 批准的 Quay 管理应用程序 的客户端 ID 列表。

2.21.1. GitHub OAuth 配置字段

表 2.24. GitHub OAuth 字段

字段类型描述

FEATURE_GITHUB_LOGIN

布尔值

是否支持 GitHub 登录

**默认:False

GITHUB_LOGIN_CONFIG

对象

将 GitHub(Enterprise)用作外部登录提供程序的配置。

   .ALLOWED_ORGANIZATIONS

String 数组

将 GitHub(Enterprise)机构的名称列入白名单以与 ORG_RESTRICT 选项搭配使用。

   .API_ENDPOINT

字符串

要使用的 GitHub(Enterprise)API 的端点。必须覆盖 github.com

示例: https://api.github.com/

   .CLIENT_ID
(必需)

字符串

此 Red Hat Quay 实例的注册客户端 ID;无法通过 GITHUB_TRIGGER_CONFIG

示例: 0e8dbe15c4c7630b6780

   .CLIENT_SECRET
(必需)

字符串

此 Red Hat Quay 实例注册的客户端 secret

示例: e4a58ddd3d7408b7aec109e85564a0d153d3e846

   .GITHUB_ENDPOINT
(必需)

字符串

GitHub (Enterprise)

示例:https://github.com/

   .ORG_RESTRICT

布尔值

如果为 true,则只有机构白名单中的用户才可以使用此供应商登录。

2.21.2. Google OAuth 配置字段

表 2.25. Google OAuth 字段

字段类型描述

FEATURE_GOOGLE_LOGIN

布尔值

是否支持 Google 登录

**默认:False

GOOGLE_LOGIN_CONFIG

对象

使用 Google 进行外部身份验证的配置

   .CLIENT_ID
(必需)

字符串

此 Red Hat Quay 实例注册的客户端 ID

示例: 0e8dbe15c4c7630b6780

   .CLIENT_SECRET
(必需)

字符串

此 Red Hat Quay 实例注册的客户端 secret

示例: e4a58ddd3d7408b7aec109e85564a0d153d3e846

2.22. 嵌套存储库配置字段

在 Red Hat Quay 3.6 中,在 FEATURE_EXTENDED_REPOSITORY_NAMES 属性下添加了对嵌套存储库路径名称的支持。此可选配置默认添加到 config.yaml 中。启用允许在仓库名称中使用 /

FEATURE_EXTENDED_REPOSITORY_NAMES: true

表 2.26. OCI 和嵌套存储库配置字段

字段类型描述

FEATURE_EXTENDED_REPOSITORY_NAMES

布尔值

启用对嵌套存储库的支持

默认: True

2.23. 向 Quay 添加其他 OCI 介质类型

Helm、cosign 和 ztsd 压缩方案工件默认内置在 Red Hat Quay 3.6 中。对于默认情况下不支持的任何其他 OCI 介质类型,您可以使用以下格式将它们添加到 Quay config.yaml 中的 ALLOWED_OCI_ARTIFACT_TYPES 配置中:

ALLOWED_OCI_ARTIFACT_TYPES:
  <oci config type 1>:
  - <oci layer type 1>
  - <oci layer type 2>

  <oci config type 2>:
  - <oci layer type 3>
  - <oci layer type 4>
...

例如,您可以通过在 config.yaml 中添加以下内容来添加 Singularity(SIF)支持:

...
ALLOWED_OCI_ARTIFACT_TYPES:
  application/vnd.oci.image.config.v1+json:
  - application/vnd.dev.cosign.simplesigning.v1+json
  application/vnd.cncf.helm.config.v1+json:
  - application/tar+gzip
  application/vnd.sylabs.sif.config.v1+json:
  - application/vnd.sylabs.sif.layer.v1+tar
...
注意

当添加默认配置的 OCI 介质类型时,用户需要手动添加对 cosign 和 Helm 的支持。在默认情况下,支持 ztsd 压缩方案,因此用户不需要将 OCI 介质类型添加到其 config.yaml 中以启用支持。

2.24. 邮件配置字段

表 2.27. 邮件配置字段

字段类型描述

FEATURE_MAILING

布尔值

电子邮件是否已启用

默认: False

MAIL_DEFAULT_SENDER

字符串

如果指定了,当 Red Hat Quay 发送电子邮件时,电子邮件地址用作 from。如果没有,则默认为 support@quay.io

示例: support@example.com

MAIL_PASSWORD

字符串

发送电子邮件时要使用的 SMTP 密码

MAIL_PORT

Number

要使用的 SMTP 端口。如果没有指定,则默认为 587。

MAIL_SERVER

字符串

用于发送电子邮件的 SMTP 服务器。只有在将 FEATURE_MAILING 设置为 true 时才需要。

Example: smtp.example.com

MAIL_USERNAME

字符串

发送电子邮件时要使用的 SMTP 用户名

MAIL_USE_TLS

布尔值

如果指定,是否使用 TLS 发送电子邮件

默认: True

2.25. 用户配置字段

表 2.28. 用户配置字段

字段类型描述

FEATURE_SUPER_USERS

布尔值

超级用户是否被支持

默认: true

FEATURE_USER_CREATION

布尔值

是否可以创建用户(通过非超级用户)

Default: true

FEATURE_USER_LAST_ACCESSED

布尔值

是否记录用户最后一次访问的时间

默认: true

FEATURE_USER_LOG_ACCESS

布尔值

如果设置为 true,则用户有权访问其命名空间的审计日志

默认: false

FEATURE_USER_METADATA

布尔值

是否收集和支持用户元数据

默认: false

FEATURE_USERNAME_CONFIRMATION

布尔值

如果设置为 true,用户可以确认它们生成的 usernames

Default: true

FEATURE_USER_RENAME

布尔值

如果设置为 true,用户可以重命名自己的命名空间

默认: false

FEATURE_INVITE_ONLY_USER_CREATION

布尔值

创建的用户都必须被其他用户邀请

默认: false

FRESH_LOGIN_TIMEOUT

字符串

新登录需要用户重新输入其密码的时间

示例5m

USERFILES_LOCATION

字符串

存储引擎的 ID,在其中放置用户上传的文件

示例s3_us_east

USERFILES_PATH

字符串

storage 下放置用户上传文件的路径

示例userfiles

USER_RECOVERY_TOKEN_LIFETIME

字符串

恢复用户帐户的令牌的时间长度为有效的

Pattern:^[0-9]+(w|m|d|h|s)$
Default:30m

2.26. Recaptcha 配置字段

表 2.29. Recaptcha 配置字段

字段类型描述

FEATURE_RECAPTCHA

布尔值

用户登录和恢复是否需要 Recaptcha

Default: False

RECAPTCHA_SECRET_KEY

字符串

如果启用了 recaptcha,则 Recaptcha 服务的 secret 键

RECAPTCHA_SITE_KEY

字符串

如果启用了 recaptcha,则 Recaptcha 服务的 site 键

2.27. ACI 配置字段

表 2.30. ACI 配置字段

字段类型描述

FEATURE_ACI_CONVERSION

布尔值

是否启用转换为 ACI

默认: False

GPG2_PRIVATE_KEY_FILENAME

字符串

用于解密 ACI 的私钥的文件名

GPG2_PRIVATE_KEY_NAME

字符串

用于为 ACI 签名的私钥名称

GPG2_PUBLIC_KEY_FILENAME

字符串

用于加密 ACI 的公钥的文件名

2.28. JWT 配置字段

表 2.31. JWT 配置字段

字段类型描述

JWT_AUTH_ISSUER

字符串

JWT 用户的端点

Pattern:^http (s)?://(.)+$
Example:http://192.168.99.101:6060

JWT_GETUSER_ENDPOINT

字符串

JWT 用户的端点
Pattern:^http (s)?://(.)+$
Example:http://192.168.99.101:6060

JWT_QUERY_ENDPOINT

字符串

JWT 查询的端点

Pattern:^http (s)?://(.)+$
Example:http://192.168.99.101:6060

JWT_VERIFY_ENDPOINT

字符串

JWT 验证的端点

Pattern:^http (s)?://(.)+$
Example:http://192.168.99.101:6060

2.29. 应用令牌配置字段

表 2.32. 应用令牌配置字段

字段类型描述

FEATURE_APP_SPECIFIC_TOKENS

布尔值

如果启用,用户可以创建供 Docker CLI 使用的令牌

Default: True

APP_SPECIFIC_TOKEN_EXPIRATION

字符串

外部应用程序令牌的过期。

Default None
Pattern: ^[0-9]+(w|m|d|h|s)$

EXPIRED_APP_SPECIFIC_TOKEN_GC

字符串

外部应用程序令牌在垃圾回收前保留的时长

默认: 1d

2.30. 其他配置字段

表 2.33. 其他配置字段

字段类型描述

ALLOW_PULLS_WITHOUT_STRICT_LOGGING

字符串

如果为 true,则即使无法写入拉取审计日志条目,拉取仍会成功。如果数据库处于只读状态,且需要拉取以便在那个时间内继续,则这非常有用。

默认 : False

AVATAR_KIND

字符串

要显示的 avatars 的类型,可生成内联(本地)或 Gravatar (gravatar)

Values: local, gravatar

BROWSER_API_CALLS_XHR_ONLY

布尔值

如果启用,则只允许被标记为来自浏览器的、由 XHR 发出的 API 调用

默认: True

DEFAULT_NAMESPACE_MAXIMUM_BUILD_COUNT

Number

可以在命名空间中排队的默认最大构建数。

Default: None

ENABLE_HEALTH_DEBUG_SECRET

字符串

如果指定,可提供给健康端点的 secret,以便在不以超级用户身份验证时查看完整的调试信息

EXTERNAL_TLS_TERMINATION

布尔值

如果支持 TLS,则设为 true,但在 Quay 之前的一个层终止。当 Quay 使用其自己的 SSL 证书运行时,设置为 false,并直接接收 TLS 流量。

FRESH_LOGIN_TIMEOUT

字符串

新登录需要用户重新输入密码的时间

示例: 5m

HEALTH_CHECKER

字符串

配置的健康检查

示例: ('RDSAwareHealthCheck', {'access_key': 'foo', 'secret_key': 'bar'})

PROMETHEUS_NAMESPACE

字符串

应用到所有公开的 Prometheus 指标的前缀

默认: quay

PUBLIC_NAMESPACES

String 数组

如果在公共命名空间中定义了命名空间,它将出现在 所有用户 的存储库列表页面上,无论用户是否为命名空间的成员。通常,这由在配置一组 "well-known" 命名空间的企业客户使用。

REGISTRY_STATE

字符串

registry 的状态

值: normalread-only

SEARCH_MAX_RESULT_PAGE_COUNT

Number

用户在限制前可以分页搜索的最大页面数

默认:10

SEARCH_RESULTS_PER_PAGE

Number

搜索页面返回的结果数

默认:10

V1_PUSH_WHITELIST

String 数组

如果 FEATURE_RESTRICTED_V1_PUSH 设置为 true,则支持 V1 推送的命名空间名称的数组。

V2_PAGINATION_SIZE

Number

V2 registry API 中每个页面返回的结果数量

默认: 50

WEBHOOK_HOSTNAME_BLACKLIST

String 数组

在除 localhost 外验证时,从 Webhook 中禁止的主机名集合

CREATE_PRIVATE_REPO_ON_PUSH

布尔值

通过 push 创建新软件仓库是否被设置为私有可见

默认: True

CREATE_NAMESPACE_ON_PUSH

布尔值

新推送到不存在的机构时是否创建它

默认: False

NON_RATE_LIMITED_NAMESPACES

String 数组

如果使用 FEATURE_RATE_LIMITS 启用速率限制,您可以为需要无限访问的特定命名空间覆盖它。

2.31. 旧配置字段

有些字段已弃用或过时的:

表 2.34. 旧配置字段

字段类型描述

FEATURE_BLACKLISTED_EMAILS

布尔值

如果设为 true,则在电子邮件域列入黑名单时无法创建新的用户帐户

BLACKLISTED_EMAIL_DOMAINS

String 数组

FEATURE_BLACKLISTED_EMAILS 设置为 true 时使用的电子邮件地址域列表

示例:" example.com", "example.org"

BLACKLIST_V2_SPEC

字符串

Red Hat Quay 将响应 V2 的 Docker CLI 版本 不被支持

示例 : <1.8.0
Default: &lt ;1.6.0

DOCUMENTATION_ROOT

字符串

文档链接的根 URL

SECURITY_SCANNER_V4_NAMESPACE_WHITELIST

字符串

应该启用安全扫描程序的命名空间

第 3 章 环境变量

Red Hat Quay 支持有限的用于动态配置的环境变量。

3.1. geo-replication

所有区域应使用完全相同的配置,但存储后端除外,可以使用 QUAY_DISTRIBUTED_STORAGE_PREFERENCE 环境变量进行显式配置。

表 3.1. 异地复制配置

变量类型描述

QUAY_DISTRIBUTED_STORAGE_PREFERENCE

字符串

首选存储引擎(根据 DISTRIBUTED_STORAGE_CONFIG)使用。

3.2. 数据库连接池

Red Hat Quay 由很多不同的进程组成,它们都在同一个容器内运行。很多进程与数据库交互。

如果启用,与数据库交互的每个进程都将包含一个连接池。这些每个进程连接池配置为保持最多 20 个连接。在重度负载下,可以为 Red Hat Quay 容器中的每个进程填写连接池。在某些部署和加载下,这可能需要分析,以确保 Red Hat Quay 不超过数据库配置的最大连接数。

现在,连接池将释放闲置连接。要立即释放所有连接,Red Hat Quay 需要重启。

可以通过设置环境变量 DB_CONNECTION_POOLING={true|false} 来切换数据库连接池。

表 3.2. 数据库连接池配置

变量类型描述

DB_CONNECTION_POOLING

布尔值

启用或禁用数据库连接池

如果启用了数据库连接池,可以更改连接池的最大大小。这可以通过以下 config.yaml 选项完成:

config.yaml

...
DB_CONNECTION_ARGS:
  max_connections: 10
...

3.3. HTTP 连接数

可以使用环境变量同时指定 HTTP 连接的数量。这些可指定为整个组件,也可以指定为特定的组件。每个进程的默认值为 50 个并行连接。

表 3.3. HTTP 连接计数配置

变量类型描述

WORKER_CONNECTION_COUNT

Number

同时 HTTP 连接

默认: 50

WORKER_CONNECTION_COUNT_REGISTRY

Number

同步 registry 的 HTTP 连接

默认: WORKER_CONNECTION_COUNT

WORKER_CONNECTION_COUNT_WEB

Number

Web UI 同时 HTTP 连接

默认: WORKER_CONNECTION_COUNT

WORKER_CONNECTION_COUNT_SECSCAN

Number

Clair 的 HTTP 连接

Default: WORKER_CONNECTION_COUNT

3.4. worker 计数变量

表 3.4. worker 计数变量

变量类型描述

WORKER_COUNT

Number

进程数的通用覆盖

WORKER_COUNT_REGISTRY

Number

指定处理 Quay 容器中 Registry 请求的进程数量

值: 在 8 到 64 之间

WORKER_COUNT_WEB

Number

指定处理容器中的 UI/Web 请求的进程数量

值: Integer between 2 到 32

WORKER_COUNT_SECSCAN

Number

指定在容器中处理安全扫描(如 Clair)集成的进程数量

值: Integer between 2 到 4

第 4 章 使用配置工具在 OpenShift 中重新配置 Quay

4.1. 访问配置编辑器

在 QuayRegistry 屏幕的 Details 部分中,可以使用 config 编辑器的端点,以及指向含有登录配置编辑器凭证的 secret 的链接:

Config editor details

4.1.1. 检索配置编辑器凭证

  1. 点击配置编辑器 secret 的链接:

    Config editor secret

  2. 在 Secret Details 屏幕的 Data 部分,点 Reveal values 来查看登录到配置编辑器的凭证:

    Config editor secret reveal

4.1.2. 登录到配置编辑器

浏览到配置编辑器端点,然后输入用户名(通常是 quayconfig )以及访问配置工具的对应密码:

Config editor user interface

4.1.3. 更改配置

在本例中,通过配置编辑器工具添加超级用户:

  1. 为时间机器功能添加过期周期,如 4w

    Add expiration period

  2. 选择 Validate Configuration Changes 以确保更改有效
  3. Reconfigure Quay 按钮应用更改:

    Reconfigure

  4. 配置工具通知您已向 Quay 提交了更改:

    Reconfigured

注意

使用配置工具 UI 配置 Red Hat Quay 可能会导致 registry 短时间不可用,同时应用更新的配置。

4.2. 在 UI 中监控重新配置

4.2.1. QuayRegistry 资源

重新配置 Operator 后,您可以跟踪特定 QuayRegistry 实例的 YAML 选项卡中的重新部署进度,本例中为 example-registry

ui monitor deploy update

每次状态发生变化时,系统都会提示您重新载入数据以查看更新的版本。最后,Operator 将协调更改,且不会报告不健康的组件。

ui monitor deploy done

4.2.2. 事件

QuayRegistry 的 Events 选项卡显示与重新部署相关的一些事件:

ui monitor deploy streaming events

在 OpenShift 控制台 Home → Events 下,针对受重新配置影响的所有资源的流传输事件:

ui monitor deploy streaming events

4.3. 在重新配置后访问更新的信息

4.3.1. 在 UI 中访问更新的配置工具凭证

使用 Red Hat Quay 3.7,通过 UI 重新配置 Quay 不再生成新的登录密码。现在,密码只生成一次,并在协调 QuayRegistry 对象后保持不变。

4.3.2. 在 UI 中访问更新的 config.yaml

使用 config 捆绑包访问更新的 config.yaml 文件。

  1. 在 QuayRegistry 详情屏幕上点 Config Bundle Secret
  2. 在 Secret Details 屏幕的 Data 部分,点 Reveal values 查看 config.yaml 文件
  3. 检查是否应用了更改。在这种情况下,4w 应该位于 TAG_EXPIRATION_OPTIONS 列表中:

    ...
    SERVER_HOSTNAME: example-quay-openshift-operators.apps.docs.quayteam.org
    SETUP_COMPLETE: true
    SUPER_USERS:
    - quayadmin
    TAG_EXPIRATION_OPTIONS:
    - 2w
    - 4w
    ...

第 5 章 Quay Operator 组件

Quay 是一个强大的容器 registry 平台,因此有多个依赖项。它们包括数据库、对象存储、Redis 等。Quay Operator 管理对 Quay 的意见部署及其对 Kubernetes 的依赖项。这些依赖项被视为 组件,并通过 QuayRegistry API 配置。

QuayRegistry 自定义资源中,spec.components 字段配置组件。每个组件包含两个字段: kind - 组件的名称,managed - 布尔值(无论组件生命周期是由 Operator 处理)。默认情况下(显示此字段),所有组件都将在协调后自动填充,以获得可见性:

spec:
  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

5.1. 使用受管组件

除非 QuayRegistry 自定义资源指定其他,否则 Operator 将对以下受管组件使用默认值:

  • quay: 保存 Quay 部署的覆盖,例如,环境变量和副本数。这个组件是 Red Hat Quay 3.7 中的新内容,它无法设置为非受管状态。
  • Postgres 要存储 registry 元数据,请使用 Software Collections中的 Postgres 10 版本
  • Clair: 提供镜像漏洞策略扫描
  • Redis: 处理 Quay 构建器协调和一些内部日志记录
  • HorizontalPodAutoscaler: 根据 memory/cpu 消耗调整 Quay pod 的数量
  • objectstorage: 用于存储镜像层 blob,使用 Noobaa/RHOCS 提供的 ObjectBucketClaim Kubernetes API
  • Route: 从外部 OpenShift 提供指向 Quay registry 的外部入口点
  • mirror: 配置存储库镜像 worker(支持可选存储库镜像)
  • monitoring: 功能包括 Grafana 仪表板、对单个指标的访问以及通知的提示以经常重启 Quay Pod
  • TLS: 配置 Red Hat Quay 或 OpenShift 是否处理 TLS
  • clairpostgres: 配置受管 Clair 数据库

Operator 将处理 Red Hat Quay 使用受管组件所需的配置和安装工作。如果 Quay Operator 对环境的意见进行了建议,您可以为 Operator 提供 非受管 资源(overrides)的 Operator,如以下部分所述。

5.2. 将非受管组件用于依赖项

如果您有现有的组件,如 Postgres、Redis 或对象存储,则您要首先在 Quay 配置捆绑包(config.yaml)中配置它们,然后在 QuayRegistry 中引用捆绑包(作为 Kubernetes Secret),同时表示哪些组件是非受管状态。

注意

Quay 配置编辑器也可用于创建或修改现有配置捆绑包,并简化更新 Kubernetes Secret 的过程,特别是用于多项更改。当通过配置编辑器更改 Quay 配置并发送到 Operator 时,将更新 Quay 部署来反映新配置。

5.2.1. 使用现有的 Postgres 数据库

  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 文件 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

  4. 按照以下部分所述部署 registry。

5.2.2. NooBaa 非受管存储

  1. 在 Storage → Object Bucket Claims 的控制台中创建一个 NooBaa Object Bucket Claim。
  2. 检索 Object Bucket Claim Data 的详情,包括 Access Key、Bucket Name、Endpoint(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

5.2.3. 禁用 Horizontal Pod Autoscaler

HorizontalPodAutoscalers 已添加到 Clair、Quay 和 Mirror pod 中,以便在负载高峰期间自动扩展。

由于 HPA 默认被配置为 managed,Quay 的 pod 数量,Clair 和存储库镜像数被设为 2。这有助于在通过 Operator 更新/配置 Quay 或重新调度事件期间出现停机的问题。

如果要禁用自动扩展或创建自己的 HorizontalPodAutoscaler,只需在 QuayRegistry 实例中将组件指定为 unmanaged:

apiVersion: quay.redhat.com/v1
kind: QuayRegistry
metadata:
  name: example-registry
  namespace: quay-enterprise
spec:
  components:
    - kind: horizontalpodautoscaler
      managed: false

5.3. 在 Kubernetes 上部署时添加证书

在 Kubernetes 上部署时,Red Hat Quay 将作为卷挂载到 secret 中来存储配置资产。不幸的是,这当前会破坏超级用户面板的上传证书功能。

要解决这个错误,可在部署 Red Hat Quay 将 base64 编码证书添加到 secret 中。以下是如何:

  1. 首先使用 base64 编码证书内容:

    $ cat ca.crt
    -----BEGIN CERTIFICATE-----
    MIIDljCCAn6gAwIBAgIBATANBgkqhkiG9w0BAQsFADA5MRcwFQYDVQQKDA5MQUIu
    TElCQ09SRS5TTzEeMBwGA1UEAwwVQ2VydGlmaWNhdGUgQXV0aG9yaXR5MB4XDTE2
    MDExMjA2NTkxMFoXDTM2MDExMjA2NTkxMFowOTEXMBUGA1UECgwOTEFCLkxJQkNP
    UkUuU08xHjAcBgNVBAMMFUNlcnRpZmljYXRlIEF1dGhvcml0eTCCASIwDQYJKoZI
    [...]
    -----END CERTIFICATE-----
    
    $ cat ca.crt | base64 -w 0
    [...]
    c1psWGpqeGlPQmNEWkJPMjJ5d0pDemVnR2QNCnRsbW9JdEF4YnFSdVd3PT0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=
  2. 使用 kubectl 工具编辑 quay-enterprise-config-secret。

    $ kubectl --namespace quay-enterprise edit secret/quay-enterprise-config-secret
  3. 为证书添加一个条目,并在条目下粘贴完整的 base64 编码字符串:

      custom-cert.crt:
    c1psWGpqeGlPQmNEWkJPMjJ5d0pDemVnR2QNCnRsbW9JdEF4YnFSdVd3PT0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=
  4. 最后,回收所有 Red Hat Quay Pod。使用 kubectl delete 删除所有 Red Hat Quay Pod。Red Hat Quay Deployment 将自动使用新证书数据调度替代 pod。

5.4. 使用 Operator 配置 OCI 和 Helm

Quay 配置的自定义可以在包含配置捆绑包的 secret 中提供。在适当的命名空间中执行以下命令,它将创建名为 quay-config-bundle 的新 secret,其包含启用 OCI 支持的必要属性。

quay-config-bundle.yaml

apiVersion: v1
stringData:
  config.yaml: |
    FEATURE_GENERAL_OCI_SUPPORT: true
    FEATURE_HELM_OCI_SUPPORT: true
kind: Secret
metadata:
  name: quay-config-bundle
  namespace: quay-enterprise
type: Opaque

重要

从 Red Hat Quay 3.7 开始,FEATURE_HELM_OCI_SUPPORT 已被弃用,并将在以后的 Red Hat Quay 版本中删除。在 Red Hat Quay 3.6 中,默认支持 Helm 工件,并包括在 FEATURE_GENERAL_OCI_SUPPORT 属性中。用户不再需要更新其 config.yaml 文件来启用支持。

在适当的命名空间中创建 secret,在本例中为 quay-enterprise

$ oc create -n quay-enterprise -f quay-config-bundle.yaml

指定 spec.configBundleSecret 字段的 secret:

quay-registry.yaml

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

使用指定配置创建 registry:

$ oc create -n quay-enterprise -f quay-registry.yaml

5.5. 卷大小覆盖

从 Red Hat Quay v3.6.2 开始,您可以指定为受管组件置备的存储资源所需的大小。Clair 和 Quay PostgreSQL 数据库的默认大小为 50Gi。现在,您可以预先选择足够大的容量,可能是因为性能的原因,或者在您的存储后端没有调整大小功能的情况下选择。

在以下示例中,Clair 和 Quay PostgreSQL 数据库的卷大小已设置为 70Gi

apiVersion: quay.redhat.com/v1
kind: QuayRegistry
metadata:
  name: quay-example
  namespace: quay-enterprise
spec:
  configBundleSecret: config-bundle-secret
  components:
    - kind: objectstorage
      managed: false
    - kind: route
      managed: true
    - kind: tls
      managed: false
    - kind: clair
      managed: true
      overrides:
        volumeSize: 70Gi
    - kind: postgres
      managed: true
      overrides:
        volumeSize: 70Gi

第 6 章 使用配置 API

该配置工具有 4 个端点,可用于构建、验证、捆绑和部署配置。config-tool API 记录在 https://github.com/quay/config-tool/blob/master/pkg/lib/editor/API.md 中。在本节中,您将了解如何使用 API 来检索当前配置,以及如何验证您所做的任何更改。

6.1. 检索默认配置

如果您首次运行配置工具,且没有现有配置,您可以检索默认配置。以 config 模式启动容器:

$ sudo podman run --rm -it --name quay_config \
  -p 8080:8080 \
  registry.redhat.io/quay/quay-rhel8:v3.7.10 config secret

使用配置 API 的 config 端点获取默认值:

$ curl -X GET -u quayconfig:secret http://quay-server:8080/api/v1/config  | jq

返回的值是 JSON 格式的默认配置:

{
  "config.yaml": {
    "AUTHENTICATION_TYPE": "Database",
    "AVATAR_KIND": "local",
    "DB_CONNECTION_ARGS": {
      "autorollback": true,
      "threadlocals": true
    },
    "DEFAULT_TAG_EXPIRATION": "2w",
    "EXTERNAL_TLS_TERMINATION": false,
    "FEATURE_ACTION_LOG_ROTATION": false,
    "FEATURE_ANONYMOUS_ACCESS": true,
    "FEATURE_APP_SPECIFIC_TOKENS": true,
    ....
  }

}

6.2. 检索当前配置

如果您已经配置并部署了 Quay registry,请停止容器并以配置模式重启它,以作为卷载入现有配置:

$ sudo podman run --rm -it --name quay_config \
  -p 8080:8080 \
  -v $QUAY/config:/conf/stack:Z \
  registry.redhat.io/quay/quay-rhel8:v3.7.10 config secret

使用 API 的 config 端点获取当前的配置:

$ curl -X GET -u quayconfig:secret http://quay-server:8080/api/v1/config  | jq

返回的值是 JSON 格式的当前配置,包括数据库和 Redis 配置数据:

{
  "config.yaml": {
    ....
    "BROWSER_API_CALLS_XHR_ONLY": false,
    "BUILDLOGS_REDIS": {
      "host": "quay-server",
      "password": "strongpassword",
      "port": 6379
    },
    "DATABASE_SECRET_KEY": "4b1c5663-88c6-47ac-b4a8-bb594660f08b",
    "DB_CONNECTION_ARGS": {
      "autorollback": true,
      "threadlocals": true
    },
    "DB_URI": "postgresql://quayuser:quaypass@quay-server:5432/quay",
    "DEFAULT_TAG_EXPIRATION": "2w",
    ....


  }

}

6.3. 使用 API 验证配置

您可以通过将其发送到 config/validate 端点来验证配置:

curl -u quayconfig:secret --header 'Content-Type: application/json' --request POST --data '
{
  "config.yaml": {
    ....
    "BROWSER_API_CALLS_XHR_ONLY": false,
    "BUILDLOGS_REDIS": {
      "host": "quay-server",
      "password": "strongpassword",
      "port": 6379
    },
    "DATABASE_SECRET_KEY": "4b1c5663-88c6-47ac-b4a8-bb594660f08b",
    "DB_CONNECTION_ARGS": {
      "autorollback": true,
      "threadlocals": true
    },
    "DB_URI": "postgresql://quayuser:quaypass@quay-server:5432/quay",
    "DEFAULT_TAG_EXPIRATION": "2w",
    ....

  }

} http://quay-server:8080/api/v1/config/validate | jq

返回的值是一个包含配置中发现的错误的数组。如果配置有效,则返回空数组 []

6.4. 确定必填字段

您可以通过在 config/validate 端点中发布空配置结构来确定必填字段:

curl -u quayconfig:secret --header 'Content-Type: application/json' --request POST --data '
{
  "config.yaml": {
  }

} http://quay-server:8080/api/v1/config/validate | jq

返回的值是一个数组,表示需要哪些字段:

[
  {
    "FieldGroup": "Database",
    "Tags": [
      "DB_URI"
    ],
    "Message": "DB_URI is required."
  },
  {
    "FieldGroup": "DistributedStorage",
    "Tags": [
      "DISTRIBUTED_STORAGE_CONFIG"
    ],
    "Message": "DISTRIBUTED_STORAGE_CONFIG must contain at least one storage location."
  },
  {
    "FieldGroup": "HostSettings",
    "Tags": [
      "SERVER_HOSTNAME"
    ],
    "Message": "SERVER_HOSTNAME is required"
  },
  {
    "FieldGroup": "HostSettings",
    "Tags": [
      "SERVER_HOSTNAME"
    ],
    "Message": "SERVER_HOSTNAME must be of type Hostname"
  },
  {
    "FieldGroup": "Redis",
    "Tags": [
      "BUILDLOGS_REDIS"
    ],
    "Message": "BUILDLOGS_REDIS is required"
  }
]

第 7 章 使用配置工具

7.1. 自定义 SSL 证书 UI

配置工具可用于加载自定义证书,以便于访问外部数据库等资源。选择要上传的自定义证书,确保它们采用 PEM 格式,扩展为 .crt

Custom SSL certificates

配置工具还显示任何上传的证书的列表。上传自定义 SSL 证书后,它将显示在列表中:

Custom SSL certificates

7.2. 基本配置

Basic configuration

7.2.1. 联系信息

Basic configuration

7.3. 服务器配置

Server configuration

7.3.1. 服务器配置选择

Server configuration choice

7.3.2. TLS 配置

TLS configuration

7.4. 数据库配置

您可以选择 PostGreSQL 和 MySQL: Database choice

注意

在 Red Hat Quay 3.6 中,MySQL 和 MariaDB 数据库已弃用。在以后的 Red Hat Quay 版本中会删除对这些数据库的支持。如果启动新的 Red Hat Quay 安装,强烈建议您使用 PostgreSQL。

7.4.1. PostgreSQL 配置

输入连接到数据库的详情:

PostgreSQL configuration

这将生成 postgresql://quayuser:quaypass@quay-server.example.com:5432/quay 形式的 DB_URI 字段。

如果您需要对连接参数进行精细的控制,请参阅配置指南中的"数据基准连接参数"部分。

7.5. 数据一致性

Data consistency

7.6. 时间机器配置

Time machine configuration

7.7. Redis 配置

Redis configuration

7.8. 存储库镜像配置

Repository mirroring configuration

7.9. registry 存储配置

  • 代理存储
  • 存储异地复制
  • 存储引擎

7.9.1. 启用存储复制 - 独立 Quay

  1. 向下滚动到标题 Registry Storage 的部分。
  2. Enable Storage Replication
  3. 添加要复制数据的每个存储引擎。必须列出要使用的所有存储引擎。
  4. 如果需要将所有镜像复制到所有存储引擎,请在各个存储引擎配置中单击 Replicate 到存储引擎。这将确保所有镜像都复制到该存储引擎。要改为启用按命名空间复制,请联系支持。
  5. 完成后,单击 Save Configuration Changes。配置更改将在 Red Hat Quay 下次重启时生效。
  6. 为 Georeplications 添加存储并启用"Replicate to存储引擎"后,您需要在所有存储间同步现有镜像数据。要做到这一点,您需要 oc exec (或 docker/kubectl exec)到容器中,并运行:

    # scl enable python27 bash
    # python -m util.backfillreplication

    这是在添加新存储后同步内容的一个时间操作。

7.9.2. 存储引擎

7.9.2.1. 本地存储

Local storage configuration

7.9.2.2. Amazon S3 存储

Amazon S3 storage configuration

7.9.2.3. Azure blob 存储

Azure blob storage configuration

7.9.2.4. Google 云存储

Google cloud storage configuration

7.9.2.5. Ceph 对象网关(RADOS)存储

Ceph object gateway (RADOS) storage configuration

7.9.2.6. OpenStack(Swift)存储配置

OpenStack (Swift) storage configuration

7.9.2.7. CloudFront + Amazon S3 存储配置

Cloudfront + Amazon S3 storage configuration

7.10. 操作日志配置

7.10.1. 操作日志存储配置

7.10.1.1. 数据库操作日志存储

Database action log storage configuration

7.10.1.2. Elasticsearch 操作日志存储

Elasticsearch log storage configuration

7.10.2. 操作日志轮转和归档

Action log rotation and archiving configuration

Action log rotation and archiving storage choice

7.11. 安全扫描程序配置

Security scanner configuration

7.12. 应用程序 registry 配置

Application registry configuration

7.13. 电子邮件配置

Email configuration

7.14. 内部验证配置

Internal authentication configuration

Internal authentication choice

7.14.1. LDAP

LDAP authentication

7.14.2. Keystone(OpenStack 身份)

Keystone authentication

7.14.3. JWT 自定义身份验证

JWT custom authentication

7.14.4. 外部应用程序令牌

External application token authentication

7.15. 外部验证(OAUTH)配置

7.15.1. GitHub(企业)身份验证

GitHub (Enterprise) authentication configuration

7.15.2. Google 身份验证

Google authentication configuration

7.16. 访问设置配置

Access settings configuration

7.17. Dockerfile 构建支持

Dockerfile build support

7.17.1. GitHub(企业)构建触发器

GitHub (Enterprise) Build Triggers

7.17.2. Bitbucket 构建触发器

BitBucket Build Triggers

7.17.3. GitLab 构建触发器

GitLab Build Triggers

法律通告

Copyright © 2023 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.