Zum Inhalt springen
ecdsa.com
kubectl (client-go)Docker und Kubernetes

Fehlermeldung

Unable to connect to the server: tls: failed to verify certificate: x509: certificate has expired or is not yet valid

Go hängt beide Zeitpunkte an: „…: current time <client time> is after <notAfter>“ (oder „is before <notBefore>“ bei Zertifikaten, die noch nicht gültig sind) – daran siehst du, welche Seite falsch liegt.

kubectl (client-go) — the API server certificate (often after a year without kubeadm upgrades) is outside its validity period

Was der Fehler bedeutet

Der API-Server hat ein Zertifikat vorgelegt, das nach der lokalen Uhrzeit von kubectl außerhalb seines Gültigkeitszeitraums liegt. In kubeadm-Clustern werden die Control-Plane-Zertifikate für ein Jahr ausgestellt und nur bei kubeadm-Upgrades automatisch erneuert; Cluster, die ein Jahr lang niemand angefasst hat, scheitern deshalb genau so. Eine falsch gehende Uhr auf dem Client erzeugt denselben Fehler.

Warum der Fehler auftritt

So behebst du den Fehler

  1. 1.

    Ablaufdaten der Zertifikate auflisten

    kubeadm certs check-expiration zeigt jedes Control-Plane-Zertifikat mit seiner verbleibenden Laufzeit.

    bash
    # On a control-plane node
    sudo kubeadm certs check-expiration
  2. 2.

    Zertifikate erneuern und Control Plane neu starten

    kubeadm certs renew all schreibt neue Zertifikate; die Static Pods müssen neu gestartet werden, um sie zu laden, und kubeconfigs mit eingebetteten Client-Zertifikaten müssen aktualisiert werden.

    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. 3.

    Uhrzeit des Clients prüfen

    Synchronisiere die Uhr, wenn die vollständige Meldung „is before“ enthält.

    bash
    date -u; timedatectl status | grep -i synchronized

Verwandte Fehler

Gesamte Signaturfehler-Datenbank durchsuchen