制御プレーンの bind-address のアクセス範囲の確認

管理用の待ち受けアドレスを、必要なアクセス経路に合わせて制限してください。

説明

kube-controller-manager や kube-scheduler などの制御プレーンコンポーネントには管理用インターフェースがあります。--bind-address=0.0.0.0 では、そのネットワークネームスペースのすべての IPv4 インターフェースで待ち受けます。実際の外部アクセスは Pod・ノードのネットワーク、ファイアウォール、認証・認可によります。

ローカルアクセスだけが必要なら 127.0.0.1 に制限してください。別の場所からヘルスチェックや監視を行う場合は、接続要件を確認してから待ち受けアドレスと許可ネットワークを決める必要があります。

想定される影響

  • 不要なネットワークから管理用ポートへの接続が試みられる場合があります。
  • 接続要件を確認せずループバックに変えると、ヘルスチェックや監視が中断する場合があります。

対処方法

  • ローカルアクセスだけが必要な kube-controller-manager や kube-scheduler に --bind-address=127.0.0.1 を設定してください。コンテナーのループバックが属するネットワークネームスペースも確認してください。
  • リモート監視などが必要なら、承認した待ち受けアドレスとファイアウォールを設定し、認証・認可を維持してください。変更後にヘルスチェックと実際のアクセス範囲を試してください。

例

v1.30.0 の待ち受けアドレス引数だけを比較する既存の抜粋です。実際の認証情報や他の実行設定は省略しています。hostNetwork を使わないこの Pod のループバックは、Pod のネットワークネームスペースに属します。

変更前

yaml
apiVersion: v1
kind: Pod
metadata:
  name: kube-controller-manager
spec:
  containers:
    - name: kube-controller-manager
      image: registry.k8s.io/kube-controller-manager:v1.30.0
      command:
        - kube-controller-manager
        - --bind-address=0.0.0.0

すべての IPv4 インターフェースで管理用要求を受信できます。これだけでインターネットや匿名のアクセスが許可されるわけではありません。

変更後

yaml
apiVersion: v1
kind: Pod
metadata:
  name: kube-controller-manager
spec:
  containers:
    - name: kube-controller-manager
      image: registry.k8s.io/kube-controller-manager:v1.30.0
      command:
        - kube-controller-manager
        - --bind-address=127.0.0.1

同じネットワークネームスペースのループバックだけで待ち受けます。必要なヘルスチェックや監視が引き続き接続できるか確認する必要があります。

参考資料