有的项目k8s搭建时未考虑证书授权问题,导致一年后证书到期,一下是问题处理思路。
建议搭建k8s的时候就设置为100年
一、1.18版本
1、查看证书有效期(1.18)
kubeadm alpha certs check-expiration
2、查看CA证书过期时间
openssl x509 -in /etc/kubernetes/pki/ca.crt -noout -text |grep Not
3、查看集群证书过期时间
openssl x509 -in /etc/kubernetes/pki/apiserver.crt -noout -text |grep ' Not '
4、获取一个创建好的 k8s集群的初始化配置文件
kubeadm config view > kubeadm.yaml
如果证书已经过期,请创建kubeadm.yaml文件,后边会用这个文件
vim kubeadm.yaml
sion: kubeadm.k8s.io/v1beta1
kind: ClusterConfiguration
kubernetesVersion: v1.15.0 # kubernetes 版本
apiServer:
certSANs:
- 192.168.10.xxx # master 所有节点IP地址,包括master和slave
- 192.168.10.xxx # slave1
- 192.168.10.xxx # slave2
extraArgs:
service-node-port-range: 80-32767
advertise-address: 0.0.0.0
controlPlaneEndpoint: "192.168.10.xxx:6443" # APIserver 地址,也就是master节点地址
imageRepository: registry.cn-hangzhou.aliyuncs.com/google_containers #这里使用国内阿里云的镜像仓库
如果是集群,请在所有master节点执行以下命令
5、备份老证书
cp -rp /etc/kubernetes /etc/kubernetes.bak
6、重新签发全部组件的证书
kubeadm alpha certs renew all --config=kubeadm.yaml
7、生成新的配置文件
mv /etc/kubernetes/*.conf ~/.
kubeadm init phase kubeconfig all --config kubeadm.yaml
8、将新生成的admin.conf文件覆盖掉.kube/config文件
mv $HOME/.kube/config $HOME/.kube/config.old
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
chmod 644 $HOME/.kube/config
9、重启kube-apiserver,kube-controller,kube-scheduler,etcd这4个容器:(一定要ps -a要不有可能服务容器没启动)
docker ps -a | grep -v pause | grep -E "etcd|scheduler|controller|apiserver" | awk '{print $1}' | awk '{print "docker","restart",$1}' | bash
10、各节点重启kubelet
systemctl restart kubelet
二、1.25版本(天津)
1、查看证书有效期(1.25)
kubeadm certs check-expiration
2、备份老证书
cp -rp /etc/kubernetes /etc/kubernetes.bak时间
3、重新签发全部组件的证书
kubeadm certs renew all
4、生成新的配置文件
mv /etc/kubernetes/*.conf ~/.
kubeadm init phase kubeconfig all
5、将新生成的admin.conf文件覆盖掉.kube/config文件
mv $HOME/.kube/config $HOME/.kube/config.old
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
chmod 644 $HOME/.kube/config
查看一下config这个文件和/etc/kubernetes/kubelet.conf 的 ip是不是apiserver的ip 这个环境可能有问题 生成出来的识别的网卡的 ip就会有问题
可以直接重启服务器
6、重启kube-apiserver,kube-controller,kube-scheduler,etcd这4个容器:(一定要ps -a要不有可能服务容器没启动)
for i in $(nerdctl -n k8s.io ps -a | grep -v pause | grep Up | grep -E "etcd|scheduler|controller|apiserver" | awk '{print $1}'); do nerctl -n k8s.io restart $i; done
7、各节点重启kubelet
systemctl restart kubelet