プロファイル適用性: レベル1
ストリーミング接続のタイムアウトを無効にしないでください。
アイドルタイムアウトを設定することで、サービス拒否攻撃、非アクティブな接続、一時ポートの枯渇から保護されます。
注意デフォルトでは、
--streaming-connection-idle-timeoutは4時間に設定されていますが、これはお使いの環境にとって高すぎるかもしれません。適切に設定することで、そのようなストリーミング接続が正当な使用ケースに対応した後にタイムアウトすることをさらに保証できます。 |
注意Azure AKS のドキュメントでデフォルト値を確認してください。
|
影響
長時間接続が中断される可能性があります。
監査
Audit Method 1:
-
該当するノードにSSHで接続し、各ノードで次のコマンドを実行して実行中のkubeletプロセスを見つけます。
ps -ef | grep kubelet
- プロセスのコマンドラインに引数
streaming-connection-idle-timeoutが含まれている場合、それが0に設定されていないことを確認してください。 -
上記のコマンドの出力に
streaming-connection-idle-timeout引数が存在しない場合は、代わりにKubelet設定ファイルの場所を指定するconfig引数を参照してください。例:--config /etc/kubernetes/kubelet/kubelet-config.json。
- プロセスのコマンドラインに引数
-
Kubeletの設定ファイルを開く:
cat /etc/kubernetes/kubelet/kubelet-config.json
streamingConnectionIdleTimeout引数が"0"に設定されていないことを確認してください。
Audit Method 2:
APIのconfigzエンドポイントを使用する場合、Kubeletを実行しているノードからライブ構成を抽出して、
"streamingConnectionIdleTimeout":"4h0m0s"のステータスを検索することを検討してください。-
ローカルプロキシポートと次の変数を設定し、プロキシポート番号とノード名を提供してください。
HOSTNAME_PORT="localhost-and-port-number"NODE_NAME="The-Name-Of-Node-To-Extract-Configuration" を "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"
修復
Remediation Method 1:
Kubeletの設定ファイルを変更する場合、
/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設定ファイルを上書きしてしまうためです。Remediation Method 2:
実行可能な引数を使用する場合は、各ワーカーノードのKubeletサービスファイル
/etc/systemd/system/kubelet.service.d/10-kubelet-args.confを編集し、KUBELET_ARGS変数文字列の末尾に以下のパラメータを追加してください。--streaming-connection-idle-timeout=4h0m0s
Remediation Method 3:
APIのconfigzエンドポイントを使用する場合、Kubeletを実行しているノードからライブ構成を抽出して、
"streamingConnectionIdleTimeout":のステータスを検索することを検討してください。Kubernetesドキュメントで手順を追ったconfigmapの手続きを確認し、監査プロセスからcurlステートメントを再実行してkubeletの設定変更を確認してください。
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 remediations:
kubeletサービスを再起動し、ステータスを確認してください。 systemctl daemon-reload
systemctl restart kubelet.service
systemctl status kubelet -l
