yuyicai/update-kube-cert

k8s高可用集群更新后etcd无法启动

Closed this issue · 17 comments

这边k8s版本为1.17.11
分别在三台master节点上执行
./update-kubeadm-cert.sh all
后etcd无法启动,查看日志提示
image

分别执行以下两个命令看看结果:

openssl x509 -text -noout -in /etc/kubernetes/pki/etcd/peer.crt
openssl x509 -text -noout -in /etc/kubernetes.old-20210903/pki/etcd/peer.crt

之前不小心把一个节点的所有证书全部覆盖到其他节点,后面发现每个节点证书是不一样的,目前还在想办法重新生成etcd证书

是的,每个节点的证书是不一样,节点上的证书的 x509 扩展必须包含被节点的 IP (即外部访问 etcd 的 IP)
如果是重要集群,可以邮箱联系我,远程帮你快速搞定 etcd 证书被覆盖问题,如果是练手集群,自己折腾一下比较好

如果要每个节点都通用一套证书,那么在前方证书的时候需要把所有 master 节点的 IP 都加进去,从而达到证书 “通用” 的效果。

非常感谢,我自己先尝试修复一下

OK
另外 apiserver.crt(服务端证书) 和 etcd/peer.crt(对等证书,包含服务&客户端属性)、etcd/server.crt(对等证书,包含服务&客户端属性) 这几个需要重新签发,其他的都是客户端证书,不包含IP/域名,被覆盖了也不需要重新签发
另外,可以用 kubeadm init phase certs <cert_name> 来生产证书,纯手签有点麻烦

我现在证书恢复了,cni插件启动不了
image

apiserver 没起来,连不上apiserver

image
1、保留最原始的上述3组文件
2、kubeadm init phase certs all --config=/root/kubeadm.yaml重新生成证书
3、./update-kubeadm-cert.sh all 更新证书
这些操作后etcd服务正常启动,api-server也起来了,但是cni组件出现异常
image
查看日志为 Unable to authenticate the request due to an error: [invalid bearer token, square/go-jose: error i
应该是kubelet的哪个token没设置对,不知道要在哪里修改了

image
1、保留最原始的上述3组文件
2、kubeadm init phase certs all --config=/root/kubeadm.yaml重新生成证书
3、./update-kubeadm-cert.sh all 更新证书
这些操作后etcd服务正常启动,api-server也起来了,但是cni组件出现异常
image
查看日志为 Unable to authenticate the request due to an error: [invalid bearer token, square/go-jose: error i
应该是kubelet的哪个token没设置对,不知道要在哪里修改了

重新重新装一次calico吧

昨晚的calico日志是连不上apiserver,有可能是kubueproxy有问题,有可能10.98.0.1 这个 apiserver 的 svc ip 没映射好

发个微信二维码到我邮箱,下午微信帮你看一下

好的,谢谢

非常感谢大佬热心指导,成功修复了集群