Profilanwendbarkeit: Stufe 1
Aktivieren Sie die Rotation des kubelet-Serverzertifikats.
RotateKubeletServerCertificate
veranlasst den Kubelet, sowohl ein Dienstzertifikat nach dem Bootstrapping seiner
Client-Anmeldeinformationen anzufordern als auch das Zertifikat zu rotieren, wenn
seine bestehenden Anmeldeinformationen ablaufen. Diese automatisierte periodische
Rotation stellt sicher, dass es keine Ausfallzeiten aufgrund abgelaufener Zertifikate
gibt und somit die Verfügbarkeit im CIA (Vertraulichkeit, Integrität und Verfügbarkeit)
Sicherheitsdreieck gewährleistet wird.![]() |
HinweisDiese Empfehlung gilt nur, wenn Sie kubelets ihre Zertifikate vom API-Server beziehen
lassen. Falls Ihre kubelet-Zertifikate von einer externen Behörde/Tool (z.B. Vault)
stammen, müssen Sie die Rotation selbst implementieren.
|
![]() |
HinweisSiehe die GKE-Dokumentation für den Standardwert.
|
Prüfung
Prüfmethode 1:
- SSH zu jedem Knoten und führen Sie den folgenden Befehl aus, um den Kubelet-Prozess
zu finden:
ps -ef | grep kubelet
- Wenn die Ausgabe des obigen Befehls das ausführbare Argument
--rotate-kubelet-server-certificate
enthält, überprüfen Sie, ob es auf "true" gesetzt ist. - Wenn der Prozess das ausführbare Argument
--rotate-kubelet-server-certificate
nicht hat, überprüfen Sie die Kubelet-Konfigurationsdatei.Die Ausgabe des obigen Befehls sollte etwas Ähnliches wie--config /etc/kubernetes/kubelet-config.yaml
zurückgeben, was den Speicherort der Kubelet-Konfigurationsdatei darstellt. -
Öffnen Sie die Kubelet-Konfigurationsdatei:
cat /etc/kubernetes/kubelet-config.yaml
- Überprüfen Sie, ob das Argument
RotateKubeletServerCertificate
im AbschnittfeatureGates
vorhanden ist und auftrue
gesetzt ist.
Prüfmethode 2:
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.Legen Sie die lokale Proxy-Portnummer und die folgenden Variablen fest und geben Sie
die Proxy-Portnummer und den Knotennamen an:
HOSTNAME_PORT="localhost-and-port-number" NODE_NAME="The-Name-Of-Node-To-Extract-Configuration"
from the output of "kubectl get nodes"
kubectl proxy --port=8001 & export HOSTNAME_PORT=localhost:8001 (example host and port number) export NODE_NAME=gke-cluster-1-pool1-5e572947-r2hg (example node name from "kubectl get nodes") curl -sSL "http://${HOSTNAME_PORT}/api/v1/nodes/${NODE_NAME}/proxy/configz"
Wiederherstellung
Behebungsmethode 1:
Wenn Sie die Kubelet-Konfigurationsdatei ändern, bearbeiten Sie die Datei kubelet-config.json
/etc/kubernetes/kubelet-config.yaml
und setzen Sie den untenstehenden Parameter auf true:"featureGates": { "RotateKubeletServerCertificate":true },
Stellen Sie sicher, dass die Kubelet-Dienstdatei
/etc/systemd/system/kubelet.service.d/10-kubelet-args.conf
das ausführbare Argument --rotate-kubelet-server-certificate
nicht auf false setzt, da dies die Kubelet-Konfigurationsdatei überschreiben würde.Behebungsmethode 2:
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 am Ende der KUBELET_ARGS
-Variablenzeichenfolge den folgenden Parameter hinzu:--rotate-kubelet-server-certificate=true
Behebungsmethode 3:
Wenn Sie den API-Configz-Endpunkt verwenden, ziehen Sie in Betracht, den Status von
"RotateKubeletServerCertificate":
zu überprüfen, indem Sie die aktuelle Konfiguration von den Knoten extrahieren, die
Kubelet ausführen.Finden Sie Schritt-für-Schritt-Anleitungen zur ConfigMap in der Kubernetes-Dokumentation
und führen Sie dann den Curl-Befehl aus dem Audit-Prozess erneut aus, um Änderungen
an der Kubelet-Konfiguration zu überprüfen:
kubectl proxy --port=8001 & export HOSTNAME_PORT=localhost:8001 (example host and port number) export NODE_NAME=gke-cluster-1-pool1-5e572947-r2hg (example node name from "kubectl get nodes") curl -sSL "http://${HOSTNAME_PORT}/api/v1/nodes/${NODE_NAME}/proxy/configz"
Für alle drei Behebungsmethoden:
Basierend auf Ihrem System starten Sie den
kubelet
-Dienst neu und überprüfen Sie den Status. Das folgende Beispiel zeigt, wie Sie systemctl
zur Verwaltung von Diensten verwenden:systemctl daemon-reload systemctl restart kubelet.service systemctl status kubelet -l