ビュー:
プロファイル適用性: レベル1
ストリーミング接続のタイムアウトを無効にしないでください。
アイドルタイムアウトを設定することで、サービス拒否攻撃、非アクティブな接続、短命ポートの枯渇から保護されます。
注意
注意
デフォルトでは、--streaming-connection-idle-timeoutは4時間に設定されていますが、これはお客様の環境にとって高すぎるかもしれません。適切に設定することで、そのようなストリーミング接続が正当な使用ケースに対応した後にタイムアウトすることをさらに保証します。
注意
注意
デフォルト値についてはEKSのドキュメントを参照してください。

影響

長時間接続が中断される可能性があります。

監査

監査方法1:
  1. 関連ノードにSSH接続してください。
  2. 各ノードで次のコマンドを実行して、実行中のkubeletプロセスを見つけてください。
    ps -ef | grep kubelet
    プロセスのCommand Lineに引数streaming-connection-idle-timeoutが含まれている場合、それが0に設定されていないことを確認してください。
  3. 出力にstreaming-connection-idle-timeout引数が存在しない場合は、代わりにKubelet設定ファイルの場所を指定するconfig引数を参照してください。例: --config /etc/kubernetes/kubelet/kubelet-config.json
  4. Kubelet設定ファイルを開く:
    cat /etc/kubernetes/kubelet/kubelet-config.json
    streamingConnectionIdleTimeout 引数が 0 に設定されていないことを確認してください。
監査方法2:
api configzエンドポイントを使用する場合、kubeletを実行しているノードからライブ構成を抽出して、"streamingConnectionIdleTimeout":"4h0m0s"のステータスを検索することを検討してください。
ローカルプロキシポートと以下の変数を設定し、プロキシポート番号とノード名を提供してください: 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.ec2.internal (example node name from
"kubectl get nodes")
curl -sSL "http://${HOSTNAME_PORT}/api/v1/nodes/${NODE_NAME}/proxy/configz"

修復

修復方法1:
Kubeletの設定ファイルを変更する場合、kubelet-config.jsonファイル/etc/kubernetes/kubelet/kubelet-config.jsonを編集し、以下のパラメータを#h#m#sの形式でゼロ以外の値に設定してください。
"streamingConnectionIdleTimeout": "4h0m0s"
kubeletサービスファイル/etc/systemd/system/kubelet.service.d/10-kubelet-args.conf--streaming-connection-idle-timeout引数を指定していないことを確認してください。これはKubeletの設定ファイルを上書きしてしまうためです。
修復方法2:
実行可能な引数を使用する場合、各ワーカーノードの kubelet サービスファイル /etc/systemd/system/kubelet.service.d/10-kubelet-args.conf を編集し、KUBELET_ARGS 変数文字列の末尾に以下のパラメータを追加してください。
--streaming-connection-idle-timeout=4h0m0s
修復方法3:
api configzエンドポイントを使用する場合、kubeletを実行しているノードからライブ構成を抽出して、"streamingConnectionIdleTimeout":のステータスを検索することを検討してください。
詳細な手順を確認するには、ライブクラスターでのノードのKubeletの再構成を参照し、監査プロセスからcurlステートメントを再実行してkubeletの構成変更を確認してください。
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"
3つの修正すべてに対して: システムに基づいて、kubeletサービスを再起動し、ステータスを確認してください。
systemctl daemon-reload
systemctl restart kubelet.service
systemctl status kubelet -l