保护 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
$ openssl genrsa -out rootCA.key 2048Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输入以下命令生成 root CA 证书:
openssl req -x509 -new -nodes -key rootCA.key -sha256 -days 1024 -out rootCA.pem
$ openssl req -x509 -new -nodes -key rootCA.key -sha256 -days 1024 -out rootCA.pemCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输入要合并到证书请求中的信息,包括服务器主机名,例如:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输入以下命令生成服务器密钥:
openssl genrsa -out ssl.key 2048
$ openssl genrsa -out ssl.key 2048Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输入以下命令生成签名请求:
openssl req -new -key ssl.key -out ssl.csr
$ openssl req -new -key ssl.key -out ssl.csrCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输入要合并到证书请求中的信息,包括服务器主机名,例如:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建配置文件
openssl.cnf,指定服务器主机名,例如:openssl.cnf文件示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用配置文件生成证书
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
$ openssl x509 -req -in ssl.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out ssl.cert -days 356 -extensions v3_req -extfile openssl.cnfCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输入以下命令确认您的创建证书和密钥:
ls /path/to/certificates
$ ls /path/to/certificatesCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
rootCA.key ssl-bundle.cert ssl.key custom-ssl-config-bundle-secret.yaml rootCA.pem ssl.cert openssl.cnf rootCA.srl ssl.csr
rootCA.key ssl-bundle.cert ssl.key custom-ssl-config-bundle-secret.yaml rootCA.pem ssl.cert openssl.cnf rootCA.srl ssl.csrCopy to Clipboard Copied! Toggle word wrap Toggle overflow
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
cp ~/ssl.cert ~/ssl.key /path/to/configuration_directoryCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输入以下命令进入配置目录:
cd /path/to/configuration_directory
$ cd /path/to/configuration_directoryCopy to Clipboard Copied! Toggle word wrap Toggle overflow 编辑
config.yaml文件并指定您希望 Red Hat Quay 处理 SSL/TLS:config.yaml文件示例# ... SERVER_HOSTNAME: <quay-server.example.com> ... PREFERRED_URL_SCHEME: https # ...
# ... SERVER_HOSTNAME: <quay-server.example.com> ... PREFERRED_URL_SCHEME: https # ...Copy to Clipboard Copied! Toggle word wrap Toggle overflow 可选:输入以下命令将
rootCA.pem文件的内容添加到ssl.cert文件的末尾:cat rootCA.pem >> ssl.cert
$ cat rootCA.pem >> ssl.certCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输入以下命令停止
Quay容器:sudo podman stop <quay_container_name>
$ sudo podman stop <quay_container_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输入以下命令重启 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.1
$ 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.1Copy to Clipboard Copied! Toggle word wrap Toggle overflow
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
$ sudo cp rootCA.pem /etc/containers/certs.d/quay-server.example.com/ca.crtCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在登录到 Red Hat Quay registry 时,验证您不再需要使用 the
-tls-verify=false选项:sudo podman login quay-server.example.com
$ sudo podman login quay-server.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Login Succeeded!
Login Succeeded!Copy to Clipboard Copied! Toggle word wrap Toggle overflow
1.2.3. 将系统配置为信任证书颁发机构 复制链接链接已复制到粘贴板!
使用以下步骤将您的系统配置为信任证书颁发机构。
流程
输入以下命令将
rootCA.pem文件复制到合并的系统范围信任存储中:sudo cp rootCA.pem /etc/pki/ca-trust/source/anchors/
$ sudo cp rootCA.pem /etc/pki/ca-trust/source/anchors/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输入以下命令更新系统范围的信任存储配置:
sudo update-ca-trust extract
$ sudo update-ca-trust extractCopy to Clipboard Copied! Toggle word wrap Toggle overflow 可选。您可以使用
trust list命令来确保Quay服务器已配置:trust list | grep quay label: quay-server.example.com$ trust list | grep quay label: quay-server.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow 现在,当您通过
https://quay-server.example.com浏览到 registry 时,锁定图标会显示连接安全:
要从系统范围的信任中删除
rootCA.pem文件,请删除该文件并更新配置:sudo rm /etc/pki/ca-trust/source/anchors/rootCA.pem
$ sudo rm /etc/pki/ca-trust/source/anchors/rootCA.pemCopy to Clipboard Copied! Toggle word wrap Toggle overflow sudo update-ca-trust extract
$ sudo update-ca-trust extractCopy to Clipboard Copied! Toggle word wrap Toggle overflow trust list | grep quay
$ trust list | grep quayCopy to Clipboard Copied! Toggle word wrap Toggle overflow
如需更多信息,请参阅 使用共享系统证书的 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
$ touch custom-ssl-config-bundle-secret.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 创建
custom-ssl-config-bundle-secret资源。运行以下命令来创建资源:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 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
$ cat custom-ssl-config-bundle-secret.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输入以下命令来创建
configBundleSecret资源:oc create -n <namespace> -f custom-ssl-config-bundle-secret.yaml
$ oc create -n <namespace> -f custom-ssl-config-bundle-secret.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
secret/custom-ssl-config-bundle-secret created
secret/custom-ssl-config-bundle-secret createdCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输入以下命令更新
QuayRegistryYAML 文件来引用custom-ssl-config-bundle-secret对象:oc patch quayregistry <registry_name> -n <namespace> --type=merge -p '{"spec":{"configBundleSecret":"custom-ssl-config-bundle-secret"}}'$ oc patch quayregistry <registry_name> -n <namespace> --type=merge -p '{"spec":{"configBundleSecret":"custom-ssl-config-bundle-secret"}}'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
quayregistry.quay.redhat.com/example-registry patched
quayregistry.quay.redhat.com/example-registry patchedCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输入以下命令将
QuayRegistryYAML 的tls组件设置为False:oc patch quayregistry <registry_name> -n <namespace> --type=merge -p '{"spec":{"components":[{"kind":"tls","managed":false}]}}'$ oc patch quayregistry <registry_name> -n <namespace> --type=merge -p '{"spec":{"components":[{"kind":"tls","managed":false}]}}'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
quayregistry.quay.redhat.com/example-registry patched
quayregistry.quay.redhat.com/example-registry patchedCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输入以下命令来确保
QuayRegistryYAML 文件已更新为使用自定义 SSLconfigBundleSecret资源,并且您的 和tls资源已设置为False:oc get quayregistry <registry_name> -n <namespace> -o yaml
$ oc get quayregistry <registry_name> -n <namespace> -o yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
输入以下命令确认到服务器和端口的 TLS 连接:
openssl s_client -connect <quay-server.example.com>:443
$ openssl s_client -connect <quay-server.example.com>:443Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
第 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>"
$ 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>"Copy to Clipboard Copied! Toggle word wrap Toggle overflow
在 Red Hat Quay 目录中,运行以下命令来创建一个新的 YAML 文件,如
quay-config-bundle.yaml:touch quay-config-bundle.yaml
$ touch quay-config-bundle.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输入以下命令来创建
postgresql-client-certs资源:oc -n <quay_namespace> create secret generic postgresql-client-certs \ --from-file config.yaml=<path/to/config.yaml> --from-file=tls.crt=<path/to/ssl_client_certificate.pem> --from-file=tls.key=<path/to/ssl_client_key.pem> --from-file=ca.crt=<path/to/ssl_server_certificate.pem>
$ 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 Copy to Clipboard Copied! Toggle word wrap Toggle overflow 编辑
'quay-config-bundle.yaml文件,使其包含以下数据库连接设置:重要-
DB_CONNECTION_ARGS变量中包含的信息,如sslmode,sslrootcert,sslcert, 和sslkey必须与 附加到DB_URI变量的信息匹配。不匹配可能会导致连接失败。 -
您不能指定自定义文件名或路径。
sslrootcert、sslcert和sslkey的证书文件路径是硬编码的默认值,并挂载到 Kubernetes secret 中的Quaypod 中。您必须遵循以下命名约定,否则将导致连接失败。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 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
$ oc create -n <namespace> -f quay-config-bundle.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
secret/quay-config-bundle created
secret/quay-config-bundle createdCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输入以下命令更新
QuayRegistryYAML 文件来引用quay-config-bundle对象:oc patch quayregistry <registry_name> -n <namespace> --type=merge -p '{"spec":{"configBundleSecret":"quay-config-bundle"}}'$ oc patch quayregistry <registry_name> -n <namespace> --type=merge -p '{"spec":{"configBundleSecret":"quay-config-bundle"}}'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
quayregistry.quay.redhat.com/example-registry patched
quayregistry.quay.redhat.com/example-registry patchedCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输入以下命令来确保
QuayRegistryYAML 文件已更新为使用额外的 CA 证书configBundleSecret资源:oc get quayregistry <registry_name> -n <namespace> -o yaml
$ oc get quayregistry <registry_name> -n <namespace> -o yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
# ... configBundleSecret: quay-config-bundle # ...
# ... configBundleSecret: quay-config-bundle # ...Copy to Clipboard Copied! Toggle word wrap Toggle overflow
第 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
$ cat storage.crtCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
-----BEGIN CERTIFICATE----- MIIDTTCCAjWgAwIBAgIJAMVr9ngjJhzbMA0GCSqGSIb3DQEBCwUAMD0xCzAJBgNV... -----END CERTIFICATE-----
-----BEGIN CERTIFICATE----- MIIDTTCCAjWgAwIBAgIJAMVr9ngjJhzbMA0GCSqGSIb3DQEBCwUAMD0xCzAJBgNV... -----END CERTIFICATE-----Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输入以下命令,在 Red Hat Quay 目录的
/config文件夹中创建extra_ca_certs:mkdir -p /path/to/quay_config_folder/extra_ca_certs
$ mkdir -p /path/to/quay_config_folder/extra_ca_certsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将 CA 文件复制到
extra_ca_certs文件夹。例如:cp storage.crt /path/to/quay_config_folder/extra_ca_certs/
$ cp storage.crt /path/to/quay_config_folder/extra_ca_certs/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输入以下命令,确保
storage.crt文件存在于extra_ca_certs文件夹中:tree /path/to/quay_config_folder/extra_ca_certs
$ tree /path/to/quay_config_folder/extra_ca_certsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
/path/to/quay_config_folder/extra_ca_certs ├── storage.crt----
/path/to/quay_config_folder/extra_ca_certs ├── storage.crt----Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输入以下命令来获取
Quay的CONTAINER ID:podman ps
$ podman psCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
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_kellerCONTAINER 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_kellerCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输入以下命令重启容器
podman restart 5a3e82c4a75f
$ podman restart 5a3e82c4a75fCopy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令确认证书已复制到容器命名空间中:
podman exec -it 5a3e82c4a75f cat /etc/ssl/certs/storage.pem
$ podman exec -it 5a3e82c4a75f cat /etc/ssl/certs/storage.pemCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
-----BEGIN CERTIFICATE----- MIIDTTCCAjWgAwIBAgIJAMVr9ngjJhzbMA0GCSqGSIb3DQEBCwUAMD0xCzAJBgNV... -----END CERTIFICATE-----
-----BEGIN CERTIFICATE----- MIIDTTCCAjWgAwIBAgIJAMVr9ngjJhzbMA0GCSqGSIb3DQEBCwUAMD0xCzAJBgNV... -----END CERTIFICATE-----Copy to Clipboard Copied! Toggle word wrap Toggle overflow
在 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 修改配置文件 复制链接链接已复制到粘贴板!
您可以使用 CLI 下载现有配置来修改 configBundleSecret 存储的 config.yaml 文件。进行更改后,您可以重新上传 configBundleSecret 资源,以更改 Red Hat Quay registry。
修改 configBundleSecret 资源存储的 config.yaml 文件是一个多步骤,需要 base64 解码现有配置文件,然后上传更改。在大多数情况下,使用 OpenShift Container Platform Web 控制台对 config.yaml 文件进行更改更为简单。
先决条件
- 以具有 admin 权限的用户身份登录 OpenShift Container Platform 集群。
流程
输入以下命令描述
QuayRegistry资源:oc describe quayregistry -n <quay_namespace>
$ oc describe quayregistry -n <quay_namespace>Copy to Clipboard Copied! Toggle word wrap Toggle overflow # ... Config Bundle Secret: example-registry-config-bundle-v123x # ...
# ... Config Bundle Secret: example-registry-config-bundle-v123x # ...Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输入以下命令来获取 secret 数据:
oc get secret -n <quay_namespace> <example-registry-config-bundle-v123x> -o jsonpath='{.data}'$ oc get secret -n <quay_namespace> <example-registry-config-bundle-v123x> -o jsonpath='{.data}'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
{ "config.yaml": "RkVBVFVSRV9VU0 ... MDAwMAo=" }{ "config.yaml": "RkVBVFVSRV9VU0 ... MDAwMAo=" }Copy to Clipboard Copied! Toggle word wrap Toggle overflow 通过传递 >>
config.yaml 标志,将数据解码到当前目录中。例如:echo 'RkVBVFVSRV9VU0 ... MDAwMAo=' | base64 --decode >> config.yaml
$ echo 'RkVBVFVSRV9VU0 ... MDAwMAo=' | base64 --decode >> config.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
对
config.yaml文件进行所需的更改,然后将该文件保存为config.yaml。 输入以下命令创建新的
configBundleSecretYAML。touch <new_configBundleSecret_name>.yaml
$ touch <new_configBundleSecret_name>.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输入以下命令来创建新的
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
$ oc -n <namespace> create secret generic <secret_name> \ --from-file=config.yaml=</path/to/config.yaml> \1 --dry-run=client -o yaml > <new_configBundleSecret_name>.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 其中
<config.yaml> 是您的base64 解码的config.yaml文件。
输入以下命令来创建
configBundleSecret资源:oc create -n <namespace> -f <new_configBundleSecret_name>.yaml
$ oc create -n <namespace> -f <new_configBundleSecret_name>.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
secret/config-bundle created
secret/config-bundle createdCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输入以下命令更新
QuayRegistryYAML 文件来引用新的configBundleSecret对象:oc patch quayregistry <registry_name> -n <namespace> --type=merge -p '{"spec":{"configBundleSecret":"<new_configBundleSecret_name>"}}'$ oc patch quayregistry <registry_name> -n <namespace> --type=merge -p '{"spec":{"configBundleSecret":"<new_configBundleSecret_name>"}}'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
quayregistry.quay.redhat.com/example-registry patched
quayregistry.quay.redhat.com/example-registry patchedCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
验证
QuayRegistryCR 已使用新的configBundleSecret更新:oc describe quayregistry -n <quay_namespace>
$ oc describe quayregistry -n <quay_namespace>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
# ... Config Bundle Secret: <new_configBundleSecret_name> # ...
# ... Config Bundle Secret: <new_configBundleSecret_name> # ...Copy to Clipboard Copied! Toggle word wrap Toggle overflow 修补 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
$ touch extra-ca-certificate-config-bundle-secret.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 创建
extra-ca-certificate-config-bundle-secret资源。可选。您可以输入以下命令来检查
extra-ca-certificate-config-bundle-secret.yaml文件的内容:cat extra-ca-certificate-config-bundle-secret.yaml
$ cat extra-ca-certificate-config-bundle-secret.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输入以下命令来创建
configBundleSecret资源:oc create -n <namespace> -f extra-ca-certificate-config-bundle-secret.yaml
$ oc create -n <namespace> -f extra-ca-certificate-config-bundle-secret.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
secret/extra-ca-certificate-config-bundle-secret created
secret/extra-ca-certificate-config-bundle-secret createdCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输入以下命令更新
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"}}'$ oc patch quayregistry <registry_name> -n <namespace> --type=merge -p '{"spec":{"configBundleSecret":"extra-ca-certificate-config-bundle-secret"}}'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
quayregistry.quay.redhat.com/example-registry patched
quayregistry.quay.redhat.com/example-registry patchedCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输入以下命令来确保
QuayRegistryYAML 文件已更新为使用额外的 CA 证书configBundleSecret资源:oc get quayregistry <registry_name> -n <namespace> -o yaml
$ oc get quayregistry <registry_name> -n <namespace> -o yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
# ... configBundleSecret: extra-ca-certificate-config-bundle-secret # ...
# ... configBundleSecret: extra-ca-certificate-config-bundle-secret # ...Copy to Clipboard Copied! Toggle word wrap Toggle overflow
3.3. 当在 Kubernetes 上部署 Red Hat Quay 时,添加自定义 SSL/TLS 证书 复制链接链接已复制到粘贴板!
在 Kubernetes 上部署时,Red Hat Quay 将 secret 中的挂载为卷来存储配置资产。目前,这会破坏超级用户面板的上传证书功能。
作为临时解决方案,在部署 Red Hat Quay 后,base64 编码证书可以添加到 secret 中。
当在 Kubernetes 上部署 Red Hat Quay 时,请使用以下步骤添加自定义 SSL/TLS 证书。
先决条件
- 已部署 Red Hat Quay。
-
您有一个自定义
ca.crt文件。
流程
输入以下命令对 SSL/TLS 证书的内容进行 Base64 编码:
cat ca.crt | base64 -w 0
$ cat ca.crt | base64 -w 0Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
...c1psWGpqeGlPQmNEWkJPMjJ5d0pDemVnR2QNCnRsbW9JdEF4YnFSdVd3PT0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=
...c1psWGpqeGlPQmNEWkJPMjJ5d0pDemVnR2QNCnRsbW9JdEF4YnFSdVd3PT0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输入以下
kubectl命令来编辑quay-enterprise-config-secret文件:kubectl --namespace quay-enterprise edit secret/quay-enterprise-config-secret
$ kubectl --namespace quay-enterprise edit secret/quay-enterprise-config-secretCopy to Clipboard Copied! Toggle word wrap Toggle overflow 为证书添加一个条目,并粘贴条目下的完整
base64编码字符串er。例如:custom-cert.crt: c1psWGpqeGlPQmNEWkJPMjJ5d0pDemVnR2QNCnRsbW9JdEF4YnFSdVd3PT0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=
custom-cert.crt: c1psWGpqeGlPQmNEWkJPMjJ5d0pDemVnR2QNCnRsbW9JdEF4YnFSdVd3PT0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用
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
$ 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-hhgmsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 之后,Red Hat Quay 部署会自动将 pod 替换为新证书数据。