Message d’erreur
Unable to connect to the server: tls: failed to verify certificate: x509: certificate has expired or is not yet valid
Go ajoute les deux instants : « …: current time <client time> is after <notAfter> » (ou « is before <notBefore> » pour les certificats qui ne sont pas encore valides), ce qui vous indique de quel côté se trouve l’erreur.
kubectl (client-go) — the API server certificate (often after a year without kubeadm upgrades) is outside its validity period
Ce que cela signifie
Le serveur d’API a présenté un certificat hors de sa période de validité selon l’heure locale de kubectl. Dans les clusters kubeadm, les certificats du plan de contrôle sont émis pour un an et ne sont renouvelés automatiquement que lors des mises à niveau kubeadm : les clusters laissés sans intervention pendant un an échouent donc exactement de cette manière. Une horloge erronée côté client produit la même erreur.
Pourquoi cela se produit
Les certificats du plan de contrôle kubeadm ont expiré au bout d’un an
fréquenteLes certificats apiserver, front-proxy et etcd (ainsi que les certificats client d’admin.conf) sont valides un an par défaut ; ils sont renouvelés lors de kubeadm upgrade ou avec kubeadm certs renew.
Le certificat client de votre kubeconfig a expiré
occasionnelleUne fois les certificats du serveur renouvelés, un ancien admin.conf contenant un certificat client expiré échoue à l’authentification (avec un autre message, « You must be logged in to the server (Unauthorized) »).
Décalage d’horloge
occasionnelleDans le message complet, « is before » indique une horloge client en retard sur le notBefore du certificat.
Comment corriger l’erreur
- 1.
Lister les dates d’expiration des certificats
kubeadm certs check-expiration affiche chaque certificat du plan de contrôle avec sa durée de vie restante.
bash # On a control-plane node sudo kubeadm certs check-expiration - 2.
Renouveler les certificats et redémarrer le plan de contrôle
kubeadm certs renew all écrit de nouveaux certificats ; les pods statiques doivent être redémarrés pour les charger, et les kubeconfig contenant des certificats client intégrés doivent être actualisés.
bash sudo kubeadm certs renew all # restart the control-plane static pods so they load the new certificates, # then refresh your kubeconfig (the embedded client certificate was renewed too): sudo cp /etc/kubernetes/admin.conf "$HOME/.kube/config" - 3.
Vérifier l’heure du client
Synchronisez l’horloge si le message complet indique « is before ».
bash date -u; timedatectl status | grep -i synchronized