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