问题描述
在 Kubernetes Cluster 中,certSANs 默认仅包含 Control Plane 地址,还可能包含 controlPlaneEndpoint 地址;
通过其他地址来访问集群,kubectl 将提示 Unable to connect to the server: x509: certificate is valid for xxx 错误;
该笔记将记录:向 certSANs 中添加新地址(或主机名)的方法,以及相关问题的解决方案;
解决方案
通过 –insecure-skip-tls-verify 选项,能够解决该问题,但在实际应用场景中,更新 certSAN 才是最终的解决方案。
在我们的场景中,为了方便 Control Plane 的管理,例如我们希望修改 Control Plane 地址;
第一步、更新配置文件
# kubectl -n kube-system get configmap kubeadm-config -o jsonpath='{.data.ClusterConfiguration}' > kubeadm.yaml # vim kubeadm.yaml ... apiServer: certSANs: - "172.31.253.120" - "172.31.253.121" - "172.31.253.122" - "172.31.253.123" - "d3rm-infrastructure.kubernetes.d3rm.site" ... # kubeadm init phase upload-config kubeadm --config kubeadm.yaml # scp kubeadm.yaml root@controp-plane:/root/
第二步、更新节点证书
在所有控制节点中,执行如下命令:
# 否则 kubeadm 将不会重新创建证书 mv /etc/kubernetes/pki/apiserver.{crt,key} ~ # 更新节点证书 kubeadm init phase certs apiserver --config kubeadm.yaml -v=10 # 验证证书生效 openssl x509 -in /etc/kubernetes/pki/apiserver.crt -text | grep "X509v3 Subject Alternative Name:" -A 1 # 重启,或重启 Pod 实例 reboot
参考文献
Adding a Name to the Kubernetes API Server Certificate