Ansichten:
Profilanwendbarkeit: Stufe 1 - Worker-Knoten
Aktivieren Sie die Rotation des kubelet-Serverzertifikats, um die kontinuierliche Systemverfügbarkeit sicherzustellen und Ausfallzeiten durch abgelaufene Zertifikate zu vermeiden. Die RotateKubeletServerCertificate-Funktion automatisiert den Erneuerungsprozess, indem der kubelet sein Dienstzertifikat anfordert und rotiert, sobald die vorhandenen Anmeldeinformationen ablaufen, und unterstützt somit die CIA-Sicherheitstriade (Vertraulichkeit, Integrität und Verfügbarkeit). Diese Funktion ist nur relevant, wenn die kubelets ihre Zertifikate vom API-Server erhalten; wenn Zertifikate von einer externen Behörde oder einem Tool wie Vault ausgestellt werden, müssen Sie den Rotationsprozess eigenständig verwalten.
Hinweis
Hinweis
Diese Empfehlung ist nur anwendbar, wenn Kubelets ihre Zertifikate vom API-Server erhalten. Wenn Ihre Kubelet-Zertifikate von einer externen Behörde/Tool (z. B. Vault) ausgestellt werden, müssen Sie die Rotation manuell implementieren.

Auswirkung

Das Aktivieren der Zertifikatsrotation vermeidet potenzielle Ausfallzeiten, die durch abgelaufene Zertifikate verursacht werden, und gewährleistet so die kontinuierliche Verfügbarkeit und Zuverlässigkeit des Kubelet-Dienstes.

Prüfung

Prüfmethode 1:
  1. SSH in jeden Knoten und führen Sie den folgenden Befehl aus, um den Kubelet-Prozess zu finden:
    ps -ef | grep kubelet
  2. Wenn die Befehlsausgabe das Argument --rotate-kubelet-server-certificate enthält, überprüfen Sie, ob es auf "true" gesetzt ist. Wenn das Argument nicht vorhanden ist, überprüfen Sie die Kubelet-Konfigurationsdatei, die durch das Argument --config angegeben ist:
    cat /etc/kubernetes/kubelet/kubelet-config.json
  3. Öffnen Sie die Kubelet-Konfigurationsdatei:
    sudo less /path/to/kubelet-config.json
  4. Überprüfen Sie, ob das Argument RotateKubeletServerCertificate im Abschnitt featureGates vorhanden ist und auf true gesetzt ist.
Prüfmethode 2:
  1. Wenn Sie den API-Configz-Endpunkt verwenden, ziehen Sie in Betracht, den Status von RotateKubeletServerCertificate:true zu suchen, indem Sie die Live-Konfiguration von den Knoten extrahieren, die Kubelet ausführen. Setzen Sie die lokale Proxy-Portnummer und die folgenden Variablen, indem Sie die Proxy-Portnummer und den Knotennamen angeben:
    kubectl proxy --port=8001 &
          export HOSTNAME_PORT=localhost:8001
          export NODE_NAME=The-Name-Of-Node-To-Extract-Configuration
          kubectl get nodes
  2. Führen Sie folgenden Befehl aus:
    curl -sSL "http://${HOSTNAME_PORT}/api/v1/nodes/${NODE_NAME}/proxy/configz"

Wiederherstellung

Behebungsmethode 1:
  1. Wenn Sie die Kubelet-Konfigurationsdatei ändern, bearbeiten Sie die Datei /etc/kubernetes/kubelet/kubelet-config.json:
          {
          "featureGates": {
          "RotateKubeletServerCertificate": true
          }
          }
         
  2. Stellen Sie sicher, dass die Kubelet-Dienstdatei /etc/systemd/system/kubelet.service.d/10-kubelet-args.conf das Argument --rotate-kubelet-server-certificate nicht auf false setzt, da dies die Kubelet-Konfigurationsdatei überschreiben würde.
Behebungsmethode 2:
  1. Wenn ausführbare Argumente verwendet werden, bearbeiten Sie die Kubelet-Dienstdatei /etc/systemd/system/kubelet.service.d/10-kubelet-args.conf auf jedem Worker-Knoten und fügen Sie den untenstehenden Parameter am Ende der KUBELET_ARGS-Variablenzeichenfolge hinzu:
    --rotate-kubelet-server-certificate=true
Behebungsmethode 3:
  1. Wenn Sie den API-Configz-Endpunkt verwenden, ziehen Sie in Betracht, den Status von RotateKubeletServerCertificate zu suchen, indem Sie die Live-Konfiguration von den Knoten extrahieren, die Kubelet ausführen.
    kubectl proxy --port=8001 &
          export HOSTNAME_PORT=localhost:8001
          export NODE_NAME=ip-192.168.31.226.ec2.internal
          curl -sSL "http://${HOSTNAME_PORT}/api/v1/nodes/${NODE_NAME}/proxy/configz"
Für alle drei Behebungsmethoden:
Starten Sie den Kubelet-Dienst neu und überprüfen Sie den Status. Das folgende Beispiel gilt für die Verwaltung von Diensten mit systemctl:
systemctl daemon-reload
    systemctl restart kubelet.service
    systemctl status kubelet -l