DB_URI
(必需)
用于访问数据库的 URI,包括任何凭证
postgresql://quayuser:[email protected]:5432/quay
表 2.3. 数据库连接参数
字段
|
类型
|
描述
|
DB_CONNECTION_ARGS
数据库的可选连接参数,如超时和 SSL
.autorollback
是否使用线程连接
应该为
true
.threadlocals
是否使用自动重新连接
应该
ALWAYS
为
true
|
2.5.2.1. PostgreSQL SSL 连接参数
下面提供了 PostgreSQL SSL 配置示例:
DB_CONNECTION_ARGS:
sslmode: verify-ca
sslrootcert: /path/to/cacert
sslmode
选项确定是否存在与服务器协商安全 SSL TCP/IP 连接的安全 SSL TCP/IP 连接。有六个模式:
disable:
只尝试非 SSL 连接
Allow:
首先尝试非 SSL 连接 ; 如果失败,请尝试 SSL 连接
prefer:
(默认)首先尝试 SSL 连接;如果失败,请尝试非 SSL 连接
Requires:
仅尝试 SSL 连接。如果存在 root CA 文件,验证证书的方式与是否指定了 verify-ca 的方式相同
verify-ca:
仅尝试 SSL 连接,并验证服务器证书是否由可信证书颁发机构(CA)发出。
verify-full:
仅尝试 SSL 连接,验证服务器证书是否由受信任的 CA 发布,并且请求的服务器主机名与证书中的服务器主机名匹配
有关 PostgreSQL 的有效参数的更多信息,请参阅
https://www.postgresql.org/docs/current/libpq-connect.html
表 2.4. 存储配置特性
字段
|
类型
|
描述
|
FEATURE_REPO_MIRROR
如果设置为 true,启用存储库镜像
Default:
False
FEATURE_PROXY_STORAGE
是否通过 registry nginx
默认代理存储中的所有直接下载 URL:
Default:
False
FEATURE_STORAGE_REPLICATION
是否在存储引擎
Default:
False
间自动复制
|
您可以使用 DISTRIBUTED_STORAGE_CONFIG 字段指定所有存储引擎的列表,并使用 DISTRIBUTED_STORAGE_PREFERENCE 字段选择首选的存储引擎。
DISTRIBUTED_STORAGE_DEFAULT_LOCATIONS 字段用于控制其默认复制的位置。
表 2.5. 存储配置字段
字段
|
类型
|
描述
|
DISTRIBUTED_STORAGE_CONFIG
(必需)
配置 Red Hat Quay 中要使用的存储引擎。每个键代表存储引擎的唯一标识符。该值由代表(密钥、值)的元组组成一个描述存储引擎参数的对象。
默认值:
[]
DISTRIBUTED_STORAGE_DEFAULT_LOCATIONS
(必需)
字符串数组
默认情况下,存储引擎(根据 ID 在 DISTRIBUTED_STORAGE_CONFIG 中)的列表,这些镜像应完全复制到所有其他存储引擎。
DISTRIBUTED_STORAGE_PREFERENCE
(必需)
字符串数组
要使用的 DISTRIBUTED_STORAGE_CONFIG 的首选存储引擎(根据 ID)。首选引擎意味着,首先检查拉取和镜像推送到该镜像。
默认:
false
MAXIMUM_LAYER_SIZE
镜像层的最大允许大小
Pattern
:
^[0-9]+(G|M)$
Example
:
100G
Default:
20G
|
DISTRIBUTED_STORAGE_CONFIG:
default:
- LocalStorage
- storage_path: /datastorage/registry
DISTRIBUTED_STORAGE_DEFAULT_LOCATIONS: []
DISTRIBUTED_STORAGE_PREFERENCE:
- default
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
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
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
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
DISTRIBUTED_STORAGE_CONFIG:
azureStorage:
- AzureStorage
- azure_account_name: azure_account_name_here
azure_account_key: azure_account_key_here
azure_container: azure_container_here
sas_token: some/path/
storage_path: /datastorage/registry
DISTRIBUTED_STORAGE_DEFAULT_LOCATIONS: []
DISTRIBUTED_STORAGE_PREFERENCE:
- azureStorage
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.6. 构建日志配置
字段
|
类型
|
描述
|
BUILDLOGS_REDIS
(必需)
构建日志缓存的 redis 连接详情
.主机
(必需)
Redis 可以访问的主机名
示例:
quay-server.example.com
.port
(必需)
Number
Redis 可访问的端口
示例:
6379
.password
Redis 可访问的端口
示例:
strongpassword
|
表 2.7. 用户事件配置
字段
|
类型
|
描述
|
USER_EVENTS_REDIS
(必需)
用户事件处理的 redis 连接详情
.主机
(必需)
Redis 可以访问的主机名
示例:
quay-server.example.com
.port
(必需)
Number
Redis 可访问的端口
示例:
6379
.password
Redis 可访问的端口
示例:
strongpassword
|
BUILDLOGS_REDIS:
host: quay-server.example.com
password: strongpassword
port: 6379
USER_EVENTS_REDIS:
host: quay-server.example.com
password: strongpassword
port: 6379
表 2.8. 标签过期配置
字段
|
类型
|
描述
|
FEATURE_GARBAGE_COLLECTION
存储库垃圾回收是否已启用
Default:
True
- 4w
表 2.9. 基本配置
字段
|
类型
|
描述
|
REGISTRY_TITLE
如果指定,registry
Default:
Quay Enterprise
的长格式标题
REGISTRY_TITLE_SHORT
如果指定,则 registry 的简短格式标题。
默认:
Quay Enterprise
为定义的 URL
Pattern:
^http(s)?://(.)+$
Example:
https://twitter.com/quayio
|
表 2.10. SSL 配置
字段
|
类型
|
描述
|
PREFERRED_URL_SCHEME
http
之一,
https
Default:
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 启动过程中禁用协议。
示例:
['TLSv1','TLSv1.1','TLSv1.2']
SESSION_COOKIE_SECURE
在 session cookies
Default:
False
Recommendation 上是否应设置
secure
属性
:
对于所有使用 SSL 的安装,
Set to True
|
-
将证书文件和主密钥文件复制到您的配置目录中,确保它们分别命名为
ssl.cert
和
ssl.key
:
$ cp ~/ssl.cert $QUAY/config
$ cp ~/ssl.key $QUAY/config
$ cd $QUAY/config
-
编辑
config.yaml
文件,并指定希望 Quay 处理 TLS:
2.12. 在 Red Hat Quay Container 中添加 TLS 证书
要在 Red Hat Quay 中添加自定义 TLS 证书,请在 Red Hat Quay 配置目录下创建名为
extra_ca_certs/
的新目录。将任何特定于站点的 TLS 证书复制到此新目录。
2.12.1. 在 Red Hat Quay 中添加 TLS 证书
-
查看添加到容器中的证书
$ 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.6.8 "/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.11. LDAP 配置
字段
|
类型
|
描述
|
AUTHENTICATION_TYPE
(必需)
必须设置为
LDAP
FEATURE_TEAM_SYNCING
是否允许团队成员资格与身份验证引擎(LDAP 或 Keystone)中的后备组同步
Default:
true
FEATURE_NONSUPERUSER_TEAM_SYNCING_SETUP
如果启用,非 superusers 可以使用 LDAP
Default:
false
在团队上设置同步。
如果为团队启用了团队同步,如果需要的
Pattern:
^[0-9]+(w|m|d|h|s)$
Example:
2h
Default:
30m
|
表 2.12. 镜像配置
字段
|
类型
|
描述
|
FEATURE_REPO_MIRROR
启用或禁用存储库镜像
Default:
false
需要 HTTPS 并验证 Quay registry 在镜像过程中的证书。
默认:
false
|
表 2.13. 安全扫描程序配置
字段
|
类型
|
描述
|
FEATURE_SECURITY_SCANNER
启用或禁用安全扫描程序
Default:
false
FEATURE_SECURITY_NOTIFICATIONS
如果启用了安全扫描程序,请打开或关闭安全通知
Default:
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
安全扫描程序
Default:
30 中索引间隔的秒数:30
SECURITY_SCANNER_ENDPOINT
V2 安全扫描程序的端点
Pattern:
^http(s)?://(.)+$
Example:
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 数据库执行的数据库操作的模式,用户也可以更改 参数。
现在,在
FEATURE_GENERAL_OCI_SUPPORT
属性中支持 Helm 的支持。如果需要显式启用该功能,例如之前禁用了该功能,或者已经从未默认启用的版本升级,则需要在 Quay 配置中添加两个属性来启用 OCI 工件的使用:
FEATURE_GENERAL_OCI_SUPPORT: true
FEATURE_HELM_OCI_SUPPORT: true
表 2.14. OCI 和 Helm 配置
字段
|
类型
|
描述
|
FEATURE_GENERAL_OCI_SUPPORT
启用对 OCI 工件的支持
Default:
True
FEATURE_HELM_OCI_SUPPORT
启用对 Helm 工件的支持
Default:
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.15. 操作日志存储配置
字段
|
类型
|
描述
|
FEATURE_LOG_EXPORT
是否允许导出操作日志
Default:
True
启用或禁用安全扫描程序
值:
一个数据库 ,
transition_reads_ both_writes_es
,
elasticsearch
Default:
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 [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 时的 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.16. 操作日志轮转和归档配置
字段
|
类型
|
描述
|
FEATURE_ACTION_LOG_ROTATION
启用日志轮转和存档会将所有存在时间超过 30 天的日志移动到 storage
Default:
false
配置的存储引擎下的路径,以 JSON 形式放置存档构建日志
示例:
存档/构建日志
|
表 2.18. Dockerfile 构建支持
字段
|
类型
|
描述
|
FEATURE_BUILD_SUPPORT
是否支持 Dockerfile 构建。
Default:
False
SUCCESSIVE_TRIGGER_FAILURE_DISABLE_THRESHOLD
Number
如果没有 None,则构建触发器自动禁用前可能会出现连续失败数量
Default:
100
SUCCESSIVE_TRIGGER_INTERNAL_ERROR_DISABLE_THRESHOLD
Number
如果没有 None,则构建触发器自动禁用前可能会出现成功内部错误的数量
Default:
5
|
表 2.19. GitHub 构建触发器
字段
|
类型
|
描述
|
FEATURE_GITHUB_BUILD
是否支持 GitHub 构建触发器
Default:
False
允许在没有用户批准的情况下执行直接 OAuth 批准的
Quay 管理应用程序
的客户端 ID 列表。
|
表 2.23. GitHub OAuth 字段
字段
|
类型
|
描述
|
FEATURE_GITHUB_LOGIN
GitHub 登录是否被支持
**Default:
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(企业)
示例
的端点
:https://github.com/
.ORG_RESTRICT
如果为 true,则只有机构白名单中的用户才可以使用此供应商登录。
|
表 2.24. Google OAuth 字段
字段
|
类型
|
描述
|
FEATURE_GOOGLE_LOGIN
Google 登录是否被支持
**Default:
False
GOOGLE_LOGIN_CONFIG
使用 Google 进行外部身份验证的配置
.CLIENT_ID
(必需)
此 Red Hat Quay 实例注册的客户端 ID
示例:
0e8dbe15c4c7630b6780
.CLIENT_SECRET
(必需)
此 Red Hat Quay 实例注册的客户端 secret
示例:
e4a58ddd3d7408b7aec109e85564a0d153d3e846
|
在 Red Hat Quay 3.6 中,在
FEATURE_EXTENDED_REPOSITORY_NAMES
属性下添加了对嵌套存储库路径名称的支持。用户必须手动将这个可选配置添加到 config.yaml 中才能启用支持。启用允许在仓库名称中使用
/
。
FEATURE_EXTENDED_REPOSITORY_NAMES: true
表 2.25. OCI 和嵌套存储库配置
字段
|
类型
|
描述
|
FEATURE_EXTENDED_REPOSITORY_NAMES
启用对嵌套软件仓库的支持
Default:
False
|
2.22. 向 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.26. 邮件字段
字段
|
类型
|
描述
|
FEATURE_MAILING
是否启用电子邮件
Default:
False
如果指定,在 Red Hat Quay 发送电子邮件时,用作 的电子邮件地址。
如果没有,则默认为
[email protected]
示例:
[email protected]
MAIL_PASSWORD
发送电子邮件时要使用的 SMTP 密码
MAIL_PORT
Number
要使用的 SMTP 端口。如果没有指定,则默认为 587。
MAIL_SERVER
用于发送电子邮件的 SMTP 服务器。只有将 FEATURE_MAILING 设置为 true 时才需要。
示例:
smtp.example.com
MAIL_USERNAME
发送电子邮件时要使用的 SMTP 用户名
MAIL_USE_TLS
如果指定,是否使用 TLS 发送电子邮件
Default:
True
|
表 2.27. 用户配置
字段
|
类型
|
描述
|
FEATURE_SUPER_USERS
是否支持超级用户
Default:
true
FEATURE_USER_CREATION
用户可创建(非用户)
Default:
true
FEATURE_USER_LAST_ACCESSED
是否最后一次记录用户被访问的时间
Default:
true
FEATURE_USER_LOG_ACCESS
如果设置为 true,则用户可以访问其命名空间
Default:
false
的审计日志
FEATURE_USER_METADATA
是否收集并支持用户元数据
Default:
false
FEATURE_USERNAME_CONFIRMATION
如果设置为 true,用户可以确认其生成的用户名
Default:
true
FEATURE_USER_RENAME
如果设置为 true,用户可以重命名自己的命名空间
Default:
false
FEATURE_INVITE_ONLY_USER_CREATION
创建用户是否必须被其他用户
Default:
false
邀请
恢复用户帐户的令牌的时间长度为
Pattern
:
^[0-9]+(w|m|d|h|s)$
Default
:
30m
|
表 2.28. Recaptcha 字段
字段
|
类型
|
描述
|
FEATURE_RECAPTCHA
用户登录和恢复
Default:
False 是否需要 Recaptcha
JWT 验证的端点
Pattern
:
^http(s)?://(.)+$
Example
:
http://192.168.99.101:6060
|
表 2.31. 应用程序令牌配置
字段
|
类型
|
描述
|
FEATURE_APP_SPECIFIC_TOKENS
如果启用,用户可以创建令牌供 Docker CLI
Default:
True
如果在公共命名空间中定义了命名空间,它将出现在
所有用户
的存储库列表页面上,无论用户是否为命名空间的成员。通常,这由在配置一组 "well-known" 命名空间的企业客户使用。
REGISTRY_STATE
registry 的状态
值:
normal
或
read-only
SEARCH_MAX_RESULT_PAGE_COUNT
Number
在被限制
Default:
10 之前,用户可以搜索的最大页面数。
SEARCH_RESULTS_PER_PAGE
Number
根据搜索页面返回的结果数
Default:
10
V1_PUSH_WHITELIST
String 数组
如果 FEATURE_RESTRICTED_V1_PUSH 设置为 true,则支持 V1 推送的命名空间名称的数组。
V2_PAGINATION_SIZE
Number
V2 registry API 中每个页面返回的结果数
WEBHOOK_HOSTNAME_BLACKLIST
String 数组
在除 localhost 外验证时,从 Webhook 中禁止的主机名集合
CREATE_PRIVATE_REPO_ON_PUSH
通过推送创建的新软件仓库是否设置为专用可见性
Default:
True
CREATE_NAMESPACE_ON_PUSH
新推送到不存在的机构是否会创建
Default:
False
NON_RATE_LIMITED_NAMESPACES
String 数组
如果使用
FEATURE_RATE_LIMITS
启用速率限制,您可以为需要无限访问的特定命名空间覆盖它。
|
有些字段已弃用或过时的:
表 2.33. 旧字段
字段
|
类型
|
描述
|
FEATURE_BLACKLISTED_EMAILS
如果设为 true,则在电子邮件域列入黑名单时无法创建新的用户帐户
BLACKLISTED_EMAIL_DOMAINS
String 数组
FEATURE_BLACKLISTED_EMAILS 被设置为 true
示例:"
example.com",
"example.com", "example.org"
BLACKLIST_V2_SPEC
Red Hat Quay 将响应 V2 的 Docker CLI 版本为
不受支持的
示例
: <
1.8.0
Default:
<
;1.6.0
DOCUMENTATION_ROOT
文档链接的根 URL
SECURITY_SCANNER_V4_NAMESPACE_WHITELIST
应该启用安全扫描程序的命名空间
|
Red Hat Quay 支持有限的用于动态配置的环境变量。
所有区域应使用完全相同的配置,但存储后端除外,可以使用
QUAY_DISTRIBUTED_STORAGE_PREFERENCE
环境变量进行显式配置。
表 3.1. 异地复制配置
变量
|
类型
|
描述
|
QUAY_DISTRIBUTED_STORAGE_PREFERENCE
首选存储引擎(根据 DISTRIBUTED_STORAGE_CONFIG)使用。
|
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 选项完成:
可以使用环境变量同时指定 HTTP 连接的数量。这些可指定为整个组件,也可以指定为特定的组件。每个进程的默认值为 50 个并行连接。
表 3.3. HTTP 连接计数配置
变量
|
类型
|
描述
|
WORKER_CONNECTION_COUNT
Number
同时 HTTP 连接
Default:
50
WORKER_CONNECTION_COUNT_REGISTRY
Number
同步 registry 的 HTTP 连接
Default:
WORKER_CONNECTION_COUNT
WORKER_CONNECTION_COUNT_WEB
Number
Web UI 同时 HTTP 连接
Default:
WORKER_CONNECTION_COUNT
WORKER_CONNECTION_COUNT_SECSCAN
Number
Clair
Default:
WORKER_CONNECTION_COUNT 同步 HTTP 连接
|
表 3.4. worker 计数变量
变量
|
类型
|
描述
|
WORKER_COUNT
Number
进程数的通用覆盖
WORKER_COUNT_REGISTRY
Number
指定在
Quay
容器中处理 Registry 请求的进程数量
值:
在 8 到 64 之间的 Integer
WORKER_COUNT_WEB
Number
指定容器
值
(在 2 到 32 之间)处理 UI/Web 请求的进程数
WORKER_COUNT_SECSCAN
Number
指定处理安全扫描扫描(如 Clair)集成的进程数量
值:
2 到 4 之间的 Integer
|
第 4 章 使用配置工具在 OpenShift 中重新配置 Quay
在 QuayRegistry 屏幕的 Details 部分中,可以使用 config 编辑器的端点,以及指向含有登录配置编辑器凭证的 secret 的链接:
-
点击配置编辑器 secret 的链接:
使用配置工具 UI 配置 Red Hat Quay 可能会导致 registry 短时间不可用,同时应用更新的配置。
重新配置 Operator 后,您可以跟踪特定 QuayRegistry 实例的 YAML 选项卡中的重新部署进度,本例中为
example-registry
:
在 QuayRegistry 详情屏幕上点 Config Bundle Secret
在 Secret Details 屏幕的 Data 部分,点 Reveal values 查看
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:
...
Quay 是一个强大的容器 registry 平台,因此有多个依赖项。它们包括数据库、对象存储、Redis 等。Quay Operator 管理对 Quay 的意见部署及其对 Kubernetes 的依赖项。这些依赖项被视为
组件
,并通过
QuayRegistry
API 配置。
在
QuayRegistry
自定义资源中,
spec.components
字段配置组件。每个组件包含两个字段:
kind
- 组件的名称,
managed
- 布尔值(无论组件生命周期是由 Operator 处理)。默认情况下(显示此字段),所有组件都将在协调后自动填充,以获得可见性:
spec:
components:
- managed: true
kind: clair
- managed: true
kind: postgres
- managed: true
kind: objectstorage
- managed: true
kind: redis
- managed: true
kind: horizontalpodautoscaler
- managed: true
kind: route
- managed: true
kind: mirror
- managed: true
kind: monitoring
- managed: true
kind: tls
除非
QuayRegistry
自定义资源指定其他,否则 Operator 将对以下受管组件使用默认值:
Postgres
:
要存储 registry 元数据,请使用
Software Collections
中的 Postgres 10 版本
Redis:
处理 Quay 构建器协调和一些内部日志记录
objectstorage:
用于存储镜像层 blob,使用 Noobaa/RHOCS 提供的
ObjectBucketClaim
Kubernetes API
Clair:
提供镜像漏洞策略扫描
HorizontalPodAutoscaler:
根据 memory/cpu 消耗调整 Quay pod 的数量
mirror:
配置存储库镜像 worker(支持可选存储库镜像)
Route:
从外部 OpenShift 提供指向 Quay registry 的外部入口点
monitoring:
功能包括 Grafana 仪表板、对单个指标的访问以及通知的提示以经常重启 Quay Pod
TLS:
配置 Red Hat Quay 或 OpenShift 是否处理 TLS
Operator 将处理 Red Hat Quay 使用受管组件所需的配置和安装工作。如果 Quay Operator 对环境的意见进行了建议,您可以为 Operator 提供
非受管
资源(overrides)的 Operator,如以下部分所述。
如果您有现有的组件,如 Postgres、Redis 或对象存储,则您要首先在 Quay 配置捆绑包(
config.yaml
)中配置它们,然后在
QuayRegistry
中引用捆绑包(作为 Kubernetes
Secret
),同时表示哪些组件是非受管状态。
Quay 配置编辑器也可用于创建或修改现有配置捆绑包,并简化更新 Kubernetes
Secret
的过程,特别是用于多项更改。当通过配置编辑器更改 Quay 配置并发送到 Operator 时,将更新 Quay 部署来反映新配置。
5.2.1. 使用现有的 Postgres 数据库
-
使用所需的数据库字段创建配置文件
config.yaml
:
-
创建 QuayRegistry YAML 文件
quayregistry.yaml
,将
postgres
组件标记为非受管状态,并引用所创建的 Secret:
-
在 Storage → Object Bucket Claims 的控制台中创建一个 NooBaa Object Bucket Claim。
检索 Object Bucket Claim Data 的详情,包括 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. 禁用 Horizontal Pod Autoscaler
HorizontalPodAutoscalers
已添加到 Clair、Quay 和 Mirror pod 中,以便在负载高峰期间自动扩展。
因为 HPA 默认配置为
受管
,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 中。以下是如何:
首先使用 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
的新 secret,其包含启用 OCI 支持的必要属性。
从 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
该配置工具有 4 个端点,可用于构建、验证、捆绑和部署配置。config-tool API 记录在
https://github.com/quay/config-tool/blob/master/pkg/lib/editor/API.md
中。在本小节中,您将了解如何使用 API 检索当前配置以及如何验证您所做的任何更改。
如果您首次运行配置工具,且没有现有配置,您可以检索默认配置。以 config 模式启动容器:
$ sudo podman run --rm -it --name quay_config \
-p 8080:8080 \
registry.redhat.io/quay/quay-rhel8:v3.6.8 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,
}
如果您已经配置并部署了 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.6.8 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",
}
您可以通过将其发送到
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
返回的值是一个包含配置中发现的错误的数组。如果配置有效,则返回空数组
[]
。
您可以通过在
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"
]
|
|
|
|
|
|