3.2. 添加 API 服务器证书

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

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

默认 API 服务器证书由内部 OpenShift Container Platform 集群 CA 发布。您可以添加一个或多个 API 服务器将根据客户端请求的完全限定域名(FQDN)返回的证书,例如使用反向代理或负载均衡器时。

先决条件

  • 您必须有 FQDN 及其对应私钥的证书。每个文件都应该采用单独的 PEM 格式。
  • 私钥必须取消加密。如果您的密钥是加密的,请在将其导入到 OpenShift Container Platform 前对其进行解密。
  • 证书必须包含显示 FQDN 的 subjectAltName 扩展。
  • 证书文件可以包含链中的一个或者多个证书。API 服务器 FQDN 的证书必须是文件中的第一个证书。然后可以跟随所有中间证书,文件以 root CA 证书结尾。
警告

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

流程

  1. kubeadmin 用户身份登录新的 API。

    $ oc login -u kubeadmin -p <password> https://FQDN:6443
  2. 获取 kubeconfig 文件。

    $ oc config view --flatten > kubeconfig-newapi
  3. 创建一个包含 openshift-config 命名空间中证书链和密钥的 secret。

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

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

    $ oc get apiserver cluster -o yaml

    输出示例

    ...
    spec:
      servingCerts:
        namedCertificates:
        - names:
          - <FQDN>
          servingCertificate:
            name: <secret>
    ...

  6. 检查 kube-apiserver operator,并验证 Kubernetes API 服务器的新修订版本是否已推出。可能需要一分钟时间,Operator 才会检测配置更改并触发新部署。当新修订版本被推出时,PROGRESSING 会报告 True

    $ oc get clusteroperators kube-apiserver

    PROGRESSING 列为 False 前不要继续进入下一步,如下所示:

    输出示例

    NAME             VERSION   AVAILABLE   PROGRESSING   DEGRADED   SINCE
    kube-apiserver   4.6.0     True        False         False      145m

    如果 PROGRESSING 显示为 True,请等待几分钟后再试一次。