5.2. 添加 API 服务器证书

默认 API 服务器证书由内部 OpenShift Container Platform 集群 CA 发布。默认情况下,位于集群外的客户端无法验证 API 服务器的证书。此证书可以替换为由客户端信任的 CA 发布的证书。

5.2.1. 向 API 服务器添加指定名称的证书

默认 API 服务器证书由内部 OpenShift Container Platform 集群 CA 发布。您可以向 API 服务器添加额外证书以根据客户请求的 URL 发送,比如使用反向代理或负载均衡器时。

先决条件

  • 必须具有 PEM 格式的证书和密钥,以用于客户端 URL。
  • 必须针对客户端用来访问 API 服务器的 URL 发布证书。
  • 证书必须有 URL 的 subjectAltName 扩展。
  • 如果要求证书链认证服务器证书,则必须将证书链附加到服务器证书中。证书文件必须是 Base64 PEM 编码的,通常具有 .crt.pem 扩展名。例如:

    $ cat server_cert.pem int2ca_cert.pem int1ca_cert.pem rootca_cert.pem>combined_cert.pem

    在合并证书时,证书的顺序非常重要。每个证书都必须直接认证前面的证书,例如:

    1. OpenShift Container Platform master 主机服务器证书。
    2. 认证服务器证书的中间 CA 证书。
    3. 认证中间 CA 证书的根 CA 证书。
警告

不要为内部负载均衡器(主机名 api-int.<cluster_name>.<base_domain>)提供指定了名称的证书。这样可让集群处于降级状态。

流程

  1. 创建一个包含 openshift-config 命名空间中证书和密钥的 secret。

    $ oc create secret tls <certificate> \1
         --cert=</path/to/cert.crt> \2
         --key=</path/to/cert.key> \3
         -n openshift-config
    1
    <certificate> 是将要包含该证书的 secret 的名称。
    2
    </path/to/cert.crt> 是证书在本地文件系统中的路径。
    3
    </path/to/cert.key> 是与此证书关联的私钥的路径。
  2. 更新 API 服务器以引用所创建的 secret。

    $ oc patch apiserver cluster \
         --type=merge -p \
         '{"spec":{"servingCerts": {"namedCertificates":
         [{"names": ["<hostname>"], 1
         "servingCertificate": {"name": "<certificate>"}}]}}}' 2
    1
    <hostname> 替换为 API 服务器应为其提供证书的主机名。
    2
    <certificate> 替换为上一步中用于 secret 的名称。
  3. 检查 apiserver/cluster 对象并确认该 secret 现已被引用。

    $ oc get apiserver cluster -o yaml
    ...
    spec:
      servingCerts:
        namedCertificates:
        - names:
          - <hostname>
          servingCertificate:
            name: <certificate>
    ...