第 5 章 在 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-----
5.1. 当在 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
输出示例
...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 替换为新证书数据。