由于安全性的考虑,k8s 默认生成的 https 证书,默认有效期为1年。在运维集群的过程中,这个因素一定要有所考虑。
解决这个问题的办法,有如下几个办法:
- 定期更新证书
- 定期升级集群,因为每次升级过程中都会更新证书
- 改代码把生成的证书的有效期设置为10年或更长时间
手动触发更新证书的方式
注意: 手动更新证书的时候,需要每台 master 都要更新
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| ## 检查证书有效期 kubeadm alpha certs check-expiration
## 或者 sudo openssl x509 -in /etc/kubernetes/pki/apiserver.crt -noout -text |grep ' Not '
## 在一台 master 上执行更新证书的操作 kubeadm alpha certs renew all
## 再次检查证书有效期 kubeadm alpha certs check-expiration
## 在每台 master 集群都操作,或将生成的证书同步到其他 master 机器上 rsync -Pav -e "ssh -p 22" /etc/kubernetes/pki/ root@<master-ip>:/etc/kubernetes/pki/
|
参考:
https://kubernetes.io/docs/tasks/administer-cluster/kubeadm/kubeadm-certs/
升级集群的时候,会自动更新证书
每次升级,只允许 1.21.x ==>1.22.x 或者 1.22.x ==> 1.22.y
不允许跨多个版本的升级,比如不允许 1.14 升级到 1.16
注意:升级节点经常会遇到配置不兼容、起不来等问题,需要先在非线上环境进行验证,再操作。
kubeadm upgrade apply 在任意一台master机器操作即可。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| # 先在非主节点安装新版本的包,并确认节点状态为 READY yum list --showduplicates kubeadm --disableexcludes=kubernetes yum install -y kubeadm-1.22.x-0 --disableexcludes=kubernetes yum install -y kubelet-1.22.x-0 kubectl-1.22.x-0 --disableexcludes=kubernetes
kubectl get nodes
# 在主节点安装新版本的包
# 驱逐该主 master 节点 kubectl drain <cp-node-name> --ignore-daemonsets # 检查升级的版本 kubeadm upgrade plan # 升级集群的配置文件 sudo kubeadm upgrade apply v1.22.x
|
参考:
https://kubernetes.io/docs/tasks/administer-cluster/kubeadm/kubeadm-upgrade/
修改代码,将证书时间改为 30 年
安装go环境(1.12版本)
1 2 3 4 5 6 7
| wget https://storage.googleapis.com/golang/go1.12.5.linux-amd64.tar.gz tar -C /root -xzf go1.12.5.linux-amd64.tar.gz vim ~/.bashrc export GOPATH=/root/Go export GOROOT=/root/go export PATH=$PATH:$GOROOT/bin source ~/.bashrc
|
重新编译kubernetes
1 2 3 4 5 6
| cd /root/go/src git clone https://github.com/kubernetes/kubernetes.git git checkout v1.16.3#对应自己的版本 vim cmd/kubeadm/app/constants/constants.go #修改源代码 CertificateValidity = time.Hour * 24 * 365 * 100 make WHAT=cmd/kubeadm
|
备份原有的配置文件
1 2
| cp /usr/bin/kubeadm{,.bak20210707} cp -r /etc/kubernetes/pki{,.bak20210707}
|
替换原有的kubeadm
1
| cp _output/bin/kubeadm /usr/bin/kubeadm
|
生成新的证书
1 2
| cd /etc/kubernetes/pki kubeadm alpha certs renew all
|