kubelet报错nable to connect to the server: x509: certificate is valid for xxx, not xxx
- 2022-11-18 09:56:10
- 运维
- 798
- shevechco
我当前k8s环境是多master节点,前几天刚续费k8s证书,今天查看所有工作节点均notready,但是master节点正常,查看工作节点kubelet报错日志如下:
k8s.io/kubernetes/pkg/kubelet/kubelet.go:450: Failed to list *v1.Service: Get https://192.168.1.220:16443/api/v1/services?limit=500&resourceVersion=0: x509: certificate is valid for 10.96.0.1, 192.168.1.201, not 192.168.1.220
然后我们可以通过以下命令查看apiserver证书
openssl x509 -noout -text -in apiserver.crt|grep DNS DNS:debian-1, DNS:kubernetes, DNS:kubernetes.default, DNS:kubernetes.default.svc, DNS:kubernetes.default.svc.cluster.local, IP Address:10.96.0.1, IP Address:192.168.1.201
可以看到证书内没有包含我们的VIP,简单判断可能是master节点apiserver认证中包含本机IP,所以kubelet能够正常连接k8s集群,但是工作节点中连接k8s集群使用的是VIP,于是我尝试删除旧的证书,重新制作apiserver证书,将VIP加入apiserver的认证,这个操作需要在每个master节点上都操作一遍。
/etc/kubernetes/ cp -r pki pki_bak cd pki rm -rf apiserver.crt rm -rf apiserver.key
然后单独使用命令生成新的证书,VIP和本机IP需要加进去
kubeadm init phase certs apiserver --apiserver-advertise-address 10.96.0.1 --apiserver-cert-extra-sans 192.168.1.201 --apiserver-cert-extra-sans 192.168.1.220
此时我们可以看到目录下生成来了新的apiserver证书
ls apiserver* apiserver.crt apiserver.key
然后我们接着重启apiserver
docker ps |grep -E 'k8s_kube-apiserver' | awk '{print $1}' |xargs docker restart
我们再使用命令查看集群状态
kubectl cluster-info Kubernetes master is running at https://192.168.1.220:16443 KubeDNS is running at https://192.168.1.220:16443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy Metrics-server is running at https://192.168.1.220:16443/api/v1/namespaces/kube-system/services/https:metrics-server:/proxy
经过以上操作一般就能恢复正常,但是有可能客户端的kuebet中的授权认证的key也可能有问题,如果有问题就按照以下操作进行
然后我们复制/etc/kubernets/kubelet.conf文件出来,将该文件内的Master IP改为VIP,6443端口改为16443端口,然后将该文件复制到所有工作节点的/etc/kubernets/目录下替换原文件,然后重启kubelet,最后所有集群恢复正常。
内容版权声明:除非注明,否则皆为本站原创文章。
转载注明出处:http://www.sulao.cn/post/894
相关推荐
- k8s集群中mongdb、etcd、prometheus数据bash一键备份脚本
- k8s业务pod端口检测和日志采集bash脚本
- python获取k8s中使用物理卡pod列表脚本
- k8s基于clusterrole生成集群级别只读用户bash脚本
- k8s存储pv/pvc中的subPath的使用详解
- k8s容器退出码详细信息介绍
- k8s调度GPU节点并挂载GPU设备
- k8s使用nfs报错selfLink was empty, can't make reference
- centos7使用haproxy部署k8s高可用集群
- centos7部署k8s多master高可用集群(k8s+containerd+nginx+keepalived)