Profilanwendbarkeit: Stufe 1
Erlauben Sie Kubelet, iptables zu verwalten.
Kubelets können die erforderlichen Änderungen an iptables automatisch verwalten, basierend
darauf, wie Sie Ihre Netzwerkoptionen für die Pods wählen. Es wird empfohlen, die
Verwaltung der Änderungen an iptables den Kubelets zu überlassen. Dies stellt sicher,
dass die iptables-Konfiguration mit der Netzwerk-Konfiguration der Pods synchron bleibt.
Eine manuelle Konfiguration von iptables bei dynamischen Änderungen der Pod-Netzwerkkonfiguration
könnte die Kommunikation zwischen Pods/Containern und zur Außenwelt beeinträchtigen.
Möglicherweise sind Ihre iptables-Regeln zu restriktiv oder zu offen.
HinweisSiehe die Amazon EKS-Dokumentation für den Standardwert.
|
Auswirkung
Kubelet würde die iptables auf dem System verwalten und sie synchron halten. Wenn
Sie eine andere iptables-Verwaltungslösung verwenden, kann es zu Konflikten kommen.
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 die Ausgabe das Argument--make-iptables-util-chainsenthält, überprüfen Sie, ob es auftruegesetzt ist. -
Wenn das Argument
--make-iptables-util-chainsnicht existiert und eine Kubelet-Konfigurationsdatei durch--configangegeben ist, überprüfen Sie, dass die DateimakeIPTablesUtilChainsnicht auffalsegesetzt ist.
Prüfmethode 2:
Wenn Sie den api configz Endpunkt verwenden, ziehen Sie in Betracht, den Status von
"makeIPTablesUtilChains":true zu überprüfen, 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:"makeIPTablesUtilChains": true
Stellen Sie sicher, dass
/etc/systemd/system/kubelet.service.d/10-kubelet-args.conf das Argument --make-iptables-util-chains nicht setzt, da dies Ihre 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.--make-iptables-util-chains:true
Behebungsmethode 3:
Wenn Sie den api configz Endpunkt verwenden, ziehen Sie in Betracht, den Status von
"makeIPTablesUtilChains":true zu überprüfen, indem Sie die Live-Konfiguration von den Knoten extrahieren, die kubelet
ausführen.Detaillierte Schritt-für-Schritt-Anweisungen zur ConfigMap finden Sie in Rekonfigurieren eines Node-Kubelets in einem Live-Cluster, und 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 Behebungen: Starten Sie basierend auf Ihrem System den
kubelet-Dienst neu und überprüfen Sie den Status:systemctl daemon-reload systemctl restart kubelet.service systemctl status kubelet -l
