2.2.7.2. 保护 Registry 控制台
默认情况下,如果按照部署 registry 控制台中的步骤手动部署,registry 控制台会生成自签名 TLS 证书 。如需更多信息,请参阅 对 Registry 控制台进行故障排除。
使用以下步骤将组织的签名证书添加为 secret 卷。假设您的证书在 oc
客户端主机上可用。
创建一个包含证书和密钥的 .cert 文件。使用以下内容格式化文件:
- 服务器证书和中间证书颁发机构的一个或多个 BEGIN CERTIFICATE 块
包含该密钥的 BEGIN PRIVATE KEY 或类似密钥的块。密钥不能加密
例如:
-----BEGIN CERTIFICATE----- MIIDUzCCAjugAwIBAgIJAPXW+CuNYS6QMA0GCSqGSIb3DQEBCwUAMD8xKTAnBgNV BAoMIGI0OGE2NGNkNmMwNTQ1YThhZTgxOTEzZDE5YmJjMmRjMRIwEAYDVQQDDAls ... -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIDUzCCAjugAwIBAgIJAPXW+CuNYS6QMA0GCSqGSIb3DQEBCwUAMD8xKTAnBgNV BAoMIGI0OGE2NGNkNmMwNTQ1YThhZTgxOTEzZDE5YmJjMmRjMRIwEAYDVQQDDAls ... -----END CERTIFICATE----- -----BEGIN PRIVATE KEY----- MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCyOJ5garOYw0sm 8TBCDSqQ/H1awGMzDYdB11xuHHsxYS2VepPMzMzryHR137I4dGFLhvdTvJUH8lUS ... -----END PRIVATE KEY-----
安全 registry 应包含以下主题备用名称(SAN)列表:
两个服务主机名:
例如:
docker-registry.default.svc.cluster.local docker-registry.default.svc
服务 IP 地址.
例如:
172.30.124.220
使用以下命令获取容器镜像 registry 服务 IP 地址:
oc get service docker-registry --template='{{.spec.clusterIP}}'
公共主机名.
例如:
docker-registry-default.apps.example.com
使用以下命令获取容器镜像 registry 公共主机名:
oc get route docker-registry --template '{{.spec.host}}'
例如,服务器证书应包含类似如下的 SAN 详情:
X509v3 Subject Alternative Name: DNS:docker-registry-public.openshift.com, DNS:docker-registry.default.svc, DNS:docker-registry.default.svc.cluster.local, DNS:172.30.2.98, IP Address:172.30.2.98
registry 控制台从 /etc/cockpit/ws-certs.d 目录中加载证书。它使用最后一个带有 .cert 扩展名的文件(按字母顺序排列)。因此,.cert 文件应至少包含以 OpenSSL 样式格式化的至少两个 PEM 块。
如果没有找到证书,将使用
openssl
命令创建自签名证书,并存储在 0-self-signed.cert 文件中。
创建 secret:
$ oc create secret generic console-secret \ --from-file=/path/to/console.cert
将 secret 添加到 registry-console 部署配置中:
$ oc set volume dc/registry-console --add --type=secret \ --secret-name=console-secret -m /etc/cockpit/ws-certs.d
这会触发 registry 控制台的新部署,使其包含您的签名证书。