配置 Red Hat Quay
第 1 章 Red Hat Quay 配置入门
Red Hat Quay 可以通过独立的、独立的配置或使用 OpenShift Container Platform Red Hat Quay Operator 部署。
根据您使用的部署类型,创建、检索、更新和验证 Red Hat Quay 配置的方式会有所不同。但是,在任一部署类型时,核心配置选项都相同。核心配置可通过以下选项之一设置:
-
通过编辑
config.yaml
文件直接进行。如需更多信息,请参阅"编辑配置文件"。 - 使用配置 API 以编程方式。如需更多信息,请参阅"使用配置 API"。
- 通过使用配置工具 UI,以可视化方式使用。如需更多信息,请参阅"使用配置工具"。
对于 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.8 配置更新
Red Hat Quay 3.8 引进了以下配置字段:
字段 | 类型 | Description |
---|---|---|
布尔值 | 设置后,允许用户尝试 beta UI 环境。
Default: | |
字符串 | 启用 IPv4、IPv6 或双栈协议系列。必须正确设置此配置字段,否则 Red Hat Quay 无法启动。
默认:
其他配置: | |
字符串 |
使用此字段,管理员可以添加或删除超级用户,而无需更新 Red Hat Quay 配置文件并重启其部署。 | |
字符串 |
| |
布尔值 | 授予超级用户,可在他们不拥有或有显式权限的命名空间中其他存储库读取、写入和删除内容。
Default: | |
字符串 | 设置后,无论它们是公共存储库,都授予用户此列表对所有存储库的读取权限。 | |
布尔值 |
使用
Default: | |
字符串 |
使用 |
1.2. Quay 3.7 的配置更新
1.2.1. Red Hat Quay 3.7.7 的新配置字段
字段 | 类型 | Description |
---|---|---|
REPO_MIRROR_ROLLBACK | 布尔值 |
当设置为
默认 : |
1.2.2. 新配置字段
Red Hat Quay 3.7 中引入了以下配置字段:
参数 | Description |
---|---|
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 中的拉取(pull)限制。有关配额管理的更多信息,请参阅 Red Hat Quay 作为上游 registry 的代理缓存。 |
1.3. Red Hat Quay 3.6 的配置更新
1.3.1. 新配置字段
Red Hat Quay 3.6 中引入了以下配置字段:
参数 | Description |
---|---|
FEATURE_EXTENDED_REPOSITORY_NAMES |
添加了对嵌套存储库和扩展存储库名称的支持。此更改允许在某些 OpenShift Container Platform 用例所需的库名称中使用 |
FEATURE_USER_INITIALIZE |
如果设为 true,则可以通过 API |
ALLOWED_OCI_ARTIFACT_TYPES |
Helm、cosign 和 ztsd 压缩方案工件默认内置在 Red Hat Quay 3.6 中。对于不受默认支持的任何其他开放容器项目(OCI)媒体类型,您可以将它们添加到 Quay 的 |
CREATE_PRIVATE_REPO_ON_PUSH |
registry 用户现在可以选择根据安全需求将 |
CREATE_NAMESPACE_ON_PUSH | 推送到不存在的机构现在可以配置为自动创建机构。 |
1.3.2. 弃用的配置字段
Red Hat Quay 3.6 弃用了以下配置字段:
参数 | Description |
---|---|
FEATURE_HELM_OCI_SUPPORT |
这个选项已弃用,并将在以后的 Red Hat Quay 版本中删除。在 Red Hat Quay 3.6 中,Helm 工件会被默认支持,包含在 |
1.4. 编辑配置文件
要部署独立的 Red Hat Quay 实例,您必须提供最少的配置信息。最小配置的要求可在"Red Hat Quay 最小配置"中找到。
提供必填字段后,您可以验证配置。如果有任何问题,则会突出显示它们。
可以使用配置 API 来验证配置,但这需要以配置模式启动 Quay 容器。如需更多信息,请参阅"使用配置工具"。
要使更改生效,必须重启 registry。
1.5. 独立部署中配置文件的位置
对于独立的 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 \ registry.redhat.io/quay/quay-rhel8:v3.8.15
1.6. 最小配置
Red Hat Quay 独立部署需要以下配置选项:
- 服务器主机名
- HTTP 或 HTTPS
- 身份验证类型,如数据库或轻量级目录访问协议(LDAP)
- 用于加密数据的 secret 密钥
- 镜像存储
- 用于元数据的数据库
- Redis 用于构建日志和用户事件
- 标签过期选项
1.6.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
字段表示配置已被验证。在启动注册表之前,您应使用配置编辑器工具验证您的配置。
1.6.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 \ registry.redhat.io/quay/quay-rhel8:v3.8.15
1.6.3. 云存储
存储配置在 Image storage 部分进行详细。对于某些用户,比较 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 \ registry.redhat.io/quay/quay-rhel8:v3.8.15
第 2 章 配置字段
本节论述了部署 Red Hat Quay 时所需的和可选配置字段。
2.1. 所需配置字段
配置 Red Hat Quay 所需的字段包括在以下部分:
2.2. 自动化选项
以下小节描述了 Red Hat Quay 部署的可用自动化选项:
2.3. 可选配置字段
Red Hat Quay 的可选字段可在以下部分中找到:
2.4. 常规必填字段
下表描述了 Red Hat Quay 部署所需的配置字段:
字段 | 类型 | Description |
---|---|---|
AUTHENTICATION_TYPE | 字符串 |
用于凭证身份验证的身份验证引擎。 |
PREFERRED_URL_SCHEME | 字符串 |
访问 Red Hat Quay 时使用的 URL 方案。 |
SERVER_HOSTNAME | 字符串 |
可以访问 Red Hat Quay 的 URL,不包括网络协议。 |
DATABASE_SECRET_KEY | 字符串 | 用于加密数据库中敏感字段的密钥。这个值不应在设置后更改,否则所有相应的字段(如存储库镜像用户名和密码配置)都无效。 |
SECRET_KEY | 字符串 | 用于加密数据库和运行时敏感字段的密钥。设置后不应更改这个值,否则所有相应的字段(例如加密密码凭证)都无效。 |
SETUP_COMPLETE | 布尔值 |
这是从早期版本的软件中保留的大体上,目前 必须使用 值 |
2.5. 数据库配置
本节介绍了可用于 Red Hat Quay 部署的数据库配置字段。
2.5.1. 数据库 URI
在 Red Hat Quay 中,使用所需的 DB_URI
字段配置与数据库的连接。
下表描述了 DB_URI
配置字段:
字段 | 类型 | Description |
---|---|---|
DB_URI | 字符串 | 用于访问数据库的 URI,包括任何凭证。
postgresql://quayuser:quaypass@quay-server.example.com:5432/quay |
2.5.2. 数据库连接参数
可选的连接参数由 DB_CONNECTION_ARGS
参数配置。DB_CONNECTION_ARGS
中定义的一些键值对是通用的,另一些则特定于数据库。
下表描述了数据库连接参数:
字段 | 类型 | Description |
---|---|---|
DB_CONNECTION_ARGS | 对象 | 数据库的可选连接参数,如超时和 SSL。 |
.autorollback | 布尔值 |
是否使用线程本地连接。 |
.threadlocals | 布尔值 |
是否使用自动滚动连接。 |
2.5.2.1. PostgreSQL SSL 连接参数
通过 SSL,配置取决于您要部署的数据库。以下示例显示了 PostgreSQL SSL 配置:
DB_CONNECTION_ARGS: sslmode: verify-ca sslrootcert: /path/to/cacert
sslmode
选项确定是否带有哪些安全 SSL TCP/IP 连接将与服务器协商的 SSL TCP/IP 连接。共有六种模式:
模式 | Description |
---|---|
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 的镜像存储功能:
字段 | 类型 | Description |
---|---|---|
FEATURE_REPO_MIRROR | 布尔值 |
如果设置为 true,请启用存储库镜像功能。 |
FEATURE_PROXY_STORAGE | 布尔值 |
是否代理通过 NGINX 直接下载存储中的 URL。 |
FEATURE_STORAGE_REPLICATION | 布尔值 |
是否在存储引擎之间自动复制。 |
2.6.2. 镜像存储配置字段
下表描述了 Red Hat Quay 的镜像存储配置字段:
字段 | 类型 | Description |
---|---|---|
DISTRIBUTED_STORAGE_CONFIG | 对象 |
在 Red Hat Quay 中使用的存储引擎的配置。每个键代表存储引擎的唯一标识符。该值由一个元组(键、值)组成一个对象来描述存储引擎参数。 |
DISTRIBUTED_STORAGE_DEFAULT_LOCATIONS | 字符串数组 |
默认情况下,存储引擎列表(通过 |
DISTRIBUTED_STORAGE_PREFERENCE | 字符串数组 |
首选存储引擎(按 |
MAXIMUM_LAYER_SIZE | 字符串 |
镜像层允许的最大值。 |
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 服务的二级端点将导致以下错误:
AuthenticationErrorDetail:Cannot 找到帐户 whusc8-secondary 的帐户的 GetProperties
。
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 部署:
字段 | 类型 | Description |
---|---|---|
BUILDLOGS_REDIS | 对象 | Redis 构建日志缓存的连接详情。 |
.host | 字符串 |
可以访问 Redis 的主机名。 |
.port | Number |
访问 Redis 的端口。 |
.password | 字符串 |
用于连接到 Redis 实例的密码。 |
.SSL | 布尔值 | 是否启用 Redis 和 Quay 之间的 TLS 通信。默认为false。 |
2.7.2. 用户事件
以下用户事件字段可用于 Redis 部署:
字段 | 类型 | Description |
---|---|---|
USER_EVENTS_REDIS | 对象 | Redis 连接详情,用于用户事件处理。 |
.host | 字符串 |
可以访问 Redis 的主机名。 |
.port | Number |
访问 Redis 的端口。 |
.password | 字符串 |
用于连接到 Redis 实例的密码。 |
.ssl | 布尔值 | 是否启用 Redis 和 Quay 之间的 TLS 通信。默认为false。 |
.ssl_keyfile | 字符串 |
密钥数据库文件的名称,它存放要使用的客户端证书。 |
.ssl_certfile | 字符串 |
用于指定 SSL 证书的文件路径。 |
.ssl_cert_reqs | 字符串 |
用于指定在 SSL/TLS 握手期间要执行的证书验证级别。 |
.ssl_ca_certs | 字符串 |
用于指定包含可信证书颁发机构(CA)证书列表的文件的路径。 |
.ssl_ca_data | 字符串 |
用于指定包含 PEM 格式的可信 CA 证书的字符串。 |
.ssl_check_hostname | 布尔值 |
在设置到服务器的 SSL/TLS 连接时使用。它指定客户端是否应该检查服务器的 SSL/TLS 证书中的主机名是否与它连接的服务器的主机名匹配。 |
2.7.3. Redis 配置示例
以下 YAML 显示了一个使用带有可选 SSL/TLS 字段的 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 ssl_*: <path_location_or_certificate>
如果您的部署使用 Redis 的 Azure 缓存,并且 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 提供:
字段 | 类型 | Description |
---|---|---|
FEATURE_GARBAGE_COLLECTION | 布尔值 |
是否启用存储库垃圾回收。 |
TAG_EXPIRATION_OPTIONS | 字符串数组 |
如果启用,用户可以选择其命名空间中的标签过期。 |
DEFAULT_TAG_EXPIRATION | 字符串 |
默认可配置标签过期时间。 |
FEATURE_CHANGE_TAG_EXPIRATION | 布尔值 |
用户和机构是否允许更改其命名空间中标签的标签过期。 |
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.8 功能,请启用部分或所有以下功能:
... FEATURE_UI_V2: true FEATURE_LISTEN_IP_VERSION: FEATURE_SUPERUSERS_FULL_ACCESS: true GLOBAL_READONLY_SUPER_USERS: - FEATURE_RESTRICTED_USERS: true RESTRICTED_USERS_WHITELIST: - ...
2.10.6. 启用新功能
要使用新的 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.7. 推荐的自动化配置
建议对自动化使用以下 config.yaml
参数:
... FEATURE_USER_INITIALIZE: true BROWSER_API_CALLS_XHR_ONLY: false SUPER_USERS: - quayadmin FEATURE_USER_CREATION: false ...
2.10.8. 使用初始配置部署 Red Hat Quay Operator
使用以下步骤,使用初始配置在 OpenShift Container Platform 上部署 Red Hat Quay。
前提条件
-
已安装
oc
CLI。
流程
使用配置文件创建 secret:
$ oc create secret generic -n quay-enterprise --from-file config.yaml=./config.yaml init-config-bundle-secret
创建
quayregistry.yaml
文件。确定非受管组件并引用所创建的 secret,例如:apiVersion: quay.redhat.com/v1 kind: QuayRegistry metadata: name: example-registry namespace: quay-enterprise spec: configBundleSecret: init-config-bundle-secret
部署 Red Hat Quay registry:
$ oc create -n quay-enterprise -f quayregistry.yaml
后续步骤
- 使用 API 创建第一个用户
2.10.9. 使用 API 部署 Red Hat Quay
本节介绍了使用 API 部署 Red Hat Quay。
前提条件
-
配置选项
FEATURE_USER_INITIALIZE
必须设为true
。 - 数据库中尚不存在任何用户。
有关预配置 Red Hat Quay 部署的更多信息,请参阅 Pre-configuring Red Hat Quay for automation部分
2.10.9.1. 使用 API 创建第一个用户
使用以下步骤在 Red Hat Quay 组织中创建第一个用户。
此流程通过指定 "access_token": true
来请求 OAuth 令牌。
以 root 用户身份,输入以下命令安装
python39
:$ sudo yum install python39
升级 Python 3.9 的
pip
软件包管理器:$ python3.9 -m pip install --upgrade pip
使用
pip
软件包管理器安装bcrypt
软件包:$ pip install bcrypt
输入以下命令,使用 Python 3.9 中的
bcrypt
软件包生成安全散列密码:$ python3.9 -c 'import bcrypt; print(bcrypt.hashpw(b"subquay12345", bcrypt.gensalt(12)).decode("utf-8"))'
打开 Red Hat Quay 配置文件并更新以下配置字段:
FEATURE_USER_INITIALIZE: true SUPER_USERS: - quayadmin
输入以下命令停止 Red Hat Quay 服务:
$ sudo podman stop quay
输入以下命令启动 Red Hat Quay 服务:
$ sudo podman run -d -p 80:8080 -p 443:8443 --name=quay -v $QUAY/config:/conf/stack:Z -v $QUAY/storage:/datastorage:Z {productrepo}/{quayimage}:{productminv}
运行以下
CURL
命令,以使用用户名、密码、电子邮件和访问令牌生成新用户:$ curl -X POST -k http://quay-server.example.com/api/v1/user/initialize --header 'Content-Type: application/json' --data '{ "username": "quayadmin", "password":"quaypass12345", "email": "quayadmin@example.com", "access_token": true}'
如果成功,该命令会返回带有用户名、电子邮件和加密密码的对象。例如:
{"access_token":"6B4QTRSTSD1HMIG915VPX7BMEZBVB9GPNY2FC2ED", "email":"quayadmin@example.com","encrypted_password":"1nZMLH57RIE5UGdL/yYpDOHLqiNCgimb6W9kfF8MjZ1xrfDpRyRs9NUnUuNuAitW","username":"quayadmin"} # gitleaks:allow
如果用户已在数据库中已存在,则会返回一个错误:
{"message":"Cannot initialize user in a non-empty database"}
如果您的密码至少为八个字符或包含空格,则会返回一个错误:
{"message":"Failed to initialize user: Invalid password, password must be at least 8 characters and contain no whitespace."}
输入以下命令登录到您的 Red Hat Quay 部署:
$ sudo podman login -u quayadmin -p quaypass12345 http://quay-server.example.com --tls-verify=false
输出示例
Login Succeeded!
2.10.9.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.9.3. 使用 API 创建机构
以下过程详细介绍了如何使用 API 创建 Red Hat Quay 组织。
前提条件
-
您已调用
/api/v1/user/initialize
API,并传递在用户名、密码和电子邮件地址。 - 您已通过指定返回的 OAuth 代码,称为 Red Hat Quay API 的其余部分。
流程
要创建机构,使用 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"
您可以输入以下命令来检索您创建的机构详情:
$ 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. 基本配置字段
字段 | 类型 | Description |
---|---|---|
REGISTRY_TITLE | 字符串 |
如果指定,则 registry 的长格式标题。在 Red Hat Quay 部署的前端中显示,例如在机构的登录页面中。不应超过 35 个字符。 |
REGISTRY_TITLE_SHORT | 字符串 |
如果指定,则 registry 的短格式标题。标题显示在您的机构各个页面中,例如,作为您所在机构的 教程 页面上的标题。 |
CONTACT_INFO | 字符串数组 | 如果指定,要显示在联系页面上的联系信息。如果只指定单一的联系信息,请联系页脚将直接链接。 |
[0] | 字符串 |
添加发送电子邮件的链接。 |
[1] | 字符串 |
添加访问 IRC chat room 的链接。 |
[2] | 字符串 |
添加一个链接来调用电话号码。+ |
[3] | 字符串 |
添加指向定义的 URL 的链接。 |
2.12. SSL 配置字段
字段 | 类型 | Description |
---|---|---|
PREFERRED_URL_SCHEME | 字符串 |
+ 用户在使用 TLS-terminating 负载均衡器、反向代理(如 Nginx)或使用 Quay 与自定义 SSL 证书一起使用时,必须将其 PREFERRED |
SERVER_HOSTNAME | 字符串 |
可以访问 Red Hat Quay 的 URL,不包括网络协议。 |
SSL_CIPHERS | 字符串数组 |
如果指定,nginx 定义要启用和禁用的 SSL 密码列表 |
SSL_PROTOCOLS | 字符串数组 |
如果指定了,nginx 被配置为启用列表中定义的 SSL 协议列表。从列表中删除 SSL 协议会禁用 Red Hat Quay 启动过程中的协议。 |
SESSION_COOKIE_SECURE | 布尔值 |
是否应在会话 Cookie 上设置 |
2.12.1. 配置 SSL
将证书文件和主密钥文件复制到您的配置目录中,确保它们分别命名为
ssl.cert
和ssl.key
:$ cp ~/ssl.cert $QUAY/config $ cp ~/ssl.key $QUAY/config $ cd $QUAY/config
编辑
config.yaml
文件并指定您希望 Quay 处理 TLS:config.yaml
... SERVER_HOSTNAME: quay-server.example.com ... PREFERRED_URL_SCHEME: https ...
-
停止
Quay
容器并重启 registry
2.13. 在 Red Hat Quay Container 中添加 TLS 证书
要将自定义 TLS 证书添加到 Red Hat Quay,在 Red Hat Quay 配置目录下创建一个名为 extra_ca_certs/
的新目录。将所需的任何特定于站点的 TLS 证书复制到这个新目录中。
2.13.1. 将 TLS 证书添加到 Red Hat Quay
查看要添加到容器的证书
$ cat storage.crt -----BEGIN CERTIFICATE----- MIIDTTCCAjWgAwIBAgIJAMVr9ngjJhzbMA0GCSqGSIb3DQEBCwUAMD0xCzAJBgNV [...] -----END CERTIFICATE-----
创建 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
使用
podman ps
获取Quay
容器的CONTAINER ID
:$ sudo podman ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS 5a3e82c4a75f <registry>/<repo>/quay:v3.8.15 "/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
使用该 ID 重启容器:
$ sudo podman restart 5a3e82c4a75f
检查复制到容器命名空间中的证书:
$ sudo podman exec -it 5a3e82c4a75f cat /etc/ssl/certs/storage.pem -----BEGIN CERTIFICATE----- MIIDTTCCAjWgAwIBAgIJAMVr9ngjJhzbMA0GCSqGSIb3DQEBCwUAMD0xCzAJBgNV
2.14. LDAP 配置字段
字段 | 类型 | Description |
---|---|---|
AUTHENTICATION_TYPE | 字符串 |
必须设为 |
FEATURE_TEAM_SYNCING | 布尔值 |
是否允许团队成员资格从身份验证引擎(LDAP 或 Keystone)中的后备组同步 |
FEATURE_NONSUPERUSER_TEAM_SYNCING_SETUP | 布尔值 |
如果启用,非超级用户可以使用 LDAP |
LDAP_ADMIN_DN | 字符串 | LDAP 身份验证的管理 DN。 |
LDAP_ADMIN_PASSWD | 字符串 | LDAP 身份验证的管理员密码。 |
LDAP_ALLOW_INSECURE_FALLBACK | 布尔值 | 是否允许 SSL 不安全的回退进行 LDAP 身份验证。 |
LDAP_BASE_DN | 字符串数组 | LDAP 身份验证的基本 DN。 |
LDAP_EMAIL_ATTR | 字符串 | LDAP 身份验证的电子邮件属性。 |
LDAP_UID_ATTR | 字符串 | LDAP 身份验证的 uid 属性。 |
LDAP_URI | 字符串 | LDAP URI。 |
LDAP_USER_FILTER | 字符串 | LDAP 身份验证的用户过滤器。 |
LDAP_USER_RDN | 字符串数组 | LDAP 身份验证的用户 RDN。 |
TEAM_RESYNC_STALE_TIME | 字符串 |
如果为团队启用了团队同步,如果需要,请检查成员资格和重新同步的频率 |
LDAP_SUPERUSER_FILTER | 字符串 |
使用此字段,管理员可以添加或删除超级用户,而无需更新 Red Hat Quay 配置文件并重启其部署。
此字段要求将 |
LDAP_RESTRICTED_USER_FILTER | 字符串 |
此字段要求将 |
2.14.1. LDAP 配置字段参考
使用以下引用,使用所需的配置字段更新 config.yaml
文件。
2.14.1.1. 基本 LDAP 用户配置
--- 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.14.1.2. LDAP 受限用户配置
--- AUTHENTICATION_TYPE: LDAP --- LDAP_ADMIN_DN: uid=<name>,ou=Users,o=<organization_id>,dc=<example_domain_component>,dc=com LDAP_ADMIN_PASSWD: ABC123 LDAP_ALLOW_INSECURE_FALLBACK: false LDAP_BASE_DN: - o=<organization_id> - dc=<example_domain_component> - dc=com LDAP_EMAIL_ATTR: mail LDAP_UID_ATTR: uid LDAP_URI: ldap://<example_url>.com LDAP_USER_FILTER: (memberof=cn=developers,ou=Users,o=<example_organization_unit>,dc=<example_domain_component>,dc=com) LDAP_RESTRICTED_USER_FILTER: (<filterField>=<value>) LDAP_USER_RDN: - ou=<example_organization_unit> - o=<organization_id> - dc=<example_domain_component> - dc=com ---
2.14.1.3. LDAP 超级用户配置参考
--- AUTHENTICATION_TYPE: LDAP --- LDAP_ADMIN_DN: uid=<name>,ou=Users,o=<organization_id>,dc=<example_domain_component>,dc=com LDAP_ADMIN_PASSWD: ABC123 LDAP_ALLOW_INSECURE_FALLBACK: false LDAP_BASE_DN: - o=<organization_id> - dc=<example_domain_component> - dc=com LDAP_EMAIL_ATTR: mail LDAP_UID_ATTR: uid LDAP_URI: ldap://<example_url>.com LDAP_USER_FILTER: (memberof=cn=developers,ou=Users,o=<example_organization_unit>,dc=<example_domain_component>,dc=com) LDAP_SUPERUSER_FILTER: (<filterField>=<value>) LDAP_USER_RDN: - ou=<example_organization_unit> - o=<organization_id> - dc=<example_domain_component> - dc=com
2.15. 镜像配置字段
字段 | 类型 | Description |
---|---|---|
FEATURE_REPO_MIRROR | 布尔值 |
启用或禁用存储库镜像 |
REPO_MIRROR_INTERVAL | Number |
检查存储库镜像候选者之间的秒数 |
REPO_MIRROR_SERVER_HOSTNAME | 字符串 |
替换 |
REPO_MIRROR_TLS_VERIFY | 布尔值 |
需要 HTTPS 并在镜像过程中验证 Quay registry 的证书。 |
REPO_MIRROR_ROLLBACK | 布尔值 |
当设置为
默认 : |
2.16. 安全扫描程序配置字段
字段 | 类型 | Description |
---|---|---|
FEATURE_SECURITY_SCANNER | 布尔值 |
启用或禁用安全扫描程序 |
FEATURE_SECURITY_NOTIFICATIONS | 布尔值 |
如果启用了安全扫描程序,请打开或关闭安全通知 |
SECURITY_SCANNER_V4_REINDEX_THRESHOLD | 字符串 |
此参数用于确定在重新索引之前具有之前失败或自上次索引后更改状态的清单前等待的最短时间(以秒为单位)。数据从 manifestsecuritystatus 表中的 |
SECURITY_SCANNER_V4_ENDPOINT | 字符串 |
V4 安全扫描程序的端点 |
SECURITY_SCANNER_V4_PSK | 字符串 | Clair 生成的预共享密钥(PSK) |
SECURITY_SCANNER_ENDPOINT | 字符串 |
V2 安全扫描程序的端点 |
SECURITY_SCANNER_INDEXING_INTERVAL | Number | 这个参数用于确定安全扫描程序中索引间隔之间的秒数。触发索引时,Red Hat Quay 将查询其数据库以获取 Clair 必须索引的清单。它们包括还没有索引的清单,以及之前失败的索引的清单。 默认:30 |
以下是重新索引的特殊用例:
当 Clair v4 对清单索引时,结果应该是确定的。例如,同一清单应该生成相同的索引报告。直到扫描程序被更改前,使用不同的扫描程序会生成与报告中返回的特定清单相关的不同信息。因此,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
字段 | 类型 | Description |
---|---|---|
FEATURE_GENERAL_OCI_SUPPORT | 布尔值 |
启用对 OCI 工件的支持 |
FEATURE_HELM_OCI_SUPPORT | 布尔值 |
启用对 Helm 工件的支持 |
从 Red Hat Quay 3.6 开始,FEAT URE_HELM_OCI_SUPPORT
已被弃用,并将在以后的 Red Hat Quay 版本中删除。在 Red Hat Quay 3.6 中,Helm 工件会被默认支持,包含在 FEATURE_GENERAL_OCI_SUPPORT
属性下。用户不再需要更新其 config.yaml 文件才能启用支持。
2.18. 操作日志配置字段
2.18.1. 操作日志存储配置
字段 | 类型 | Description |
---|---|---|
FEATURE_LOG_EXPORT | 布尔值 |
是否允许导出操作日志 |
LOGS_MODEL | 字符串 |
启用或禁用安全扫描程序 |
LOGS_MODEL_CONFIG | 对象 | 操作日志的日志模型配置 |
LOGS_MODEL_CONFIG [object]: Logs model configuration 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]:将 ssl 用于 Elasticsearch。默认值为 True
-
示例 :
True
-
示例 :
SECRET_KEY [string]: Elasticsearch 密码(或 AWS ES 的 IAM secret)
-
示例 :
some_secret_string
-
示例 :
aws_region [string]: Amazon Web 服务区域
-
示例 :
us-east-1
-
示例 :
端口 [number]:Elasticsearch 集群端点端口
-
示例 :
1234
-
示例 :
kinesis_stream_config [object]: AWS Kinesis Stream 配置
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 访问密钥
-
示例 :
some_access_key
-
示例 :
Retries [number]:在单个请求上进行最多尝试次数
-
示例 :
5
-
示例 :
read_timeout [number]: 从连接读取时超时前的秒数
-
示例 :
5
-
示例 :
max_pool_connections [number]:连接池中要保留的最大连接数
-
示例
:10
-
示例
aws_region [string]: AWS 区域
-
示例 :
us-east-1
-
示例 :
connect_timeout [number]:尝试进行连接时超时前的秒数
-
示例 :
5
-
示例 :
producer [string]:日志制作者(如果日志记录到 Elasticsearch)
- enum: kafka, elasticsearch, kinesis_stream
-
示例 :
kafka
kafka_config [object]: Kafka cluster configuration
topic [string]: Kafka 主题向发布日志条目
-
示例 :
日志条目
-
示例 :
- bootstrap_servers [array]: Kafka 代理列表从中引导客户端
max_block_seconds [number]:在
send ()
期间块的最大秒数,因为缓冲区已满或者元数据不可用-
示例
:10
-
示例
2.18.2. 操作日志轮转和归档配置
字段 | 类型 | Description |
---|---|---|
FEATURE_ACTION_LOG_ROTATION | 布尔值 |
启用日志轮转和归档会将 30 天以上的所有日志移到 storage |
ACTION_LOG_ARCHIVE_LOCATION | 字符串 |
如果启用了操作日志归档,则存储引擎放置存档数据 |
ACTION_LOG_ARCHIVE_PATH | 字符串 |
如果启用了操作日志归档,则存储中的路径放置存档数据 |
ACTION_LOG_ROTATION_THRESHOLD | 字符串 |
轮转日志前的时间间隔 |
2.19. 构建日志配置字段
字段 | 类型 | Description |
---|---|---|
FEATURE_READER_BUILD_LOGS | 布尔值 |
如果设置为 true,则构建日志可由对存储库具有读取访问权限的用户读取,而不仅仅是写入权限或 admin 访问权限。 |
LOG_ARCHIVE_LOCATION | 字符串 |
DISTRIBUTED_STORAGE_CONFIG 中定义的存储位置,放置存档的构建日志 |
LOG_ARCHIVE_PATH | 字符串 |
配置的存储引擎下的路径,将存档的构建日志放在 JSON 格式 |
2.20. Dockerfile 构建触发器字段
字段 | 类型 | Description |
---|---|---|
FEATURE_BUILD_SUPPORT | 布尔值 |
是否支持 Dockerfile 构建。 |
SUCCESSIVE_TRIGGER_FAILURE_DISABLE_THRESHOLD | Number |
如果没有 None,则构建触发器自动禁用前可能出现的连续失败数量 |
SUCCESSIVE_TRIGGER_INTERNAL_ERROR_DISABLE_THRESHOLD | Number |
如果没有 None,则构建触发器自动禁用前可能出现的连续内部错误数量 |
2.20.1. GitHub 构建触发器
字段 | 类型 | Description |
---|---|---|
FEATURE_GITHUB_BUILD | 布尔值 |
是否要支持 GitHub 构建触发器 |
|
|
|
GITHUB_TRIGGER_CONFIG | 对象 | 配置用于构建触发器的 GitHub (企业) |
.GITHUB_ENDPOINT | 字符串 |
GitHub (Enterprise) |
.API_ENDPOINT | 字符串 |
要使用的 GitHub (企业)API 的端点。必须覆盖 |
.CLIENT_ID | 字符串 | 此 Red Hat Quay 实例注册的客户端 ID;这不能与 GITHUB_LOGIN_CONFIG 共享。 |
.CLIENT_SECRET | 字符串 | 此 Red Hat Quay 实例的注册的客户端 secret。 |
2.20.2. Bitbucket 构建触发器
字段 | 类型 | Description |
---|---|---|
FEATURE_BITBUCKET_BUILD | 布尔值 |
是否要支持 Bitbucket 构建触发器 |
|
|
|
BITBUCKET_TRIGGER_CONFIG | 对象 | 为构建触发器使用 BitBucket 的配置 |
.CONSUMER_KEY | 字符串 | 此 Quay 实例的注册使用者密钥(客户端 ID) |
.CONSUMER_SECRET | 字符串 | 此 Quay 实例的注册使用者 secret (客户端 secret) |
2.20.3. GitLab 构建触发器
字段 | 类型 | Description |
---|---|---|
FEATURE_GITLAB_BUILD | 布尔值 |
是否要支持 GitLab 构建触发器 |
|
|
|
GITLAB_TRIGGER_CONFIG | 对象 | 将 Gitlab 用于构建触发器的配置 |
.GITLAB_ENDPOINT | 字符串 | 运行 Gitlab (企业版)的端点 |
.CLIENT_ID | 字符串 | 此 Quay 实例的注册的客户端 ID |
.CLIENT_SECRET | 字符串 | 此 Quay 实例的注册的客户端 secret |
2.21. OAuth 配置字段
字段 | 类型 | Description |
---|---|---|
DIRECT_OAUTH_CLIENTID_WHITELIST | 字符串数组 | 允许在不用户批准的情况下执行直接 OAuth 批准的 Quay 管理应用程序 的客户端 ID 列表。 |
2.21.1. GitHub OAuth 配置字段
字段 | 类型 | Description |
---|---|---|
FEATURE_GITHUB_LOGIN | 布尔值 |
是否支持 GitHub 登录 |
GITHUB_LOGIN_CONFIG | 对象 | 配置,以将 GitHub (Enterprise)用作外部登录提供程序。 |
.ALLOWED_ORGANIZATIONS | 字符串数组 | GitHub (企业)组织的名称将与 ORG_RESTRICT 选项列入白名单。 |
.API_ENDPOINT | 字符串 |
要使用的 GitHub (企业)API 的端点。必须覆盖 github.com |
.CLIENT_ID | 字符串 |
此 Red Hat Quay 实例注册的客户端 ID;不能与 |
.CLIENT_SECRET | 字符串 |
此 Red Hat Quay 实例注册的客户端 secret。 |
.GITHUB_ENDPOINT | 字符串 |
GitHub (Enterprise)的端点。 |
.ORG_RESTRICT | 布尔值 | 如果为 true,则只有机构白名单中的用户才可以使用这个提供程序登录。 |
2.21.2. Google OAuth 配置字段
字段 | 类型 | Description |
---|---|---|
FEATURE_GOOGLE_LOGIN | 布尔值 |
是否支持 Google 登录。 |
GOOGLE_LOGIN_CONFIG | 对象 | 使用 Google 进行外部身份验证的配置。 |
.CLIENT_ID | 字符串 |
此 Red Hat Quay 实例的注册的客户端 ID。 |
.CLIENT_SECRET | 字符串 |
此 Red Hat Quay 实例注册的客户端 secret。 |
2.22. OIDC 配置字段
字段 | 类型 | Description |
<string>_LOGIN_CONFIG | 字符串 |
包含 OIDC 配置设置的父键。通常,OIDC 供应商的名称,如 |
.CLIENT_ID | 字符串 |
此 Red Hat Quay 实例的注册的客户端 ID。 |
.CLIENT_SECRET | 字符串 |
此 Red Hat Quay 实例注册的客户端 secret。 |
.DEBUGLOG | 布尔值 | 是否启用调试。 |
.LOGIN_BINDING_FIELD | 字符串 | 当内部授权设置为 LDAP 时使用。Red Hat Quay 读取此参数,并尝试使用此用户名为用户搜索 LDAP 树。如果存在,它会自动创建到该 LDAP 帐户的链接。 |
.LOGIN_SCOPES | 对象 | 添加 Red Hat Quay 用来与 OIDC 供应商通信的其他范围。 |
.OIDC_ENDPOINT_CUSTOM_PARAMS | 字符串 |
支持 OIDC 端点上的自定义查询参数。支持以下端点: |
.OIDC_ISSUER | 字符串 |
允许用户定义要验证的签发者。例如,JWT 令牌容器是一个称为 的参数,它定义谁发出了令牌。 |
.OIDC_SERVER | 字符串 |
用于身份验证的 OIDC 服务器地址。 |
.PREFERRED_USERNAME_CLAIM_NAME | 字符串 | 将首选用户名设置为令牌中的参数。 |
.SERVICE_ICON | 字符串 | 更改登录屏幕上的图标。 |
.SERVICE_NAME | 字符串 |
正在验证的服务名称。 |
.VERIFIED_EMAIL_CLAIM_NAME | 字符串 | 用于验证用户电子邮件地址的声明名称。 |
2.22.1. OIDC 配置
以下示例显示了 OIDC 配置示例。
OIDC 配置示例
AZURE_LOGIN_CONFIG: CLIENT_ID: <client_id> CLIENT_SECRET: <client_secret> OIDC_SERVER: <oidc_server_address_> DEBUGGING: true SERVICE_NAME: Azure AD VERIFIED_EMAIL_CLAIM_NAME: <verified_email> OIDC_ENDPOINT_CUSTOM_PARAMS": "authorization_endpoint": "some": "param",
2.23. 嵌套存储库配置字段
在 Red Hat Quay 3.6 中,在 FEATURE_EXTENDED_REPOSITORY_NAMES
属性下添加了对嵌套存储库路径名称的支持。此可选配置默认添加到 config.yaml 中。启用允许在仓库名称中使用 /
。
FEATURE_EXTENDED_REPOSITORY_NAMES: true
字段 | 类型 | Description |
---|---|---|
FEATURE_EXTENDED_REPOSITORY_NAMES | 布尔值 |
启用对嵌套存储库的支持 |
2.24. 在 Quay 中添加其他 OCI 介质类型
Helm、cosign 和 ztsd 压缩方案工件默认内置在 Red Hat Quay 3.6 中。对于默认不支持的任何其他 OCI 介质类型,您可以使用以下格式将它们添加到 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.25. 邮件配置字段
字段 | 类型 | Description |
---|---|---|
FEATURE_MAILING | 布尔值 |
电子邮件是否已启用 |
MAIL_DEFAULT_SENDER | 字符串 |
如果指定了,当 Red Hat Quay 发送电子邮件时,电子邮件地址用作 |
MAIL_PASSWORD | 字符串 | 发送电子邮件时要使用的 SMTP 密码 |
MAIL_PORT | Number | 要使用的 SMTP 端口。如果没有指定,则默认为 587。 |
MAIL_SERVER | 字符串 |
用于发送电子邮件的 SMTP 服务器。只有在将 FEATURE_MAILING 设置为 true 时才需要。 |
MAIL_USERNAME | 字符串 | 发送电子邮件时要使用的 SMTP 用户名 |
MAIL_USE_TLS | 布尔值 |
如果指定,是否使用 TLS 发送电子邮件 |
2.26. 用户配置字段
字段 | 类型 | Description |
---|---|---|
FEATURE_SUPER_USERS | 布尔值 |
超级用户是否被支持 |
FEATURE_USER_CREATION | 布尔值 |
是否可以创建用户(通过非超级用户) |
FEATURE_USER_LAST_ACCESSED | 布尔值 |
是否记录用户最后一次访问的时间 |
FEATURE_USER_LOG_ACCESS | 布尔值 |
如果设置为 true,则用户有权访问其命名空间的审计日志 |
FEATURE_USER_METADATA | 布尔值 |
是否收集和支持用户元数据 |
FEATURE_USERNAME_CONFIRMATION | 布尔值 |
如果设置为 true,用户可以通过 OpenID Connect (OIDC)或非数据库内部身份验证供应商(如 LDAP)进行登录并修改其初始用户名。 |
FEATURE_USER_RENAME | 布尔值 |
如果设置为 true,用户可以重命名自己的命名空间 |
FEATURE_INVITE_ONLY_USER_CREATION | 布尔值 |
创建的用户都必须被其他用户邀请 |
FRESH_LOGIN_TIMEOUT | 字符串 |
新登录需要用户重新输入其密码的时间 |
USERFILES_LOCATION | 字符串 |
存储引擎的 ID,在其中放置用户上传的文件 |
USERFILES_PATH | 字符串 |
storage 下放置用户上传文件的路径 |
USER_RECOVERY_TOKEN_LIFETIME | 字符串 |
恢复用户帐户的令牌的时间长度为有效的 |
FEATURE_SUPERUSERS_FULL_ACCESS | 布尔值 | 授予超级用户,可在他们不拥有或有显式权限的命名空间中其他存储库读取、写入和删除内容。
Default: |
FEATURE_RESTRICTED_USERS | 布尔值 |
使用
Default: |
RESTRICTED_USERS_WHITELIST | 字符串 |
使用 |
GLOBAL_READONLY_SUPER_USERS | 字符串 | 设置后,无论它们是公共存储库,都授予用户此列表对所有存储库的读取权限。 |
2.26.1. 用户配置字段引用
使用以下引用,使用所需的配置字段更新 config.yaml
文件。
2.26.1.1. FEATURE_SUPERUSERS_FULL_ACCESS 配置参考
--- SUPER_USERS: - quayadmin FEATURE_SUPERUSERS_FULL_ACCESS: True ---
2.26.1.2. GLOBAL_READONLY_SUPER_USERS 配置参考
--- GLOBAL_READONLY_SUPER_USERS: - user1 ---
2.26.1.3. FEATURE_RESTRICTED_USERS 配置参考
--- AUTHENTICATION_TYPE: Database --- --- FEATURE_RESTRICTED_USERS: true ---
2.26.1.4. RESTRICTED_USERS_WHITELIST configuration reference
前提条件
-
在
config.yaml
文件中,FEATURE_RESTRICTED_USERS
被设置为true
。
--- AUTHENTICATION_TYPE: Database --- --- FEATURE_RESTRICTED_USERS: true RESTRICTED_USERS_WHITELIST: - user1 ---
设置此字段后,列入白名单用户可以创建机构,或者从存储库中读取或写入内容,即使 FEATURE_RESTRICTED_USERS
设置为 true
。其他用户(如 user2、
user3
和 user4)
仅限于创建机构、读取或写入内容
2.27. Recaptcha 配置字段
字段 | 类型 | Description |
---|---|---|
FEATURE_RECAPTCHA | 布尔值 |
用户登录和恢复是否需要 Recaptcha |
RECAPTCHA_SECRET_KEY | 字符串 | 如果启用了 recaptcha,则 Recaptcha 服务的 secret 密钥 |
RECAPTCHA_SITE_KEY | 字符串 | 如果启用了 recaptcha,则 Recaptcha 服务的站点密钥 |
2.28. ACI 配置字段
字段 | 类型 | Description |
---|---|---|
FEATURE_ACI_CONVERSION | 布尔值 |
是否启用转换为 ACI |
GPG2_PRIVATE_KEY_FILENAME | 字符串 | 用于解密 ACI 的私钥的文件名 |
GPG2_PRIVATE_KEY_NAME | 字符串 | 用于签署 ACI 的私钥名称 |
GPG2_PUBLIC_KEY_FILENAME | 字符串 | 用于加密 ACI 的公钥的文件名 |
2.29. JWT 配置字段
字段 | 类型 | Description |
---|---|---|
JWT_AUTH_ISSUER | 字符串 |
JWT 用户的端点 |
JWT_GETUSER_ENDPOINT | 字符串 |
JWT 用户的端点 |
JWT_QUERY_ENDPOINT | 字符串 |
JWT 查询的端点 |
JWT_VERIFY_ENDPOINT | 字符串 |
JWT 验证的端点 |
2.30. 应用令牌配置字段
字段 | 类型 | Description |
---|---|---|
FEATURE_APP_SPECIFIC_TOKENS | 布尔值 |
如果启用,用户可以创建供 Docker CLI 使用的令牌 |
APP_SPECIFIC_TOKEN_EXPIRATION | 字符串 |
外部应用程序令牌的过期。 |
EXPIRED_APP_SPECIFIC_TOKEN_GC | 字符串 |
外部应用程序令牌在垃圾回收前保留的时长 |
2.31. 其他配置字段
字段 | 类型 | Description |
---|---|---|
ALLOW_PULLS_WITHOUT_STRICT_LOGGING | 字符串 |
如果为 true,则即使无法编写拉取审计日志条目,也会成功。如果数据库处于只读状态,且需要拉取以便在那个时间内继续,则这非常有用。 |
AVATAR_KIND | 字符串 |
要显示的 avatars 的类型,可生成内联(本地)或 Gravatar (gravatar) |
BROWSER_API_CALLS_XHR_ONLY | 布尔值 |
如果启用,则只允许被标记为来自浏览器的、由 XHR 发出的 API 调用 |
DEFAULT_NAMESPACE_MAXIMUM_BUILD_COUNT | Number |
可以在命名空间中排队的默认最大构建数。 |
ENABLE_HEALTH_DEBUG_SECRET | 字符串 | 如果指定,可以为健康端点提供 secret,以便在不以超级用户身份时查看完整的调试信息 |
EXTERNAL_TLS_TERMINATION | 布尔值 |
如果支持 TLS,则设为 |
FRESH_LOGIN_TIMEOUT | 字符串 |
新登录需要用户重新输入密码的时间 |
HEALTH_CHECKER | 字符串 |
配置的健康检查 |
PROMETHEUS_NAMESPACE | 字符串 |
应用到所有公开的 Prometheus 指标的前缀 |
PUBLIC_NAMESPACES | 字符串数组 | 如果命名空间定义在公共命名空间列表中,则它将在 所有 用户的存储库列表页上显示,无论用户是否是命名空间的成员。通常,这供企业客户在配置一组"well-known"命名空间时使用。 |
REGISTRY_STATE | 字符串 |
registry 的状态 |
SEARCH_MAX_RESULT_PAGE_COUNT | Number |
用户在限制前可以分页搜索的最大页面数 |
SEARCH_RESULTS_PER_PAGE | Number |
搜索页面返回的结果数 |
V2_PAGINATION_SIZE | Number |
V2 registry API 中每个页面返回的结果数量 |
WEBHOOK_HOSTNAME_BLACKLIST | 字符串数组 | 在验证时禁止来自 webhook 的主机名集合,超过 localhost |
CREATE_PRIVATE_REPO_ON_PUSH | 布尔值 |
通过 push 创建新软件仓库是否被设置为私有可见 |
CREATE_NAMESPACE_ON_PUSH | 布尔值 |
新推送到不存在的机构时是否创建它 |
NON_RATE_LIMITED_NAMESPACES | 字符串数组 |
如果使用 |
布尔值 | 设置后,允许用户尝试 beta UI 环境。
Default: |
2.31.1. 其他配置字段引用
使用以下引用,使用所需的配置字段更新 config.yaml
文件。
2.31.1.1. v2 用户界面配置
启用 FEATURE_UI_V2
后,您可以在用户界面的当前版本和用户界面的新版本之间切换。
- 这个 UI 目前处于 beta 阶段,可能会有变化。在当前状态中,用户只能创建、查看和删除组织、存储库和镜像标签。
- 当在旧的 UI 中运行 Red Hat Quay 时,超时会话会在弹出窗口中再次输入其密码。使用新的 UI 时,用户会被返回到主页面,并需要返回到其用户名和密码凭证。这是一个已知问题,将在将来的新 UI 版本中解决。
- 在旧 UI 和新 UI 之间报告镜像清单大小的方式存在差异。在传统的 UI 中,镜像清单以兆字节为单位报告。在新 UI 中,Red Hat Quay 使用 megabyte (MB)的标准定义来报告镜像清单大小。
流程
在部署的
config.yaml
文件中,添加FEATURE_UI_V2
参数,并将其设置为true
,例如:--- FEATURE_TEAM_SYNCING: false FEATURE_UI_V2: true FEATURE_USER_CREATION: true ---
- 登录到您的 Red Hat Quay 部署。
在 Red Hat Quay 部署的导航窗格中,会给一个可以在 Current UI 和 New UI 之间切换的选项。点击切换按钮将它设置为新的 UI,然后点 Use Beta Environment,例如:
2.31.1.1.1. 在 Red Hat Quay 3.8 beta UI 中创建新机构
前提条件
- 您已将 Red Hat Quay 部署切换为使用 3.8 beta UI。
使用以下步骤使用 Red Hat Quay 3.8 beta UI 创建组织。
流程
- 在导航窗格中,单击 Organization。
- 单击 Create Organization。
-
输入 组织名称, 如
testorg
。 - 点 Create。
现在,您的示例机构应在 Organizations 页面中填充。
2.31.1.1.2. 使用 Red Hat Quay 3.8 beta UI 删除机构
使用以下步骤,使用 Red Hat Quay 3.8 beta UI 删除组织。
流程
-
在 Organizations 页面上,选择您要删除的组织的名称,如
testorg
。 - 点 More Actions 下拉菜单。
点 Delete。
注意在 Delete 页面中,有一个 Search 输入框。有了此框,用户可以搜索特定的组织,以确保它们被正确地安排删除。例如,如果用户正在删除 10 个机构,并且他们想确保已删除特定的组织,他们可以使用 搜索 输入框来确认机构已标记为删除。
- 通过在框中输入确认确认,确认 您要永久删除机构。
- 点 Delete。
删除后,您将返回到 Organizations 页面。
您可以通过选择多个机构,然后点 More Actions → Delete 来删除多个机构。
2.31.1.1.3. 使用 Red Hat Quay 3.8 beta UI 创建新软件仓库
使用以下步骤使用 Red Hat Quay 3.8 beta UI 创建存储库。
流程
- 单击导航窗格上的 Repositories。
- 单击 Create Repository。
-
选择一个命名空间,如 quayadmin,然后输入 Repository 名称,如
testrepo
。 - 点 Create。
现在,您的示例存储库应在 Repositories 页面填充。
2.31.1.1.4. 使用 Red Hat Quay 3.8 beta UI 删除软件仓库
前提条件
- 您已创建了存储库。
流程
-
在 Red Hat Quay 3.8 beta UI 的 Repositories 页面上,点您要删除的镜像的名称,如
quay/admin/busybox
。 - 点 More Actions 下拉菜单。
点 Delete。
注意如果需要,您可以点击 Make Public 或 Make Private。
- 在框中键入 确认,然后单击 Delete。
- 删除后,您将返回到 Repositories 页面。
2.31.1.1.5. 将镜像推送到 Red Hat Quay 3.8 beta UI
使用以下步骤将镜像推送到 Red Hat Quay 3.8 beta UI。
流程
从外部 registry 中拉取示例镜像:
$ podman pull busybox
标记镜像:
$ podman tag docker.io/library/busybox quay-server.example.com/quayadmin/busybox:test
将镜像推送到 Red Hat Quay registry:
$ podman push quay-server.example.com/quayadmin/busybox:test
- 导航到 Red Hat Quay UI 上的 Repositories 页面,并确保您的镜像已正确推送。
- 您可以选择镜像标签来检查安全详情,然后导航到 Security Report 页面。
2.31.1.1.6. 使用 Red Hat Quay 3.8 beta UI 删除镜像
使用以下步骤,使用 Red Hat Quay 3.8 beta UI 删除镜像。
前提条件
- 您已将镜像推送到 Red Hat Quay registry。
流程
-
在 Red Hat Quay 3.8 beta UI 的 Repositories 页面上,点您要删除的镜像的名称,如
quay/admin/busybox
。 - 点 More Actions 下拉菜单。
点 Delete。
注意如果需要,您可以点击 Make Public 或 Make Private。
- 在框中键入 确认,然后单击 Delete。
- 删除后,您将返回到 Repositories 页面。
2.31.1.1.7. 启用 Red Hat Quay legacy UI
在 Red Hat Quay 部署的导航窗格中,会给一个可以在 Current UI 和 New UI 之间切换的选项。点击切换按钮,来将它设为 Current UI。
2.32. 旧配置字段
有些字段已弃用或过时的:
字段 | 类型 | Description |
---|---|---|
FEATURE_BLACKLISTED_EMAILS | 布尔值 | 如果设置为 true,如果其电子邮件域列入黑名单,则不能创建新的用户帐户 |
BLACKLISTED_EMAIL_DOMAINS | 字符串数组 |
FEATURE_BLACKLISTED_EMAILS 设置为 true 时使用的电子邮件地址域列表 |
BLACKLIST_V2_SPEC | 字符串 |
Red Hat Quay 将响应 V2 的 Docker CLI 版本 不被支持 |
DOCUMENTATION_ROOT | 字符串 | 文档链接的根 URL |
SECURITY_SCANNER_V4_NAMESPACE_WHITELIST | 字符串 | 应该为其启用安全扫描程序的命名空间 |
FEATURE_RESTRICTED_V1_PUSH | 布尔值 |
如果设置为 true,则只有 V1_PUSH_WHITELIST 中列出的命名空间支持 V1 push |
V1_PUSH_WHITELIST | 字符串数组 | 如果 FEATURE_RESTRICTED_V1_PUSH 设置为 true,则支持 V1 push 的命名空间名称数组 |
2.33. 用户界面 v2 配置字段
字段 | 类型 | Description |
---|---|---|
FEATURE_UI_V2 | 布尔值 | 设置后,允许用户尝试 beta UI 环境。
Default: |
2.34. IPv6 配置字段
字段 | 类型 | Description |
---|---|---|
FEATURE_LISTEN_IP_VERSION | 字符串 | 启用 IPv4、IPv6 或双栈协议系列。必须正确设置此配置字段,否则 Red Hat Quay 无法启动。
默认:
其他配置: |
2.35. 品牌配置字段
字段 | 类型 | Description |
---|---|---|
BRANDING | 对象 | 在 Red Hat Quay UI 中自定义徽标和 URL。 |
.logo | 字符串 |
主徽标镜像 URL。
标头徽标默认为 205x30 PX。Web UI 的屏幕上的 Red Hat Quay 登录表格徽标默认为 356.5x39.7 PX。 |
.footer_img | 字符串 |
UI footer 的徽标。默认为 144x34 PX. |
.footer_url | 字符串 |
footer 镜像的链接。 |
2.35.1. Red Hat Quay 品牌配置示例
品牌 config.yaml 示例
BRANDING: logo: https://www.mend.io/wp-content/media/2020/03/5-tips_small.jpg footer_img: https://www.mend.io/wp-content/media/2020/03/5-tips_small.jpg footer_url: https://opensourceworld.org/
2.36. 会话超时配置字段
以下配置字段依赖于相同名称的 Flask API 配置字段。
字段 | 类型 | Description |
---|---|---|
PERMANENT_SESSION_LIFETIME | 整数 |
用于设置永久会话的过期日期
默认: |
2.36.1. 会话超时配置示例
以下 YAML 是启用会话生命周期时的建议配置。
不建议更改会话生命周期。在设置会话超时时,管理员应了解分配的时间。如果您设置的时间过早,它可能会中断您的工作流。
会话超时 YAML 配置
PERMANENT_SESSION_LIFETIME: 3000
第 3 章 环境变量
Red Hat Quay 支持用于动态配置的有限数量环境变量。
3.1. geo-replication
所有区域应当使用相同的配置,但存储后端除外,这些后端可以使用 QUAY_DISTRIBUTED_STORAGE_PREFERENCE
环境变量明确进行配置。
变量 | 类型 | Description |
---|---|---|
QUAY_DISTRIBUTED_STORAGE_PREFERENCE | 字符串 | 要使用的首选存储引擎(按 DISTRIBUTED_STORAGE_CONFIG)中的 ID。 |
3.2. 数据库连接池
Red Hat Quay 由多个不同进程组成,它们都在同一个容器中运行。这些进程中的很多进程与数据库交互。
如果启用,与数据库交互的每个进程都将包含一个连接池。这些每个进程的连接池配置为维护最多 20 个连接。在负载非常重时,可以为 Red Hat Quay 容器中的每个进程填充连接池。在某些部署和负载下,这可能需要分析以确保 Red Hat Quay 不会超过配置的数据库的最大连接数。
随着时间的推移,连接池将释放闲置连接。要立即发布所有连接,Red Hat Quay 需要重启。
通过将环境变量 DB_CONNECTION_POOLING
设置为 true
或 false
,可以切换数据库连接池。
变量 | 类型 | Description |
---|---|---|
DB_CONNECTION_POOLING | 布尔值 | 启用或禁用数据库连接池 |
如果启用了数据库连接池,则可以更改连接池的最大大小。这可以通过以下 config.yaml
选项完成:
config.yaml
... DB_CONNECTION_ARGS: max_connections: 10 ...
3.3. HTTP 连接数
可以使用环境变量指定同步 HTTP 连接的数量。它们可作为一个整体指定,也可以指定用于特定组件。每个进程的默认值为 50
个并行连接。
变量 | 类型 | Description |
---|---|---|
WORKER_CONNECTION_COUNT | Number |
同时 HTTP 连接 |
WORKER_CONNECTION_COUNT_REGISTRY | Number |
同步 registry 的 HTTP 连接 |
WORKER_CONNECTION_COUNT_WEB | Number |
Web UI 同时 HTTP 连接 |
WORKER_CONNECTION_COUNT_SECSCAN | Number |
Clair 的 HTTP 连接 |
3.4. worker 数量变量
变量 | 类型 | Description |
---|---|---|
WORKER_COUNT | Number | 进程数的通用覆盖 |
WORKER_COUNT_REGISTRY | Number |
指定处理 |
WORKER_COUNT_WEB | Number |
指定处理容器中的 UI/Web 请求的进程数量 |
WORKER_COUNT_SECSCAN | Number |
指定在容器中处理安全扫描(如 Clair)集成的进程数量 |
3.5. 调试变量
Red Hat Quay 上提供以下调试变量。
变量 | 类型 | Description |
---|---|---|
DEBUGLOG | 布尔值 | 是否启用或禁用调试日志。 |
用户_DEBUG |
整数. |
用于在明文中调试 LDAP 操作,包括密码。必须与 重要
设置 |
第 4 章 使用 config 工具在 OpenShift 上重新配置 Quay
4.1. 访问配置编辑器
在 QuayRegistry 屏幕的 Details 部分中,config 编辑器的端点可用,以及包含登录到配置编辑器的凭证的 secret 的链接:
4.1.1. 检索 config 编辑器凭证
点击 config editor secret 的链接:
在 Secret 详情屏幕的 Data 部分,点
Reveal 值
查看登录到 config 编辑器的凭证:
4.1.2. 登录到配置编辑器
浏览到 config 编辑器端点,然后输入用户名、通常是 quayconfig
以及相应的密码来访问配置工具:
4.1.3. 更改配置
在以下示例中,您可以通过更改已删除标签的默认过期周期来更新配置文件。
流程
- 在配置编辑器中,找到 Time Machine 部分。
在 Allowed expiration period 框中添加一个过期周期,例如
4w
:- 选择 Validate Configuration Changes 以确保更改有效。
按 Reconfigure Quay 来应用更改:
应用更改后,配置工具会通知您已向 Red Hat Quay 部署提交了更改:
+
使用配置工具 UI 重新配置 Red Hat Quay 可能会导致 registry 在应用更新的配置时短时间内不可用。
4.2. 在 UI 中监控重新配置
4.2.1. QuayRegistry 资源
在重新配置 Operator 后,您可以在 QuayRegistry 的特定实例的 YAML 选项卡中跟踪重新部署的过程,本例中为 example-registry
:
每次状态更改时,系统都会提示您重新加载数据以查看更新的版本。最后,Operator 将协调更改,且不会报告不健康的组件。
4.2.2. 事件
QuayRegistry 的 Events 选项卡显示与重新部署相关的一些事件:
对于受重新配置影响的命名空间中所有资源的流传输事件,可在 OpenShift 控制台中使用 Home → Events:
4.3. 在重新配置后访问更新的信息
4.3.1. 在 UI 中访问更新的配置工具凭证
使用 Red Hat Quay 3.7 时,通过 UI 重新配置 Quay 不再生成新的登录密码。现在,密码只生成一次,在协调 QuayRegistry
对象后仍保持相同。
4.3.2. 在 UI 中访问更新的 config.yaml
使用 config bundle 来访问更新的 config.yaml
文件。
- 在 QuayRegistry 详情屏幕上点击 Config Bundle Secret
-
在 Secret 详情屏幕的 Data 部分,点 Reveal 值查看
config.yaml
文件 检查是否已应用了更改。在这种情况下,
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 管理对 Kubernetes 的 Quay 及其依赖项的看法部署。这些依赖项被视为 组件,并通过 QuayRegistry
API 配置。
在 QuayRegistry
自定义资源中,spec.components
字段配置组件。每个组件包含两个字段: kind
- 组件的名称,并管理
- 布尔值组件生命周期是否由 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
自定义资源另有指定,否则 Red Hat Quay Operator 会针对以下受管组件使用默认值:
- Quay: 保存 Red Hat Quay 部署的覆盖。例如,环境变量和副本数。此组件在 Red Hat Quay 3.7 中是新的,无法设置为非受管(managed)状态。
- Postgres : 用于存储 registry 元数据,使用来自 Software Collections的 Postgres 10 版本
- Clair: 提供镜像漏洞扫描
- Redis: 存储实时构建器日志和 Red Hat Quay 指南。还包括垃圾回收所需的锁定机制。
-
HorizontalPodAutoscaler: 根据 memory/cpu 消耗调整
Quay
pod 的数量 -
objectstorage: 用于存储镜像层 blob,使用 Noobaa/RHOCS 提供的
ObjectBucketClaim
Kubernetes API - Route: 从 OpenShift Container Platform 外部为 Red Hat Quay registry 提供外部入口点
- mirror : 配置存储库镜像 worker 以支持可选存储库镜像
- Monitoring: 功能包括 Grafana 仪表板、访问单个指标和警报以通知频繁重启 Quay pod
- tls : 配置 Red Hat Quay 还是 OpenShift Container Platform 处理 SSL/TLS
- clairpostgres: 配置受管 Clair 数据库
Red Hat Quay Operator 处理 Red Hat Quay 使用受管组件所需的任何所需的配置和安装工作。如果 Red Hat Quay Operator 执行的 opinionated 部署不适用于您的环境,您可以为 Red Hat Quay Operator 提供 非受管
资源(overrides),如以下部分所述。
5.2. 将非受管组件用于依赖项
如果您有要与 Quay 搭配使用的现有组件,如 Postgres、Redis 或对象存储,则首先在 Quay 配置捆绑包(config.yaml
)中配置它们,然后引用 QuayRegistry
(作为 Kubernetes Secret
)中的捆绑包,同时指明哪些组件非受管。
Quay config 编辑器也可用于创建或修改现有的 config bundle,并简化更新 Kubernetes Secret
的过程,特别是多个更改。当通过配置编辑器更改 Quay 的配置并发送到 Operator 时,Quay 部署将会更新,以反映新的配置。
5.2.1. 使用现有的 Postgres 数据库
要求:
如果您使用外部管理的 PostgreSQL 数据库,您必须手动启用 pg_trgm 扩展才能成功部署。
使用必要的数据库字段创建配置文件
config.yaml
:config.yaml:
DB_URI: postgresql://test-quay-database:postgres@test-quay-database:5432/test-quay-database
使用配置文件创建 Secret:
$ kubectl create secret generic --from-file config.yaml=./config.yaml config-bundle-secret
创建一个 QuayRegistry YAML 文件
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。
5.2.2. NooBaa 非受管存储
- 在 Storage → Object Bucket Claims 的控制台中创建一个 NooBaa Object Bucket Claims。
- 检索 Object Bucket Claim Data details,包括 Access Key、Bucket Name、Endpoint (hostname)和 Secret Key。
使用 Object Bucket Claim 的信息,创建
config.yaml
配置文件:DISTRIBUTED_STORAGE_CONFIG: default: - RHOCSStorage - access_key: WmrXtSGk8B3nABCDEFGH bucket_name: my-noobaa-bucket-claim-8b844191-dc6c-444e-9ea4-87ece0abcdef hostname: s3.openshift-storage.svc.cluster.local is_secure: true port: "443" secret_key: X9P5SDGJtmSuHFCMSLMbdNCMfUABCDEFGH+C5QD storage_path: /datastorage/registry DISTRIBUTED_STORAGE_DEFAULT_LOCATIONS: [] DISTRIBUTED_STORAGE_PREFERENCE: - default
5.2.3. Pod 横向自动扩展
Pod 横向自动扩展(HPA)已添加到 Clair
、Quay
和 Mirror
pod 中,以便在负载激增过程中自动扩展。
由于 HPA 默认配置为 managed
,因此 Clair
、Quay
和 Mirror
Pod 的数量被设置为 2。这有助于避免在 Operator 更新或重新配置 Red Hat Quay 时或重新调度事件期间避免停机。
5.2.3.1. 禁用 Horizontal Pod Autoscaler
要禁用自动扩展或创建自己的 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 中。以下是如何:
从 base64 编码证书内容开始:
$ cat ca.crt -----BEGIN CERTIFICATE----- MIIDljCCAn6gAwIBAgIBATANBgkqhkiG9w0BAQsFADA5MRcwFQYDVQQKDA5MQUIu TElCQ09SRS5TTzEeMBwGA1UEAwwVQ2VydGlmaWNhdGUgQXV0aG9yaXR5MB4XDTE2 MDExMjA2NTkxMFoXDTM2MDExMjA2NTkxMFowOTEXMBUGA1UECgwOTEFCLkxJQkNP UkUuU08xHjAcBgNVBAMMFUNlcnRpZmljYXRlIEF1dGhvcml0eTCCASIwDQYJKoZI [...] -----END CERTIFICATE----- $ cat ca.crt | base64 -w 0 [...] c1psWGpqeGlPQmNEWkJPMjJ5d0pDemVnR2QNCnRsbW9JdEF4YnFSdVd3PT0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=
使用
kubectl
工具编辑 quay-enterprise-config-secret。$ kubectl --namespace quay-enterprise edit secret/quay-enterprise-config-secret
为证书添加一个条目,并在条目下粘贴完整的 base64 编码字符串:
custom-cert.crt: c1psWGpqeGlPQmNEWkJPMjJ5d0pDemVnR2QNCnRsbW9JdEF4YnFSdVd3PT0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=
-
最后,回收所有 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
的新机密,其包含启用 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.8 开始,FEAT URE_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. 卷大小覆盖
您可以指定为受管组件置备的存储资源大小。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 - kind: clairpostgres managed: true
clairpostgres
组件的卷大小无法被覆盖。这是一个已知问题,将在以后的 Red Hat Quay 版本中解决。(PROJQUAY-Json1)
第 6 章 Clair for Red Hat Quay
Clair v4 (Clair)是一个开源应用程序,它利用静态代码分析来解析镜像内容和报告影响内容的漏洞。Clair 与 Red Hat Quay 打包,并可用于独立和 Operator 部署。它可以在高度可扩展的配置中运行,其中组件可根据企业环境单独扩展。
6.1. Clair 配置概述
Clair 由一个结构化的 YAML 文件配置。每个 Clair 节点都需要指定其将在其中运行的模式,以及通过 CLI 标志或环境变量的配置文件的路径。例如:
$ clair -conf ./path/to/config.yaml -mode indexer
或者
$ clair -conf ./path/to/config.yaml -mode matcher
以上命令各自使用相同的配置文件启动两个 Clair 节点。一个运行索引功能,另一个则运行匹配的功能。
如果需要,可以指定 Go 标准库所遵守的环境变量,例如:
-
HTTP_PROXY
-
HTTPS_PROXY
-
SSL_CERT_DIR
如果您以 组合
模式运行 Clair,则必须在配置中提供索引器、匹配器和通知程序配置块。
6.1.1. Clair 配置参考
以下 YAML 显示了一个 Clair 配置示例:
http_listen_addr: "" introspection_addr: "" log_level: "" tls: {} indexer: connstring: "" scanlock_retry: 0 layer_scan_concurrency: 0 migrations: false scanner: {} airgap: false matcher: connstring: "" indexer_addr: "" migrations: false period: "" disable_updaters: false update_retention: 2 matchers: names: nil config: nil updaters: sets: nil config: nil notifier: connstring: "" migrations: false indexer_addr: "" matcher_addr: "" poll_interval: "" delivery_interval: "" disable_summary: false webhook: null amqp: null stomp: null auth: psk: nil trace: name: "" probability: null jaeger: agent: endpoint: "" collector: endpoint: "" username: null password: null service_name: "" tags: nil buffer_max: 0 metrics: name: "" prometheus: endpoint: null dogstatsd: url: ""
为了完整,以上 YAML 文件列出了每个键。使用此配置文件原样将导致一些选项不会正常设置默认值。
6.1.2. Clair 常规字段
下面的部分描述了 Clair 部署的一般配置字段:
字段 | Typhttp_listen_ae | Description |
---|---|---|
http_listen_addr | 字符串 | 配置公开 HTTP API 的位置。
默认: |
introspection_addr | 字符串 | 配置 Clair 的指标和健康端点公开的位置。 |
log_level | 字符串 | 设置日志级别。需要以下字符串之一: debug-color、debug、info、warn、error、fatal、panic |
tls | 字符串 | 包含提供 TLS/SSL 和 HTTP/2 的 HTTP API 配置的映射。 |
.cert | 字符串 | 要使用的 TLS 证书。必须是全链证书。 |
6.1.3. Clair 索引器配置字段
以下索引器配置字段可用于 Clair。
字段 | 类型 | Description |
---|---|---|
indexer | 对象 | 提供 Clair 索引器节点配置。 |
.airgap | 布尔值 | 为索引器和获取者禁用对互联网的 HTTP 访问。允许私有 IPv4 和 IPv6 地址。数据库连接不受影响。 |
.connstring | 字符串 | Postgres 连接字符串。接受格式为 URL 或 libpq 连接字符串。 |
.index_report_request_concurrency | 整数 |
速率限制索引报告创建请求的数量。把它设置为
如果超过并发状态,API 会返回 |
.scanlock_retry | 整数 | 代表秒的正整数。在清单扫描时并发索引器锁定,以避免冲突。这个值调整等待索引器轮询锁定的频率。 |
.layer_scan_concurrency | 整数 | 正整数限制并发层扫描的数量。Indexers 将同时匹配清单的层。这个值调整索引程序并行扫描的层数。 |
.migrations | 布尔值 | 索引器节点是否处理迁移到其数据库的迁移。 |
.scanner | 字符串 | 索引器配置。 扫描程序允许将配置选项传递给层扫描程序。如果设计这样做,扫描程序会将此配置传递给它。 |
.scanner.dist | 字符串 | 特定扫描程序名称和任意 YAML 作为值的映射。 |
.scanner.package | 字符串 | 特定扫描程序名称和任意 YAML 作为值的映射。 |
.scanner.repo | 字符串 | 特定扫描程序名称和任意 YAML 作为值的映射。 |
6.1.4. Clair 匹配程序配置字段
以下匹配器配置字段可用于 Clair。
与 matchers
配置字段不同。
字段 | 类型 | Description |
---|---|---|
matcher | 对象 | 提供 Clair 匹配器节点配置。 |
.cache_age | 字符串 | 控制用户应提示缓存响应的时间。 |
.connstring | 字符串 | Postgres 连接字符串。接受格式为 URL 或 libpq 连接字符串。 |
.max_conn_pool | 整数 | 限制数据库连接池大小。 Clair 允许自定义连接池大小。这个数字直接设定同时允许的活跃数据库连接的数量。 这个参数将在以后的发行版本中被忽略。用户应该通过连接字符串进行配置。 |
.indexer_addr | 字符串 |
匹配者联系索引器来创建
默认值为 |
.migrations | 布尔值 | 匹配器节点是否处理迁移到其数据库的迁移。 |
.period | 字符串 | 决定新安全公告的更新频率。
默认值为 |
.disable_updaters | 布尔值 | 是否运行后台更新。 |
.update_retention | 整数 | 设置在垃圾回收周期之间保留的更新操作数量。这应该根据数据库大小限制设置为安全 MAX 值。
默认值为
如果提供小于 |
6.1.5. Clair 匹配器配置字段
以下 matchers 配置字段可用于 Clair。
与 matcher
配置字段不同。
字段 | 类型 | Description |
---|---|---|
matchers | 字符串数组 |
为树内 |
.names | 字符串 |
一个字符串值列表,用于告知匹配者工厂关于启用的匹配者信息。如果值设为 |
.config | 字符串 | 为特定匹配程序提供配置。 由匹配者名称的键的映射,其中包含将提供给 matchers 工厂构造器的子对象。例如: config: python: ignore_vulns: - CVE-XYZ - CVE-ABC |
6.1.6. Clair updaters 配置字段
以下 updaters 配置字段可用于 Clair。
字段 | 类型 | Description |
---|---|---|
updaters | 对象 | 为匹配器的更新管理器提供配置。 |
.sets | 字符串 | 一个值列表,告知更新管理器要运行的更新程序。
如果值设为 如果留空,则运行零 updaters。 |
.config | 字符串 | 为特定更新器集提供配置。 由 updater 集名称的键的映射,其中包含将提供给 updater 设置构造器的子对象。例如: config: ubuntu: security_tracker_url: http://security.url ignore_distributions: - cosmic |
6.1.7. Clair 通知程序配置字段
以下通知程序配置字段可用于 Clair。
字段 | 类型 | Description |
---|---|---|
通知程序 | 对象 | 提供 Clair notifier 节点配置。 |
.connstring | 字符串 | postgres 连接字符串。接受格式为 URL 或 libpq 连接字符串。 |
.migrations | 布尔值 | 通知节点是否处理迁移到其数据库的迁移。 |
.indexer_addr | 字符串 | 通知程序联系索引器来创建或获取受漏洞影响的清单。需要此索引器的位置。 |
.matcher_addr | 字符串 | 通知程序联系一个匹配者来列出更新操作并获取 diffs。这个匹配器的位置是必需的。 |
.poll_interval | 字符串 | 通知程序查询匹配程序更新操作的频率。 |
.delivery_interval | 字符串 | 通知程序尝试发送创建的频率,或者以前失败的通知。 |
.disable_summary | 布尔值 | 控制是否应为每个清单将通知总结到一个。 |
.webhook | 对象 | 配置 webhook 交付通知程序。 |
.webhook.target | 字符串 | 发送 webhook 的 URL。 |
.webhook.callback | 字符串 | 检索通知的回调 URL。通知 ID 将附加到此 URL。 这通常是托管 Clair notifier 的位置。 |
.webhook.headers | 字符串 | 将标头名称与值列表关联的映射。 |
.amqp | 对象 | 配置用于 AMQP 交付的通知。 注意 Clair 本身不声明任何 AMQP 组件。所有尝试使用交换或队列的尝试都是被动的,将失败。代理管理员应提前设置交换和队列。 |
.amqp.direct | 布尔值 |
如果为 |
.amqp.rollup | 整数 |
当 |
.amqp.exchange | 对象 | 要连接的 AMQP 交换。 |
.amqp.exchange.name | 字符串 | 要连接的交换名称。 |
.amqp.exchange.type | 字符串 | 交换的类型。通常,以下之一: direct、fanout、topic、Header。 |
.amqp.exchange.durability | 布尔值 | 配置的队列是 durable。 |
.amqp.exchange.auto_delete | 布尔值 |
配置的队列是否使用 |
.amqp.routing_key | 字符串 | 每个通知的路由键的名称。 |
.amqp.callback | 字符串 |
如果 |
.amqp.uris | 字符串 | 要连接的一个或多个 AMQP 代理的列表,按优先级顺序进行。 |
.amqp.tls | 对象 | 配置到 AMQP 代理的 TLS/SSL 连接。 |
.amqp.tls.root_ca | 字符串 | 可以读取 root CA 的文件系统路径。 |
.amqp.tls.cert | 字符串 | 可以读取 TLS/SSL 证书的文件系统路径。 注意
Clair 还支持 |
.amqp.tls.key | 字符串 | 读取 TLS/SSL 私钥的文件系统路径。 |
.stomp | 对象 | 为 STOMP 发送配置通知程序。 |
.stomp.direct | 布尔值 |
如果为 |
.stomp.rollup | 整数 |
如果 |
.stomp.callback | 字符串 |
如果 |
.stomp.destination | 字符串 | 要发送通知的 STOMP 目的地。 |
.stomp.uris | 字符串 | 按顺序连接的一个或多个 STOMP 代理的列表。 |
.stomp.tls | 对象 | 配置到 STOMP 代理的 TLS/SSL 连接。 |
.stomp.tls.root_ca | 字符串 | 可以读取 root CA 的文件系统路径。 注意
Clair 还遵循 |
.stomp.tls.cert | 字符串 | 可以读取 TLS/SSL 证书的文件系统路径。 |
.stomp.tls.key | 字符串 | 读取 TLS/SSL 私钥的文件系统路径。 |
.stomp.user | 字符串 | 为 STOMP 代理配置登录详情。 |
.stomp.user.login | 字符串 | 要连接的 STOMP 登录。 |
.stomp.user.passcode | 字符串 | 要连接的 STOMP passcode。 |
6.1.8. Clair 授权配置字段
以下授权配置字段可用于 Clair。
字段 | 类型 | Description |
---|---|---|
auth | 对象 |
定义 Clair 的外部和服务内 JWT 身份验证。如果定义了多个 |
.psk | 字符串 | 定义预共享密钥身份验证。 |
.psk.key | 字符串 | 所有方签名和验证 JWT 之间分发的共享 base64 编码密钥。 |
.psk.iss | 字符串 | 用于验证的 JWT 签发者列表。空列表接受 JWT 声明中的任何签发者。 |
6.1.9. Clair trace 配置字段
以下 trace 配置字段可用于 Clair。
字段 | 类型 | Description |
---|---|---|
trace | 对象 | 定义基于 OpenTelemetry 的分布式追踪配置。 |
.name | 字符串 | 应用程序跟踪的名称将属于。 |
.probability | 整数 | 会发生 trace 的概率。 |
.jaeger | 对象 | 定义 Jaeger 追踪的值。 |
.jaeger.agent | 对象 | 定义配置发送到 Jaeger 代理的值。 |
.jaeger.agent.endpoint | 字符串 |
< |
.jaeger.collector | 对象 | 为配置发送到 Jaeger 收集器定义值。 |
.jaeger.collector.endpoint | 字符串 |
< |
.jaeger.collector.username | 字符串 | Jaeger 用户名。 |
.jaeger.collector.password | 字符串 | Jaeger 密码。 |
.jaeger.service_name | 字符串 | 在 Jaeger 中注册的服务名称。 |
.jaeger.tags | 字符串 | 用于提供额外的元数据的键值对。 |
.jaeger.buffer_max | 整数 | 在将内存缓冲到 Jaeger 后端前可缓冲的最大 span 数量,以存储和分析。 |
6.1.10. Clair 指标配置字段
以下指标配置字段可用于 Clair。
字段 | 类型 | Description |
---|---|---|
metrics | 对象 | 定义基于 OpenTelemetry 的分布式追踪配置。 |
.name | 字符串 | 使用的指标的名称。 |
.prometheus | 字符串 | 配置 Prometheus 指标导出器。 |
.prometheus.endpoint | 字符串 | 定义提供指标的路径。 |
第 7 章 使用 Container Security Operator 扫描 pod 镜像
Container Security Operator (CSO)是 OpenShift Container Platform 和其他 Kubernetes 平台上提供的 Clair 安全扫描程序的附加组件。使用 CSO 时,用户可以扫描与活跃 pod 关联的容器镜像以了解已知漏洞。
没有 Red Hat Quay 和 Clair,CSO 无法正常工作。
Container Security Operator (CSO)执行以下功能:
- 监视与指定或所有命名空间上的 pod 关联的容器。
- 查询容器来自漏洞信息的容器 registry (由镜像的 registry 支持镜像扫描,如带有 Clair 扫描的 Red Hat Quay registry)。
-
通过 Kubernetes API 中的
ImageManifestVuln
对象公开漏洞。
要查看在 Kubernetes 上安装 CSO 的说明,请从 Container Security OperatorHub.io 页面中选择 Install 按钮。
7.1. 在 OpenShift Container Platform 中下载并运行 Container Security Operator
使用以下步骤下载 Container Security Operator (CSO)。
在以下步骤中,CSO 安装在 marketplace-operators
命名空间中。这允许 CSO 在 OpenShift Container Platform 集群的所有命名空间中使用。
流程
- 在 OpenShift Container Platform 控制台页面中,选择 Operators → OperatorHub 并搜索 Container Security Operator。
- 选择 Container Security Operator,然后选择 Install 进入 Create Operator Subscription 页面。
- 检查设置(默认所有命名空间和自动批准策略),然后选择 Subscribe。容器安全性 会在 Installed Operators 屏幕中几分钟后出现。
可选:您可以在 CSO 中添加自定义证书。在本例中,在当前目录中创建一个名为
quay.crt
的证书。然后,运行以下命令将证书添加到 CSO 中:$ oc create secret generic container-security-operator-extra-certs --from-file=quay.crt -n openshift-operators
注意您必须重启 Operator pod 才能使新证书生效。
导航到 Home → Dashboards。Image Security 的链接会出现在 status 部分,其中列出了目前发现的漏洞数。选择链接来查看安全分类,如下图所示:
重要Container Security Operator 目前为红帽安全公告提供损坏的链接。例如,可能提供以下链接
:https://access.redhat.com/errata/RHSA-2023:1842%20https://access.redhat.com/security/cve/CVE-2023-23916。
URL 中的%20
代表空格字符,但目前将两个 URL 的组合成一个不完整的 URL,例如https://access.redhat.com/errata/RHSA-2023:1842
和https://access.redhat.com/security/cve/CVE-2023-23916。
作为临时解决方案,您可以将每个 URL 复制到浏览器中,以导航到正确的页面。这是一个已知问题,并将在以后的 Red Hat Quay 版本中解决。对于任何检测到的安全漏洞,您可以在此时进行两个操作之一:
选择到这个漏洞的链接。您会进入容器来自的容器 registry、Red Hat Quay 或其他 registry,您可以在其中查看有关该漏洞的信息。下图显示了从 Quay.io registry 中检测到的漏洞示例:
选择 namespaces 链接以进入 ImageManifestVuln 界面,您可以在其中查看所选镜像的名称以及该镜像正在运行的所有命名空间。下图显示了特定存在漏洞的镜像在两个命名空间中运行:
执行此步骤后,您会了解哪些镜像存在安全漏洞,您必须做什么才能修复这些漏洞,以及镜像在其中运行的每个命名空间。了解这一点,您可以执行以下操作:
- 运行镜像需要更正该漏洞的警报用户。
通过删除部署或启动镜像所在 pod 的对象来停止镜像运行。
注意如果删除 pod,可能需要几分钟时间才能在仪表板上重置漏洞。
7.2. 通过 CLI 查询镜像漏洞
您可以从命令行查询有关安全性的信息。要查询检测到的漏洞,请输入:
$ oc get vuln --all-namespaces NAMESPACE NAME AGE default sha256.ca90... 6m56s skynet sha256.ca90... 9m37s
要显示特定漏洞的详情,请识别其中一个漏洞,以及其命名空间和 describe
选项。本例演示了一个活跃的容器,其镜像包含存在漏洞的 RPM 软件包:
$ oc describe vuln --namespace mynamespace sha256.ac50e3752... Name: sha256.ac50e3752... Namespace: quay-enterprise ... Spec: Features: Name: nss-util Namespace Name: centos:7 Version: 3.44.0-3.el7 Versionformat: rpm Vulnerabilities: Description: Network Security Services (NSS) is a set of libraries...