Red Hat Training

A Red Hat training course is available for OpenShift Container Platform

2.2.7.2. 保护 Registry 控制台

默认情况下,如果按照部署 registry 控制台中的步骤手动部署,registry 控制台会生成自签名 TLS 证书 。如需更多信息,请参阅 对 Registry 控制台进行故障排除

使用以下步骤将组织的签名证书添加为 secret 卷。假设您的证书在 oc 客户端主机上可用。

  1. 创建一个包含证书和密钥的 .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 文件中。

  2. 创建 secret:

    $ oc create secret generic console-secret \
        --from-file=/path/to/console.cert
  3. 将 secret 添加到 registry-console 部署配置中:

    $ oc set volume dc/registry-console --add --type=secret \
        --secret-name=console-secret -m /etc/cockpit/ws-certs.d

    这会触发 registry 控制台的新部署,使其包含您的签名证书。