認証のない Kubelet 読み取り専用ポートの有効化

認証のない kubelet の読み取り専用ポートを無効にし、必要な監視を保護された経路へ移してください。

説明

--read-only-port が 0 以外の場合、認証と認可のない kubelet の読み取り専用ポートが開く可能性があります。到達できるクライアントに、ノードやワークロードの情報が不要に公開されるおそれがあります。

読み取り専用でも、攻撃者の情報収集に役立つ場合があります。本番環境では無効にし、必要な監視を認証・認可が適用される TLS エンドポイントへ移してください。

想定される影響

  • 認証なしでノード情報を取得できるおそれがあります。
  • ノードやワークロードの状態を調べるために悪用される可能性があります。
  • kubelet の管理用アクセス経路が不要に広がる場合があります。

対処方法

  • readOnlyPort: 0 または従来の --read-only-port=0 を設定してください。
  • 依存する監視コレクターを、認証・認可を適用する TLS エンドポイントへ移してください。
  • 実際のノード設定と起動引数を確認し、読み取り専用ポートが待ち受けていないことを確認してください。

例

コマンド引数を比較する抜粋です。foo/bar は仮のイメージであり、この Pod をデプロイしてもノードの kubelet は再設定されません。実際のノードのバージョンに対応する設定方法で適用してください。

変更前

yaml
apiVersion: v1
kind: Pod
metadata:
  name: command-demo
spec:
  containers:
    - name: command-demo-container
      image: foo/bar
      command: ["kubelet"]
      args: ["--read-only-port=1"]

変更後

yaml
apiVersion: v1
kind: Pod
metadata:
  name: kubelet-demo
spec:
  containers:
    - name: kubelet-demo-container
      image: foo/bar
      command: ["kubelet"]
      args: ["--read-only-port=0"]

補足:

  • 変更前: 読み取り専用ポートに 1 を指定します。到達できるクライアントに認証なしの情報取得を許可する場合があります。
  • 変更後: ポートを 0 にして読み取り専用サービスを無効にします。必要な監視経路も確認してください。

参考資料