保护 Red Hat Quay
保护 Red Hat Quay
摘要
前言 复制链接链接已复制到粘贴板!
Red Hat Quay 可让管理员通过使用传输层安全(TLS)、证书管理和加密技术保护其存储库的通信和可信访问。正确配置 SSL/TLS 并实施自定义证书,可帮助保护数据、安全外部连接,以及保持 Red Hat Quay 和您选择的集成服务之间的信任。
涵盖了以下主题:
- 为独立 Red Hat Quay 部署配置自定义 SSL/TLS 证书
- 在 OpenShift Container Platform 中为 Red Hat Quay 配置自定义 SSL/TLS 证书
- 在 Red Hat Quay 容器中添加额外的证书颁发机构
- 在 OpenShift Container Platform 上的 Red Hat Quay 中添加额外的证书颁发机构
第 1 章 为 Red Hat Quay 配置 SSL 和 TLS 复制链接链接已复制到粘贴板!
安全套接字层(SSL)协议最初使由 Netscape 公司开发的,以提供一种在互联网上进行安全通信的机制。因此,该协议被互联网工程任务组(IETF)采纳,并重命名为传输层安全(TLS)。
TLS(传输层安全)是用来保护网络通信的加密协议。在通过配置首选密钥交换协议、身份验证方法和加密算法来强化系统安全设置时,需要记住支持的客户端的范围越广,产生的安全性就越低。相反,严格的安全设置会导致与客户端的兼容性受限,这可能导致某些用户被锁定在系统之外。请确保以最严格的可用配置为目标,并且仅在出于兼容性原因需要时才放宽配置。
Red Hat Quay 可以配置为使用 SSL/TLS 证书来确保客户端和 Red Hat Quay 服务器之间的安全通信。此配置涉及使用有效的 SSL/TLS 证书,这些证书可以从可信证书颁发机构(CA)获得,或生成为内部使用自签名证书。
1.1. 创建证书颁发机构 复制链接链接已复制到粘贴板!
使用以下步骤设置您自己的 CA,并使用它来为您的域发布服务器证书。这可让您使用自己的证书保护与 SSL/TLS 的通信。
流程
输入以下命令生成 root CA 密钥:
$ openssl genrsa -out rootCA.key 2048输入以下命令生成 root CA 证书:
$ openssl req -x509 -new -nodes -key rootCA.key -sha256 -days 1024 -out rootCA.pem输入要合并到证书请求中的信息,包括服务器主机名,例如:
Country Name (2 letter code) [XX]:IE State or Province Name (full name) []:GALWAY Locality Name (eg, city) [Default City]:GALWAY Organization Name (eg, company) [Default Company Ltd]:QUAY Organizational Unit Name (eg, section) []:DOCS Common Name (eg, your name or your server's hostname) []:quay-server.example.com输入以下命令生成服务器密钥:
$ openssl genrsa -out ssl.key 2048输入以下命令生成签名请求:
$ openssl req -new -key ssl.key -out ssl.csr输入要合并到证书请求中的信息,包括服务器主机名,例如:
Country Name (2 letter code) [XX]:IE State or Province Name (full name) []:GALWAY Locality Name (eg, city) [Default City]:GALWAY Organization Name (eg, company) [Default Company Ltd]:QUAY Organizational Unit Name (eg, section) []:DOCS Common Name (eg, your name or your server's hostname) []:quay-server.example.com Email Address []:创建配置文件
openssl.cnf,指定服务器主机名,例如:openssl.cnf文件示例[req] req_extensions = v3_req distinguished_name = req_distinguished_name [req_distinguished_name] [ v3_req ] basicConstraints = CA:FALSE keyUsage = nonRepudiation, digitalSignature, keyEncipherment subjectAltName = @alt_names [alt_names] DNS.1 = <quay-server.example.com> IP.1 = 192.168.1.112使用配置文件生成证书
ssl.cert:$ openssl x509 -req -in ssl.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out ssl.cert -days 356 -extensions v3_req -extfile openssl.cnf输入以下命令确认您的创建证书和密钥:
$ ls /path/to/certificates输出示例
rootCA.key ssl-bundle.cert ssl.key custom-ssl-config-bundle-secret.yaml rootCA.pem ssl.cert openssl.cnf rootCA.srl ssl.csr
1.2. 为独立 Red Hat Quay 部署配置 SSL/TLS 复制链接链接已复制到粘贴板!
对于独立的 Red Hat Quay 部署,必须使用命令行界面和手动更新 config.yaml 文件来配置 SSL/TLS 证书。
1.2.1. 使用命令行界面配置自定义 SSL/TLS 证书 复制链接链接已复制到粘贴板!
必须使用命令行界面(CLI)配置 SSL/TLS,并手动更新 config.yaml 文件。
先决条件
- 您已创建了证书颁发机构并签署证书。
流程
将证书文件和主密钥文件复制到您的配置目录中,确保它们分别命名为
ssl.cert和ssl.key:cp ~/ssl.cert ~/ssl.key /path/to/configuration_directory输入以下命令进入配置目录:
$ cd /path/to/configuration_directory编辑
config.yaml文件并指定您希望 Red Hat Quay 处理 SSL/TLS:config.yaml文件示例# ... SERVER_HOSTNAME: <quay-server.example.com> ... PREFERRED_URL_SCHEME: https # ...可选:输入以下命令将
rootCA.pem文件的内容添加到ssl.cert文件的末尾:$ cat rootCA.pem >> ssl.cert输入以下命令停止
Quay容器:$ sudo podman stop <quay_container_name>输入以下命令重启 registry:
$ 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.15.4
1.2.2. 配置 Podman 以信任证书颁发机构 复制链接链接已复制到粘贴板!
Podman 使用两个路径来查找证书颁发机构(CA)文件: /etc/containers/certs.d/ 和 /etc/docker/certs.d/。使用以下步骤将 Podman 配置为信任 CA。
流程
将 root CA 文件复制到
/etc/containers/certs.d/或/etc/docker/certs.d/之一。使用服务器主机名决定的确切路径,并将文件命名为ca.crt:$ sudo cp rootCA.pem /etc/containers/certs.d/quay-server.example.com/ca.crt在登录到 Red Hat Quay registry 时,验证您不再需要使用 the
-tls-verify=false选项:$ sudo podman login quay-server.example.com输出示例
Login Succeeded!
1.2.3. 将系统配置为信任证书颁发机构 复制链接链接已复制到粘贴板!
使用以下步骤将您的系统配置为信任证书颁发机构。
流程
输入以下命令将
rootCA.pem文件复制到合并的系统范围信任存储中:$ sudo cp rootCA.pem /etc/pki/ca-trust/source/anchors/输入以下命令更新系统范围的信任存储配置:
$ sudo update-ca-trust extract可选。您可以使用
trust list命令来确保Quay服务器已配置:$ trust list | grep quay label: quay-server.example.com现在,当您通过
https://quay-server.example.com浏览到 registry 时,锁定图标会显示连接安全:
要从系统范围的信任中删除
rootCA.pem文件,请删除该文件并更新配置:$ sudo rm /etc/pki/ca-trust/source/anchors/rootCA.pem$ sudo update-ca-trust extract$ trust list | grep quay
如需更多信息,请参阅 使用共享系统证书的 RHEL 9 文档。
当在 OpenShift Container Platform 上部署 Red Hat Quay 时,QuayRegistry 自定义资源定义(CRD)的 tls 组件会被默认设置为 managed。因此,OpenShift Container Platform 的证书颁发机构用于创建 HTTPS 端点并轮转 SSL/TLS 证书。
您可以在 OpenShift Container Platform 上的 Red Hat Quay 初始部署前或之后配置自定义 SSL/TLS 证书。这个过程涉及在 QuayRegistry YAML 文件中创建或更新 configBundleSecret 资源,以集成您的自定义证书,并将 tls 组件设置为 unmanaged。
为 Red Hat Quay 配置自定义 SSL/TLS 证书时,管理员负责证书轮转。
以下流程允许您应用自定义 SSL/TLS 证书,以确保安全通信,并满足 OpenShift Container Platform 部署中的 Red Hat Quay 的特定安全要求。这些步骤假设您已创建了证书颁发机构(CA)捆绑包或 ssl.key,以及 ssl.cert。然后,流程演示了如何将这些文件集成到 OpenShift Container Platform 部署的 Red Hat Quay 中,以确保 registry 使用指定的安全设置,并符合机构的 SSL/TLS 策略。
-
以下流程用于使用 HTTPS 证书保护 Red Hat Quay。请注意,这与管理证书颁发机构信任捆绑包不同。CA Trust Bundles 由
Quay容器中的系统进程用来根据可信 CA 验证证书,并确保 LDAP、存储后端和 OIDC 连接等服务是可信的。 -
如果要将证书添加到现有部署中,则必须在新配置捆绑包 secret 中包含现有
config.yaml文件,即使您没有进行任何配置更改。
1.3.1. 创建自定义 SSL/TLS configBundleSecret 资源 复制链接链接已复制到粘贴板!
在创建自定义 SSL/TLS 证书后,您可以在 OpenShift Container Platform 上为 Red Hat Quay 创建自定义 configBundleSecret 资源,允许您上传 ssl.cert 和 ssl.key 文件。
先决条件
-
您有 base64 将原始配置捆绑包解码为一个
config.yaml文件。如需更多信息 ,请参阅下载现有配置。 - 您已生成了自定义 SSL 证书和密钥。
流程
创建新的 YAML 文件,如
custom-ssl-config-bundle-secret.yaml:$ touch custom-ssl-config-bundle-secret.yaml创建
custom-ssl-config-bundle-secret资源。运行以下命令来创建资源:
$ oc -n <namespace> create secret generic custom-ssl-config-bundle-secret \ --from-file=config.yaml=</path/to/config.yaml> \1 --from-file=ssl.cert=</path/to/ssl.cert> \2 --from-file=extra_ca_cert_<name-of-certificate>.crt=ca-certificate-bundle.crt \3 --from-file=ssl.key=</path/to/ssl.key> \4 --dry-run=client -o yaml > custom-ssl-config-bundle-secret.yaml- 1
- 其中
<config.yaml> 是您的base64 解码的config.yaml文件。 - 2
- 其中
<ssl.cert> 是您的ssl.cert文件。 - 3
- 可选。
--from-file=extra_ca_cert_<name-of-certificate>.crt=ca-certificate-bundle.crt字段允许 Red Hat Quay 识别自定义证书颁发机构(CA)文件。如果您使用使用自定义 CA 的 LDAP、OIDC 或者其它服务,您必须通过extra_ca_cert路径添加它们。如需更多信息,请参阅"在 OpenShift Container Platform 上向 Red Hat Quay 添加其他证书颁发机构"。 - 4
- 其中
<ssl.key> 是您的ssl.key文件。
可选。您可以输入以下命令来检查
custom-ssl-config-bundle-secret.yaml文件的内容:$ cat custom-ssl-config-bundle-secret.yaml输出示例
apiVersion: v1 data: config.yaml: QUxMT1dfUFVMTFNfV0lUSE9VVF9TVFJJQ1RfTE9HR0lORzogZmFsc2UKQVVUSEVOVElDQVRJT05fVFlQRTogRGF0YWJhc2UKREVGQVVMVF9UQUdfRVhQSVJBVElPTjogMncKRElTVFJJQlVURURfU1R... ssl.cert: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUVYakNDQTBhZ0F3SUJBZ0lVTUFBRk1YVWlWVHNoMGxNTWI3U1l0eFV5eTJjd0RRWUpLb1pJaHZjTkFRRUwKQlFBd2dZZ3hDekFKQmdOVkJBWVR... extra_ca_cert_<name-of-certificate>:LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUVYakNDQTBhZ0F3SUJBZ0lVTUFBRk1YVWlWVHNoMGxNTWI3U1l0eFV5eTJjd0RRWUpLb1pJaHZjTkFRRUwKQlFBd2dZZ3hDe... ssl.key: LS0tLS1CRUdJTiBQUklWQVRFIEtFWS0tLS0tCk1JSUV2UUlCQURBTkJna3Foa2lHOXcwQkFRRUZBQVNDQktjd2dnU2pBZ0VBQW9JQkFRQ2c0VWxZOVV1SVJPY1oKcFhpZk9MVEdqaS9neUxQMlpiMXQ... kind: Secret metadata: creationTimestamp: null name: custom-ssl-config-bundle-secret namespace: <namespace>输入以下命令来创建
configBundleSecret资源:$ oc create -n <namespace> -f custom-ssl-config-bundle-secret.yaml输出示例
secret/custom-ssl-config-bundle-secret created输入以下命令更新
QuayRegistryYAML 文件来引用custom-ssl-config-bundle-secret对象:$ oc patch quayregistry <registry_name> -n <namespace> --type=merge -p '{"spec":{"configBundleSecret":"custom-ssl-config-bundle-secret"}}'输出示例
quayregistry.quay.redhat.com/example-registry patched输入以下命令将
QuayRegistryYAML 的tls组件设置为False:$ oc patch quayregistry <registry_name> -n <namespace> --type=merge -p '{"spec":{"components":[{"kind":"tls","managed":false}]}}'输出示例
quayregistry.quay.redhat.com/example-registry patched输入以下命令来确保
QuayRegistryYAML 文件已更新为使用自定义 SSLconfigBundleSecret资源,并且您的 和tls资源已设置为False:$ oc get quayregistry <registry_name> -n <namespace> -o yaml输出示例
# ... configBundleSecret: custom-ssl-config-bundle-secret # ... spec: components: - kind: tls managed: false # ...
验证
输入以下命令确认到服务器和端口的 TLS 连接:
$ openssl s_client -connect <quay-server.example.com>:443输出示例
# ... SSL-Session: Protocol : TLSv1.3 Cipher : TLS_AES_256_GCM_SHA384 Session-ID: 0E995850DC3A8EB1A838E2FF06CE56DBA81BD8443E7FA05895FBD6FBDE9FE737 Session-ID-ctx: Resumption PSK: 1EA68F33C65A0F0FA2655BF9C1FE906152C6E3FEEE3AEB6B1B99BA7C41F06077989352C58E07CD2FBDC363FA8A542975 PSK identity: None PSK identity hint: None SRP username: None TLS session ticket lifetime hint: 7200 (seconds) # ...
第 2 章 Red Hat Quay 和 SQL 之间的基于证书的身份验证 复制链接链接已复制到粘贴板!
Red Hat Quay 管理员可以通过为客户端侧验证提供自己的 SSL/TLS 证书,在 Red Hat Quay 和 SQL (PostgreSQL 和 GCP CloudSQL)之间配置基于证书的身份验证。这提供了增强的安全性,并可更轻松地对 Red Hat Quay registry 的自动化。
以下小节演示了如何在 Red Hat Quay 和 PostgreSQL 和 Red Hat Quay 和 CloudSQL 之间配置基于证书的身份验证。
2.1. 使用 SQL 配置基于证书的身份验证 复制链接链接已复制到粘贴板!
以下流程演示了如何使用安全客户端证书将 Red Hat Quay 与 SQL 数据库连接。此方法确保通过证书信任验证功能和验证,因为它会根据可信证书颁发机构(CA)验证 SQL 服务器的证书。这提高了 Red Hat Quay 和 SQL 服务器之间的连接安全性,同时简化部署的自动化。虽然示例使用 Google Cloud Platform 的 CloudSQL,但该流程也适用于 PostgreSQL 和其他支持的数据库。
先决条件
-
您生成了自定义证书颁发机构(CA)和 SSL/TLS 证书和密钥,可以使用
PEM格式,用于生成带有 CloudSQL 数据库的 SSL 连接。如需更多信息,请参阅 Red Hat Quay 的 SSL 和 TLS。 -
您有
base64 将原始配置捆绑包解码为一个config.yaml文件。如需更多信息 ,请参阅下载现有配置。 -
您使用外部管理的 PostgreSQL 或 CloudSQL 数据库。如需更多信息,请参阅使用带有
DB_URI变量集的和现有的 PostgreSQL 数据库。 - 为 SSL/TLS 配置外部管理的 PostgreSQL 或 CloudSQL 数据库。
-
QuayRegistryCRD 的postgres组件被设置为managed: false,您的 CloudSQL 数据库使用DB_URI配置变量设置。以下流程使用postgresql://<cloudsql_username>:<dbpassword>@<database_host>:<port>/<database_name>。
流程
在为您的 CloudSQL 数据库生成 CA 和 SSL/TLS 证书和密钥后,并确保它们采用
.pem格式,测试到 CloudSQL 服务器的 SSL 连接:输入以下命令启动到 CloudSQL 服务器的连接:
$ psql "sslmode=verify-ca sslrootcert=<ssl_server_certificate_authority>.pem sslcert=<ssl_client_certificate>.pem sslkey=<ssl_client_key>.pem hostaddr=<database_host> port=<5432> user=<cloudsql_username> dbname=<cloudsql_database_name>"
在 Red Hat Quay 目录中,运行以下命令来创建一个新的 YAML 文件,如
quay-config-bundle.yaml:$ touch quay-config-bundle.yaml输入以下命令来创建
postgresql-client-certs资源:$ oc -n <quay_namespace> create secret generic postgresql-client-certs \ --from-file config.yaml=<path/to/config.yaml>1 --from-file=tls.crt=<path/to/ssl_client_certificate.pem>2 --from-file=tls.key=<path/to/ssl_client_key.pem>3 --from-file=ca.crt=<path/to/ssl_server_certificate.pem>4 编辑
'quay-config-bundle.yaml文件,使其包含以下数据库连接设置:重要-
DB_CONNECTION_ARGS变量中包含的信息,如sslmode,sslrootcert,sslcert, 和sslkey必须与 附加到DB_URI变量的信息匹配。不匹配可能会导致连接失败。 -
您不能指定自定义文件名或路径。
sslrootcert、sslcert和sslkey的证书文件路径是硬编码的默认值,并挂载到 Kubernetes secret 中的Quaypod 中。您必须遵循以下命名约定,否则将导致连接失败。
DB_CONNECTION_ARGS: autorollback: true sslmode: verify-ca1 sslrootcert: /.postgresql/root.crt2 sslcert: /.postgresql/postgresql.crt3 sslkey: /.postgresql/postgresql.key4 threadlocals: true5 DB_URI: postgresql://<dbusername>:<dbpassword>@<database_host>:<port>/<database_name>?sslmode=verify-full&sslrootcert=/.postgresql/root.crt&sslcert=/.postgresql/postgresql.crt&sslkey=/.postgresql/postgresql.key6 - 1
- 使用
verify-ca可确保数据库连接使用 SSL/TLS,并根据可信 CA 验证服务器证书。这可与可信 CA 和自签名 CA 证书一起使用。但是,此模式不会验证服务器的主机名。如需完整的主机名和证书验证,请使用verify-full。有关可用选项的更多信息,请参阅 PostgreSQL SSL/TLS 连接参数。 - 2
root.crt文件包含用来验证与 CloudSQL 数据库的 SSL/TLS 连接的根证书。此文件挂载到来自 Kubernetes secret 的Quaypod 中。- 3
postgresql.crt文件包含用于验证与 CloudSQL 数据库连接的客户端证书。此文件挂载到来自 Kubernetes secret 的Quaypod 中。- 4
postgresql.key文件包含与客户端证书关联的私钥。此文件挂载到来自 Kubernetes secret 的Quaypod 中。- 5
- 为连接启用自动滚动。
- 6
- 访问 CloudSQL 数据库的 URI。必须使用
sslmode类型、root.crt、postgresql.crt和postgresql.key文件附加。DB_URI中包含的 SSL/TLS 信息必须与DB_CONNECTION_ARGS中提供的信息匹配。如果使用 CloudSQL,则必须在此变量中包含数据库用户名和密码。
-
输入以下命令来创建
configBundleSecret资源:$ oc create -n <namespace> -f quay-config-bundle.yaml输出示例
secret/quay-config-bundle created输入以下命令更新
QuayRegistryYAML 文件来引用quay-config-bundle对象:$ oc patch quayregistry <registry_name> -n <namespace> --type=merge -p '{"spec":{"configBundleSecret":"quay-config-bundle"}}'输出示例
quayregistry.quay.redhat.com/example-registry patched输入以下命令来确保
QuayRegistryYAML 文件已更新为使用额外的 CA 证书configBundleSecret资源:$ oc get quayregistry <registry_name> -n <namespace> -o yaml输出示例
# ... configBundleSecret: quay-config-bundle # ...
第 3 章 为 Red Hat Quay 添加额外的证书颁发机构 复制链接链接已复制到粘贴板!
Red Hat Quay 使用证书颁发机构(CA)验证与外部服务的 SSL/TLS 连接,如 ODIC 供应商、LDAP 供应商、存储供应商等。
以下小节提供有关根据您的部署类型将额外 CA 上传到 Red Hat Quay 的信息。
3.1. 在 Red Hat Quay 容器中添加额外的证书颁发机构 复制链接链接已复制到粘贴板!
extra_ca_certs 目录是可以存储其他证书颁发机构(CA)的目录,以扩展可信证书集合。Red Hat Quay 使用这些证书来验证与外部服务的 SSL/TLS 连接。在部署 Red Hat Quay 时,您可以将所需的 CA 放在这个目录中,以确保到 LDAP、OIDC 和存储系统等服务的连接会被正确保护并验证。
对于独立 Red Hat Quay 部署,您必须创建这个目录,并将额外的 CA 证书复制到那个目录中。
先决条件
- 有用于所需服务的 CA。
流程
输入以下命令查看要添加到容器中的证书:
$ cat storage.crt输出示例
-----BEGIN CERTIFICATE----- MIIDTTCCAjWgAwIBAgIJAMVr9ngjJhzbMA0GCSqGSIb3DQEBCwUAMD0xCzAJBgNV... -----END CERTIFICATE-----输入以下命令,在 Red Hat Quay 目录的
/config文件夹中创建extra_ca_certs:$ mkdir -p /path/to/quay_config_folder/extra_ca_certs将 CA 文件复制到
extra_ca_certs文件夹。例如:$ cp storage.crt /path/to/quay_config_folder/extra_ca_certs/输入以下命令,确保
storage.crt文件存在于extra_ca_certs文件夹中:$ tree /path/to/quay_config_folder/extra_ca_certs输出示例
/path/to/quay_config_folder/extra_ca_certs ├── storage.crt----输入以下命令来获取
Quay的CONTAINER ID:$ podman ps输出示例
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS 5a3e82c4a75f <registry>/<repo>/quay:{productminv} "/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输入以下命令重启容器
$ podman restart 5a3e82c4a75f运行以下命令确认证书已复制到容器命名空间中:
$ podman exec -it 5a3e82c4a75f cat /etc/ssl/certs/storage.pem输出示例
-----BEGIN CERTIFICATE----- MIIDTTCCAjWgAwIBAgIJAMVr9ngjJhzbMA0GCSqGSIb3DQEBCwUAMD0xCzAJBgNV... -----END CERTIFICATE-----
在 OpenShift Container Platform 上的 Red Hat Quay 中,使用 extra_ca_certs 配置字段将额外证书颁发机构(CA)填充到 CA 目录中,然后将 CA 添加到系统信任捆绑包中。Red Hat Quay 使用这些证书来验证与 LDAP、OIDC 和存储系统等外部服务的 SSL/TLS 连接。
在 OpenShift Container Platform 上部署或重新部署 Red Hat Quay 时,您可以将一个或多个 CA 添加到 CA 目录中,以确保外部服务被正确保护并验证。在 OpenShift Container Platform 部署的 Red Hat Quay 中,您必须手动将 extra_ca_certs 配置字段添加到 config.yaml 文件中,并将 config.yaml 重新上传到 OpenShift Container Platform。
以下流程演示了如何下载现有配置文件,将额外的 CA 添加到 OpenShift Container Platform 部署的 Red Hat Quay 中,然后重新上传配置文件。
3.2.1. 使用 CLI 修改配置文件 复制链接链接已复制到粘贴板!
要修改 Red Hat Quay registry 的 config.yaml 文件并启用新功能,您可以使用 CLI 从 configBundleSecret 下载现有配置。进行更改后,您可以重新上传 configBundleSecret 资源来应用更改。
修改 configBundleSecret 资源存储的 config.yaml 文件是一个多步骤,需要 base64 解码现有配置文件,然后上传更改。在大多数情况下,使用 OpenShift Container Platform Web 控制台对 config.yaml 文件进行更改更为简单。
先决条件
- 以具有 admin 权限的用户身份登录 OpenShift Container Platform 集群。
流程
输入以下命令描述
QuayRegistry资源:$ oc describe quayregistry -n <quay_namespace># ... Config Bundle Secret: example-registry-config-bundle-v123x # ...输入以下命令来获取 secret 数据:
$ oc get secret -n <quay_namespace> <example-registry-config-bundle-v123x> -o jsonpath='{.data}'{ "config.yaml": "RkVBVFVSRV9VU0 ... MDAwMAo=" }通过传递 >>
config.yaml 标志,将数据解码到当前目录中。例如:$ echo 'RkVBVFVSRV9VU0 ... MDAwMAo=' | base64 --decode >> config.yaml-
对
config.yaml文件进行所需的更改,然后将该文件保存为config.yaml。 输入以下命令创建新的
configBundleSecretYAML。$ touch <new_configBundleSecret_name>.yaml输入以下命令来创建新的
configBundleSecret资源,传递config.yaml文件':$ oc -n <namespace> create secret generic <secret_name> \ --from-file=config.yaml=</path/to/config.yaml> \ --dry-run=client -o yaml > <new_configBundleSecret_name>.yaml其中:
- </path/to/config.yaml>
-
指定您的 base64 解码的
config.yaml文件。
输入以下命令来创建
configBundleSecret资源:$ oc create -n <namespace> -f <new_configBundleSecret_name>.yamlsecret/config-bundle created输入以下命令更新
QuayRegistryYAML 文件来引用新的configBundleSecret对象:$ oc patch quayregistry <registry_name> -n <namespace> --type=merge -p '{"spec":{"configBundleSecret":"<new_configBundleSecret_name>"}}'quayregistry.quay.redhat.com/example-registry patched
验证
验证
QuayRegistryCR 已使用新的configBundleSecret更新:$ oc describe quayregistry -n <quay_namespace># ... Config Bundle Secret: <new_configBundleSecret_name> # ...修补 registry 后,Red Hat Quay Operator 会自动协调更改。
以下示例演示了如何在 OpenShift Container Platform 部署的 Red Hat Quay 中添加额外的证书颁发机构。
先决条件
-
您有 base64 将原始配置捆绑包解码为一个
config.yaml文件。如需更多信息 ,请参阅下载现有配置。 - 您有一个证书颁发机构(CA)文件或文件。
流程
创建新的 YAML 文件,如
extra-ca-certificate-config-bundle-secret.yaml:$ touch extra-ca-certificate-config-bundle-secret.yaml创建
extra-ca-certificate-config-bundle-secret资源。运行以下命令来创建资源:
$ oc -n <namespace> create secret generic extra-ca-certificate-config-bundle-secret \ --from-file=config.yaml=</path/to/config.yaml> \1 --from-file=extra_ca_cert_<name-of-certificate-one>=<path/to/certificate_one> \2 --from-file=extra_ca_cert_<name-of-certificate-two>=<path/to/certificate_two> \3 --from-file=extra_ca_cert_<name-of-certificate-three>=<path/to/certificate_three> \4 --dry-run=client -o yaml > extra-ca-certificate-config-bundle-secret.yaml
可选。您可以输入以下命令来检查
extra-ca-certificate-config-bundle-secret.yaml文件的内容:$ cat extra-ca-certificate-config-bundle-secret.yaml输出示例
apiVersion: v1 data: config.yaml: QUxMT1dfUFVMTFNfV0lUSE9VVF9TVFJJQ1RfTE9HR0lORzogZmFsc2UKQVVUSEVOVElDQVRJT05fVFlQRTogRGF0YWJhc2UKREVGQVVMVF9UQUdfRVhQSVJBVElPTjogMncKUFJFRkVSU... extra_ca_cert_certificate-one: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUQyVENDQXNHZ0F3SUJBZ0lVS2xOai90VUJBZHBkNURjYkdRQUo4anRuKzd3d0RRWUpLb1pJaHZjTkFRRUwKQlFBd2ZERUxNQWtHQ... extra_ca_cert_certificate-three: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUQ0ekNDQXN1Z0F3SUJBZ0lVQmJpTXNUeExjM0s4ODNWby9GTThsWXlOS2lFd0RRWUpLb1pJaHZjTkFRRUwKQlFBd2ZERUxNQWtHQ... extra_ca_cert_certificate-two: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUQ0ekNDQXN1Z0F3SUJBZ0lVVFVPTXZ2YVdFOFRYV3djYTNoWlBCTnV2QjYwd0RRWUpLb1pJaHZjTkFRRUwKQlFBd2ZERUxNQWtHQ... kind: Secret metadata: creationTimestamp: null name: custom-ssl-config-bundle-secret namespace: <namespace>输入以下命令来创建
configBundleSecret资源:$ oc create -n <namespace> -f extra-ca-certificate-config-bundle-secret.yaml输出示例
secret/extra-ca-certificate-config-bundle-secret created输入以下命令更新
QuayRegistryYAML 文件,以引用extra-ca-certificate-config-bundle-secret对象:$ oc patch quayregistry <registry_name> -n <namespace> --type=merge -p '{"spec":{"configBundleSecret":"extra-ca-certificate-config-bundle-secret"}}'输出示例
quayregistry.quay.redhat.com/example-registry patched输入以下命令来确保
QuayRegistryYAML 文件已更新为使用额外的 CA 证书configBundleSecret资源:$ oc get quayregistry <registry_name> -n <namespace> -o yaml输出示例
# ... configBundleSecret: extra-ca-certificate-config-bundle-secret # ...
3.3. 当在 Kubernetes 上部署 Red Hat Quay 时,添加自定义 SSL/TLS 证书 复制链接链接已复制到粘贴板!
要在 Kubernetes 上的 Red Hat Quay 部署中添加自定义 SSL/TLS 证书,您可以对证书进行 base64 编码,将其添加到 config secret 中,并重启 pod。此流程针对超级用户面板证书上传功能无法用于 Kubernetes 部署的限制。
先决条件
- 已部署 Red Hat Quay。
-
您有一个自定义
ca.crt文件。
流程
输入以下命令对 SSL/TLS 证书的内容进行 Base64 编码:
$ cat ca.crt | base64 -w 0输出示例
...c1psWGpqeGlPQmNEWkJPMjJ5d0pDemVnR2QNCnRsbW9JdEF4YnFSdVd3PT0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=输入以下
kubectl命令来编辑quay-enterprise-config-secret文件:$ kubectl --namespace quay-enterprise edit secret/quay-enterprise-config-secret为证书添加一个条目,并粘贴条目下的完整
base64编码字符串er。例如:custom-cert.crt: c1psWGpqeGlPQmNEWkJPMjJ5d0pDemVnR2QNCnRsbW9JdEF4YnFSdVd3PT0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=使用
kubectl delete命令删除所有 Red Hat Quay pod。例如:$ kubectl delete pod quay-operator.v3.7.1-6f9d859bd-p5ftc quayregistry-clair-postgres-7487f5bd86-xnxpr quayregistry-quay-app-upgrade-xq2v6 quayregistry-quay-database-859d5445ff-cqthr quayregistry-quay-redis-84f888776f-hhgms之后,Red Hat Quay 部署会自动将 pod 替换为新证书数据。