Ansichten:
Profilanwendbarkeit: Stufe 1
Aktivieren Sie die Kubelet-Authentifizierung mit Zertifikaten.
Die Verbindungen vom Apiserver zum Kubelet werden verwendet, um Protokolle für Pods abzurufen, sich (über kubectl) mit laufenden Pods zu verbinden und die Port-Forwarding-Funktionalität des Kubelets zu nutzen. Diese Verbindungen enden am HTTPS-Endpunkt des Kubelets. Standardmäßig überprüft der Apiserver das Zertifikat des Kubelets nicht, was die Verbindung anfällig für Man-in-the-Middle-Angriffe macht und unsicher über unzuverlässige und/oder öffentliche Netzwerke auszuführen ist. Die Aktivierung der Kubelet-Zertifikatsauthentifizierung stellt sicher, dass der Apiserver das Kubelet authentifizieren kann, bevor er Anfragen übermittelt.
Hinweis
Hinweis
Weitere Informationen zum Standardwert finden Sie in der Dokumentation des EKS.

Auswirkung

Sie müssen TLS sowohl auf dem Apiserver als auch auf den Kubelets konfigurieren.

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.
  1. 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.
  2. Die Datei kann mit einem Befehl wie more oder less angezeigt werden, zum Beispiel so:
    sudo less /path/to/kubelet-config.json
  3. Überprüfen Sie, ob eine Client-Zertifikatsbehörde-Datei konfiguriert ist. Dies kann über ein Befehlszeilenargument mit --client-ca-file oder in der Kubelet-Konfigurationsdatei über "authentication": { "x509": {"clientCAFile": <path/to/client-ca-file> } } konfiguriert 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.
  1. Entdecken Sie alle Knoten in Ihrem Cluster:
    kubectl get nodes
  2. Initiieren Sie einen Proxy mit kubectl auf einem lokalen Port Ihrer Wahl. In diesem Beispiel verwenden wir 8080:
    kubectl proxy --port=8080
  3. Öffnen Sie in einem separaten Terminal für jeden Knoten den folgenden Befehl:
    export NODE_NAME=my-node-name
    curl http://localhost:8080/api/v1/nodes/${NODE_NAME}/proxy/configz
    Der Curl-Befehl gibt die API-Antwort zurück, die eine JSON-formatierte Zeichenkette darstellt, welche die Kubelet-Konfiguration repräsentiert.
  4. Überprüfen Sie, ob eine Client-Zertifikatsbehörde-Datei mit "authentication": { "x509": {"clientCAFile": <path/to/client-ca-file> } } in der API-Antwort konfiguriert ist.

Wiederherstellung

Behebungsmethode 1:
  1. Wenn Sie über die Kubelet-Konfigurationsdatei konfigurieren, SSH zu jedem Knoten und finden Sie den Kubelet-Prozess:
    ps -ef | grep kubelet
    Die Ausgabe des obigen Befehls liefert Details des aktiven Kubelet-Prozesses, aus denen wir den Speicherort der Konfigurationsdatei sehen können, die dem Kubelet-Dienst mit dem Argument --config bereitgestellt wird.
  2. Die Datei kann mit einem Befehl wie more oder less angezeigt werden, zum Beispiel so:
    sudo less /path/to/kubelet-config.json
  3. Konfigurieren Sie die Client-Zertifikatsbehörden-Datei, indem Sie den folgenden Parameter entsprechend festlegen:
    "authentication": { "x509": {"clientCAFile": <path/to/client-ca-file> } }
Bereinigungsmethode 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, 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:
--client-ca-file=<path/to/client-ca-file>
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 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 Dienst-Manager konfiguriert ist:
systemctl daemon-reload
systemctl restart kubelet.service
systemctl status kubelet -l