curl --insecure https://<IP>:6443/healthz>>curl: (28) Failed to connect to <IP> port 6443 after 21051 ms: Could not connect to server
journalctl -xeu kubelet logs on the affected node:E1008 <> bootstrap.go:266] part of the existing bootstrap client certificate in /etc/kubernetes/kubelet.conf is expired: <date> +0000 UTCE1008 <> run.go:74] "command failed" err="failed to run Kubelet: unable to load bootstrap kubeconfig: stat /etc/kubernetes/bootstrap-kubelet.conf: no such file or directory"kubelet.service: Main process exited, code=exited, status=1/FAILUREkubelet.service: Failed with result 'exit-code'.
kubectl get nodes may show a node in a NotReady state:# kubectl get nodes
NAME STATUS ROLES AGE VERSION test-1 Ready control-plane,master 571d v1.25.6+vmware.wcp.2 test-2 NotReady control-plane,master 571d v1.25.6+vmware.wcp.2 test-3 Ready control-plane,master 571d v1.25.6+vmware.wcp.2
vSphere Kubernetes Service
The underlying cause of the issue is an expired kubelet client certificate, which is hard-coded into the /etc/kubernetes/kubelet.conf file on the affected control plane node. This prevents the kubelet service from starting and establishing a connection to the API server on port 6443. Other control plane nodes are correctly referencing rotated and valid certificates, indicating an inconsistency in the configuration of the affected node.
/etc/kubernetes/kubelet.conf file from a healthy control plane node (where certificates are correctly referenced as /var/lib/kubelet/pki/kubelet-client-current.pem) to the affected node. This will replace the hard-coded expired certificates with the correct configuration.systemctl restart kubelet.service
systemctl status kubelet.service
kubectl get pods -A -o widecrictl ps -a
kubectl get nodes -o wide