3.2. 添加 API 服务器证书
默认 API 服务器证书由内部 OpenShift Container Platform 集群 CA 发布。默认情况下,位于集群外的客户端无法验证 API 服务器的证书。此证书可以替换为由客户端信任的 CA 发布的证书。
在托管的 control plane 集群中,您无法替换 API 中的自签名证书。
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>
)提供指定了名称的证书。这样可让集群处于降级状态。
流程
以
kubeadmin
用户身份登录新的 API。$ oc login -u kubeadmin -p <password> https://FQDN:6443
获取
kubeconfig
文件。$ oc config view --flatten > kubeconfig-newapi
创建一个包含
openshift-config
命名空间中证书链和密钥的 secret。$ oc create secret tls <secret> \1 --cert=</path/to/cert.crt> \2 --key=</path/to/cert.key> \3 -n openshift-config
更新 API 服务器以引用所创建的 secret。
$ oc patch apiserver cluster \ --type=merge -p \ '{"spec":{"servingCerts": {"namedCertificates": [{"names": ["<FQDN>"], 1 "servingCertificate": {"name": "<secret>"}}]}}}' 2
检查
apiserver/cluster
对象并确认该 secret 现已被引用。$ oc get apiserver cluster -o yaml
输出示例
... spec: servingCerts: namedCertificates: - names: - <FQDN> servingCertificate: name: <secret> ...
检查
kube-apiserver
operator,并验证 Kubernetes API 服务器的新修订版本是否已推出。可能需要一分钟时间,Operator 才会检测配置更改并触发新部署。当新修订版本被推出时,PROGRESSING
会报告True
。$ oc get clusteroperators kube-apiserver
在
PROGRESSING
列为False
前不要继续进入下一步,如下所示:输出示例
NAME VERSION AVAILABLE PROGRESSING DEGRADED SINCE kube-apiserver 4.16.0 True False False 145m
如果
PROGRESSING
显示为True
,请等待几分钟后再试一次。注意只有在第一次添加了名为 certificate 的 API 服务器时,Kubernetes API 服务器才会推出新的修订版本。当名为 certificate 的 API 服务器被续订时,Kubernetes API 服务器的新修订版本不会推出,因为
kube-apiserver
pod 会动态重新载入更新的证书。