问题描述
在 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