ビュー:
プロファイルの適用範囲:レベル1 - ワーカーノード
この推奨事項は、ストリーミング接続にタイムアウトを設定することの重要性を強調し、DoS攻撃、非アクティブ接続、および短時間のポート枯渇に関連するリスクを軽減することを目的としています。これらのタイムアウトを適切に設定することで、ネットワーク接続の安全かつ効率的な動作が確保されます。

手順

  1. 設定を監査して、--streaming-connection-idle-timeout引数が0に設定されていないことを確認してください。
    • 監査方法1:
      注意
      注意
      Kubeletは、設定ファイルまたはコマンドライン引数を介して構成できます。コマンドライン引数が優先されます。Kubeletの構成を監査する際には、コマンドライン引数と構成ファイルのエントリの両方を確認してください。
      1. 各ノードにSSH接続し、アクティブなKubeletプロセスの詳細を表示するには、次のコマンドを実行してください
        ps -ef | grep kubelet
      2. プロセスのコマンドラインに--streaming-connection-idle-timeout引数が含まれている場合、それが0に設定されていないことを確認してください。 --streaming-connection-idle-timeout引数が存在しない場合は、Kubelet構成ファイルの場所を指定する--config引数を参照してください
        cat /etc/kubernetes/kubelet/kubelet-config.json
      3. Kubelet設定ファイルを開いてください:
        sudo less /path/to/kubelet-config.json
      4. streamingConnectionIdleTimeout引数が0に設定されていないことを確認してください。
    • 監査方法2:
      APIのconfigzエンドポイントを使用する場合は、Kubeletを実行しているノードからライブ構成を抽出して、"streamingConnectionIdleTimeout": "4h0m0s"のステータスを検索することを検討してください。
      1. ローカルプロキシポートを設定し、以下の変数を提供してプロキシポート番号とノード名を指定してください
         HOSTNAME_PORT=localhost:8001 をエクスポートする NODE_NAME=my-node-name をエクスポートする curl -sSL "http://${HOSTNAME_PORT}/api/v1/nodes/${NODE_NAME}/proxy/configz" 
  2. 設定を修正して、--streaming-connection-idle-timeout引数が0に設定されていないことを確認してください。
    • 方法1:
      1. Kubeletの設定ファイルを変更する場合は、/etc/kubernetes/kubelet/kubelet-config.jsonファイルを編集してください
         { "streamingConnectionIdleTimeout": "4時間0分0秒" } 
      2. /etc/systemd/system/kubelet.service.d/10-kubelet-args.confファイルで--streaming-connection-idle-timeout引数を指定しないようにしてください。Kubelet構成ファイルが上書きされるためです。
      3. システムに基づいて、kubeletサービスを再起動してステータスを確認してください
         systemctl daemon-reload systemctl restart kubelet.service systemctl status kubelet -l 
    • メソッド2:
      1. 実行可能引数を使用する場合は、各ワーカーノードのkubeletサービスファイル/etc/systemd/system/kubelet.service.d/10-kubelet-args.confを編集し、KUBELET_ARGS変数文字列の末尾に以下のパラメータを追加してください
        --streaming-connection-idle-timeout=4h0m0s
      2. システムに基づいて、kubeletサービスを再起動してステータスを確認してください
         systemctl daemon-reload systemctl restart kubelet.service systemctl status kubelet -l 
    • 方法 3:
      1. APIのconfigzエンドポイントを使用する場合は、kubeletを実行しているノードからライブ構成を抽出し、"streamingConnectionIdleTimeout"のステータスを検索することを検討してください。
        kubectl proxy --port=8001 & export HOSTNAME_PORT=localhost:8001 export NODE_NAME=ip-192.168.31.226.ec2.internal curl -sSL "http://${HOSTNAME_PORT}/api/v1/nodes/${NODE_NAME}/proxy/configz" 
      2. システムに基づいて、kubeletサービスを再起動してステータスを確認してください
         systemctl daemon-reload systemctl restart kubelet.service systemctl status kubelet -l