「Kubernetes Cluster」- 添加额外的 SAN

  CREATED BY JENKINSBOT

问题描述

在 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