Profilanwendbarkeit: Stufe 1
Nicht alle Anfragen zulassen. Explizite Autorisierung aktivieren.
Kubelets können so konfiguriert werden, dass sie alle authentifizierten Anfragen (auch
anonyme) ohne ausdrückliche Autorisierungsprüfungen vom Apiserver zulassen. Sie sollten
dieses Verhalten einschränken und nur ausdrücklich autorisierte Anfragen zulassen.
HinweisWeitere Informationen finden Sie in der Dokumentation des EKS für den Standardwert.
|
Auswirkung
Nicht autorisierte Anfragen werden abgelehnt.
Prüfung
Prüfmethode 1:
Kubelets können Konfigurationen über eine Konfigurationsdatei und in einigen Fällen
über Befehlszeilenargumente akzeptieren. Es ist wichtig zu beachten, dass Parameter,
die als Befehlszeilenargumente bereitgestellt werden, ihre entsprechenden Parameter
in der Konfigurationsdatei überschreiben (siehe
--config Details in der Kubelet CLI-Referenz für Weitere Informationen, wo Sie auch herausfinden können, welche Konfigurationsparameter
als Befehlszeilenargument bereitgestellt werden können).Vor diesem Hintergrund ist es wichtig, beim Überprüfen der Kubelet-Konfiguration sowohl
das Vorhandensein von Befehlszeilenargumenten als auch von Einträgen in der Konfigurationsdatei
zu überprüfen.
-
SSH zu jedem Knoten und führen Sie den folgenden Befehl aus, um den Kubelet-Prozess zu finden:
ps -ef | grep kubelet
Die Ausgabe des obigen Befehls liefert Details des aktiven Kubelet-Prozesses, aus denen wir die Befehlszeilenargumente des Prozesses sehen können. Beachten Sie auch den Speicherort der Konfigurationsdatei, die mit dem--config-Argument angegeben wird, da diese zur Überprüfung der Konfiguration benötigt wird. -
Die Datei kann mit einem Befehl wie
moreoderlessangezeigt werden, zum Beispiel so:sudo less /path/to/kubelet-config.json
-
Überprüfen Sie, ob die Webhook-Authentifizierung aktiviert ist. Dies kann als Befehlszeilenargument für den Kubelet-Dienst mit
--authentication-token-webhookoder in der Kubelet-Konfigurationsdatei über"authentication": { "webhook": { "enabled": true } }aktiviert werden. -
Überprüfen Sie, ob der Autorisierungsmodus auf WebHook eingestellt ist. Dies kann als Befehlszeilenargument für den Kubelet-Dienst mit
--authorization-mode=Webhookoder in der Konfigurationsdatei über"authorization": { "mode": "Webhook" }festgelegt werden.
Prüfmethode 2:
Es ist auch möglich, die laufende Konfiguration eines Kubelet über den
/configz-Endpunkt der Kubernetes-API zu überprüfen. Dies kann erreicht werden, indem kubectl verwendet wird, um Ihre Anfragen an die API zu proxyen.-
Entdecken Sie alle Knoten in Ihrem Cluster, indem Sie den folgenden Befehl ausführen:
kubectl get nodes
-
Initiieren Sie einen Proxy mit
kubectlauf einem lokalen Port Ihrer Wahl. In diesem Beispiel verwenden wir 8080:kubectl proxy --port=8080
-
Während dies läuft, führen Sie in einem separaten Terminal den folgenden Befehl für jeden Knoten aus:
export NODE_NAME=my-node-name curl http://localhost:8080/api/v1/nodes/${NODE_NAME}/proxy/configzDer Curl-Befehl gibt die API-Antwort zurück, die eine JSON-formatierte Zeichenkette darstellt, welche die Kubelet-Konfiguration repräsentiert. -
Überprüfen Sie, ob die Webhook-Authentifizierung mit
"authentication": { "webhook": { "enabled": true } }in der API-Antwort aktiviert ist. -
Überprüfen Sie, dass der Autorisierungsmodus auf WebHook gesetzt ist mit
"authorization": { "mode": "Webhook" }in der API-Antwort.
Wiederherstellung
Behebungsmethode 1:
-
Wenn Sie über die Kubelet-Konfigurationsdatei konfigurieren, SSH zu jedem Knoten und führen Sie den folgenden Befehl aus, um den Kubelet-Prozess zu finden:
ps -ef | grep kubelet
Die Ausgabe liefert Details des aktiven Kubelet-Prozesses, aus denen wir den Speicherort der Konfigurationsdatei erkennen können, die dem Kubelet-Dienst mit dem Argument--configbereitgestellt wird. -
Die Datei kann mit einem Befehl wie
moreoderlessangezeigt werden, zum Beispiel so:sudo less /path/to/kubelet-config.json
-
Aktivieren Sie die Webhook-Authentifizierung, indem Sie den folgenden Parameter festlegen:
"authentication": { "webhook": { "enabled": true } } -
Als Nächstes setzen Sie den Autorisierungsmodus auf Webhook, indem Sie den folgenden Parameter festlegen:
"authorization": { "mode": "Webhook" }Detaillierte Informationen zu den Feldern für Authentifizierung und Autorisierung finden Sie in der Kubelet-Konfigurationsdokumentation.
Behebungsmethode 2:
Wenn ausführbare Argumente verwendet werden, bearbeiten Sie die Kubelet-Dienstdatei
auf jedem Worker-Knoten und stellen Sie sicher, dass die unten stehenden Parameter
Teil der
KUBELET_ARGS-Variablenzeichenfolge sind.Für Systeme, die
systemd verwenden, wie die Amazon EKS optimierten Amazon Linux oder Bottlerocket AMIs, kann
diese Datei unter /etc/systemd/system/kubelet.service.d/10-kubelet-args.conf gefunden werden. Andernfalls müssen Sie möglicherweise die Dokumentation für Ihr
gewähltes Betriebssystem konsultieren, um festzustellen, welcher Dienstmanager konfiguriert
ist:--authentication-token-webhook --authorization-mode=Webhook
Für beide Abhilfemaßnahmen:
Basierend auf Ihrem System starten Sie den
kubelet-Dienst neu und überprüfen Sie den Dienststatus. Das folgende Beispiel gilt für Betriebssysteme,
die systemd verwenden, wie die für Amazon EKS optimierten Amazon Linux- oder Bottlerocket-AMIs,
und ruft den systemctl-Befehl auf. Wenn systemctl nicht verfügbar ist, müssen Sie die Dokumentation für Ihr gewähltes Betriebssystem
konsultieren, um festzustellen, welcher Dienstmanager konfiguriert ist:systemctl daemon-reload systemctl restart kubelet.service systemctl status kubelet -l
