×

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

添加名为证书的 API 服务器

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

先决条件
  • 您必须拥有 FQDN 的证书及其对应的私钥。每个证书都应位于单独的 PEM 格式文件中。

  • 私钥必须未加密。如果您的密钥已加密,请在将其导入 OpenShift Container Platform 之前对其进行解密。

  • 证书必须包含显示 FQDN 的subjectAltName扩展。

  • 证书文件可以包含一个或多个证书链中的证书。API 服务器 FQDN 的证书必须是文件中的第一个证书。然后可以跟随着任何中间证书,文件应以根 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命名空间中。

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

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

    $ oc get apiserver cluster -o yaml
    示例输出
    ...
    spec:
      servingCerts:
        namedCertificates:
        - names:
          - <FQDN>
          servingCertificate:
            name: <secret>
    ...
  6. 检查kube-apiserver操作符,并验证 Kubernetes API 服务器的新版本是否已推出。操作符可能需要一分钟才能检测到配置更改并触发新的部署。在新的版本推出期间,PROGRESSING将报告True

    $ oc get clusteroperators kube-apiserver

    除非PROGRESSING显示为False,否则请勿继续下一步操作,如下所示:

    示例输出
    NAME             VERSION   AVAILABLE   PROGRESSING   DEGRADED   SINCE
    kube-apiserver   4.17.0     True        False         False      145m

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

    只有在首次添加名为 API server 的证书时,Kubernetes API 服务器才会推出新版本。当名为 API server 的证书被续期时,Kubernetes API 服务器不会推出新版本,因为kube-apiserver pod 会动态重新加载更新后的证书。