Profilanwendbarkeit: Stufe 1
Aktivieren Sie die Rotation des kubelet-Serverzertifikats.
RotateKubeletServerCertificate veranlasst den Kubelet, sowohl ein Serverzertifikat 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/einem externen Tool
(z. B. Vault) stammen, müssen Sie die Rotation selbst implementieren.
|
HinweisSiehe die Amazon EKS-Dokumentation für den Standardwert.
|
Prüfung
Prüfmethode 1:
-
SSH zu jedem Knoten.
-
Führen Sie den folgenden Befehl auf jedem Knoten aus, um den Kubelet-Prozess zu finden:
ps -ef | grep kubelet
Wenn das Ausgabeergebnis das ausführbare Argument--rotate-kubelet-server-certificateenthält, überprüfen Sie, ob es auftruegesetzt ist.Wenn der Prozess das ausführbare Argument--rotate-kubelet-server-certificatenicht hat, überprüfen Sie die Kubelet-Konfigurationsdatei. Die Ausgabe sollte etwas Ähnliches wie--config /etc/kubernetes/kubelet/kubelet-config.jsonzurückgeben, was den Speicherort der Kubelet-Konfigurationsdatei angibt. -
Öffnen Sie die Kubelet-Konfigurationsdatei:
cat /etc/kubernetes/kubelet/kubelet-config.json
-
Überprüfen Sie, ob das Argument
RotateKubeletServerCertificateim AbschnittfeatureGatesvorhanden ist und auftruegesetzt ist.
Prüfmethode 2:
Wenn Sie den api configz Endpunkt verwenden, ziehen Sie in Betracht, nach dem 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-und-portnummer" NODE_NAME="Der-Name-Des-Knotens-Zur-Konfigurationsausgabe"
aus der Ausgabe von "kubectl get nodes"kubectl proxy --port=8001 &
export HOSTNAME_PORT=localhost:8001 (example host and port number)
export NODE_NAME=ip-192.168.31.226.ec2.internal (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/kubelet-config.json und setzen Sie den folgenden Parameter auf true:"featureGates": { "RotateKubeletServerCertificate":true }
Stellen Sie außerdem 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 untenstehenden 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 suchen, indem Sie die Live-Konfiguration von den Knoten extrahieren, die Kubelet
ausführen.Detaillierte Schritt-für-Schritt-Anleitungen zu ConfigMap-Verfahren finden Sie in
Rekonfigurieren eines Node-Kubelets in einem Live-Cluster. Führen Sie dann die Curl-Anweisung 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=ip-192.168.31.226.ec2.internal (example node name from
"kubectl get nodes")
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 Verwendung
von systemctl zur Verwaltung von Diensten:systemctl daemon-reload systemctl restart kubelet.service systemctl status kubelet -l
