Ansichten:
Profilanwendbarkeit: Stufe 1
Deaktivieren Sie keine Timeouts bei Streaming-Verbindungen.
Das Festlegen von Leerlauf-Timeouts stellt sicher, dass Sie vor Denial-of-Service-Angriffen, inaktiven Verbindungen und dem Erschöpfen von temporären Ports geschützt sind.
Hinweis
Hinweis
Standardmäßig ist --streaming-connection-idle-timeout auf 4 Stunden eingestellt, was für Ihre Umgebung möglicherweise zu hoch ist. Eine entsprechende Anpassung würde zusätzlich sicherstellen, dass solche Streaming-Verbindungen nach der Bedienung legitimer Anwendungsfälle ablaufen.
Hinweis
Hinweis
Siehe die GKE-Dokumentation für den Standardwert.

Auswirkung

Langfristige Verbindungen könnten unterbrochen werden.

Prüfung

Prüfmethode 1:
  1. SSH zu jedem Knoten und führen Sie den folgenden Befehl aus, um den laufenden Kubelet-Prozess zu finden:
    ps -ef | grep kubelet
  2. Wenn die Befehlszeile für den Prozess das Argument streaming-connection-idle-timeout enthält, überprüfen Sie, dass es nicht auf 0 gesetzt ist.
    Wenn das streaming-connection-idle-timeout-Argument nicht in der Ausgabe des obigen Befehls vorhanden ist, beziehen Sie sich stattdessen auf das Konfigurationsargument, das den Speicherort der Kubelet-Konfigurationsdatei angibt, z. B. --config /etc/kubernetes/kubelet-config.yaml.
  3. Öffnen Sie die Kubelet-Konfigurationsdatei:
    cat /etc/kubernetes/kubelet-config.yaml
  4. Überprüfen Sie, dass das Argument streamingConnectionIdleTimeout nicht auf 0 gesetzt ist.
Prüfmethode 2:
Wenn Sie den API-Configz-Endpunkt verwenden, ziehen Sie in Betracht, den Status von "streamingConnectionIdleTimeout":"4h0m0s" 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-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=gke-cluster-1-pool1-5e572947-r2hg (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-config.yaml und setzen Sie den untenstehenden Parameter auf einen Wert ungleich null im Format #h#m#s:
"streamingConnectionIdleTimeout": "4h0m0s"
Stellen Sie sicher, dass die Kubelet-Dienstdatei /etc/systemd/system/kubelet.service.d/10-kubelet-args.conf kein --streaming-connection-idle-timeout-Argument angibt, 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 folgenden Parameter hinzu:
--streaming-connection-idle-timeout=4h0m0s
Sanierungsmethode 3:
Wenn Sie den api configz Endpunkt verwenden, ziehen Sie in Betracht, den Status von "streamingConnectionIdleTimeout" zu suchen, indem Sie die Live-Konfiguration von den Knoten extrahieren, die kubelet ausführen.
Finden Sie schrittweise ConfigMap-Verfahren in der Kubernetes-Dokumentation 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=gke-cluster-1-pool1-5e572947-r2hg (example node name from 
"kubectl get nodes") 

curl -sSL "http://${HOSTNAME_PORT}/api/v1/nodes/${NODE_NAME}/proxy/configz"
Für alle drei Behebungsmethoden:
Basierend auf Ihrem System starten Sie den kubelet-Dienst neu und überprüfen Sie den Status:
systemctl daemon-reload
systemctl restart kubelet.service
systemctl status kubelet -l