ホストのネットワーク名前空間の共有を許可する PodSecurityPolicy

ホストネットワークの共有を許可するポリシーは、Pod とノード間のネットワーク分離を弱める場合があります。

説明

従来の PodSecurityPolicy の hostNetwork: true は、Pod にノードのネットワーク名前空間の使用を許可します。実際に使用する Pod は、ノードのネットワークインターフェイスとポート空間を共有するため、通常とは異なるアクセス経路やポート競合のリスクが生じます。NetworkPolicy の適用方法もネットワークプラグインによって異なります。

PSP は Kubernetes 1.21 で非推奨となり、1.25 で削除されました。現在のクラスターでは Pod Security Admission などの代替ポリシーで、不要なホストネットワーク共有を制限してください。

想定される影響

  • ノードのネットワーク経路を使い、意図していないサービスにアクセスできる場合があります。
  • アプリケーションの待ち受けポートがノード上の他のサービスと競合したり、公開範囲を広げたりする可能性があります。
  • 通常の Pod に適用したネットワーク制御が、同じようには動作しない場合があります。

対処方法

  • 従来のポリシーでは hostNetwork を false に制限し、通常のワークロードには分離された Pod ネットワークを使用してください。
  • hostPorts、hostIPC、hostPID、特権も確認してください。
  • 必須のシステム構成の例外は範囲を絞り、実際のファイアウォール、NetworkPolicy、サービス接続を確認してください。

例

次の例は Kubernetes 1.25 より前の PSP の関連フィールドの抜粋です。他の必須フィールドは省略しています。

変更前

yaml
apiVersion: policy/v1beta1
kind: PodSecurityPolicy
metadata:
  name: privileged
spec:
  hostNetwork: true

このポリシーを利用できる Pod が、ホストネットワークの共有を要求できます。許可があるだけで、すべての Pod がホストネットワークを使うわけではありません。

変更後

yaml
apiVersion: policy/v1beta1
kind: PodSecurityPolicy
metadata:
  name: privileged
spec:
  hostNetwork: false

このポリシーではホストネットワークの共有を許可しません。通常の Pod ネットワークのアクセス制御は別途設定する必要があります。

参考資料