Ansichten:
Profilanwendbarkeit: Stufe 1
Erlauben Sie Kubelet, iptables zu verwalten.
Kubelets können die erforderlichen Änderungen an iptables automatisch verwalten, basierend auf den von Ihnen gewählten Netzwerkoptionen für die Pods. 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.
Hinweis
Hinweis
Siehe die Azure AKS-Dokumentation für den Standardwert.

Auswirkung

Kubelet würde die iptables auf dem System verwalten und synchron halten. Wenn Sie eine andere iptables-Verwaltungslösung verwenden, könnte es zu Konflikten kommen.

Prüfung

Audit Method 1:
Wenn eine Kubelet-Konfigurationsdatei verwendet wird, überprüfen Sie, ob ein Eintrag für makeIPTablesUtilChains auf true gesetzt ist.
  1. SSH zum entsprechenden Knoten und führen Sie den folgenden Befehl auf jedem Knoten aus, um die passende Kubelet-Konfigurationsdatei zu finden:
    ps -ef | grep kubelet
    Die Ausgabe des obigen Befehls sollte etwas Ähnliches wie --config /etc/kubernetes/kubelet/kubelet-config.json zurückgeben, was den Speicherort der Kubelet-Konfigurationsdatei darstellt.
  2. Öffnen Sie die Kubelet-Konfigurationsdatei:
    cat /etc/kubernetes/kubelet/kubelet-config.json
  3. Überprüfen Sie, ob das Argument makeIPTablesUtilChains existiert und ob es auf true gesetzt ist.
  4. Wenn das --make-iptables-util-chains-Argument nicht existiert und eine Kubelet-Konfigurationsdatei durch --config angegeben ist, überprüfen Sie, dass die Datei makeIPTablesUtilChains nicht auf false setzt.
Audit Method 2:
Wenn Sie den API-Configz-Endpunkt verwenden, suchen Sie nach dem Status von authentication... "makeIPTablesUtilChains":true, indem Sie die Live-Konfiguration von den Knoten extrahieren, die Kubelet ausführen.
  1. 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=ip-192.168.31.226.aks.internal (example node name 
    from "kubectl get nodes") 
    
    curl -sSL "http://${HOSTNAME_PORT}/api/v1/nodes/${NODE_NAME}/proxy/configz"

Wiederherstellung

Remediation Method 1:
Bearbeiten Sie /etc/kubernetes/kubelet/kubelet-config.json und setzen Sie den untenstehenden Parameter auf false:
"makeIPTablesUtilChains": true
Remediation Method 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:
--make-iptables-util-chains=true
Remediation Method 3:
Wenn Sie den API-Configz-Endpunkt verwenden, suchen Sie nach dem Status von "makeIPTablesUtilChains": true, indem Sie die Live-Konfiguration von den Knoten extrahieren, die Kubelet ausführen:
Siehe schrittweise ConfigMap-Verfahren in der Kubernetes-Dokumentation und führen Sie 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=ip-192.168.31.226.aks.internal (example node name from 
     "kubectl get nodes")
     
     curl -sSL "http://${HOSTNAME_PORT}/api/v1/nodes/${NODE_NAME}/proxy/configz"
    
For all three remediations:
Starten Sie den kubelet-Dienst neu und überprüfen Sie den Status:
     systemctl daemon-reload
     systemctl restart kubelet.service
     systemctl status kubelet -l