説明
従来の 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 ネットワークのアクセス制御は別途設定する必要があります。