Kubernetes NetworkPolicy の対象 Pod 選択の確認

ポリシーが意図した名前空間と Pod を実際に選択するか確認してください。

説明

NetworkPolicy の podSelector が実際の Pod ラベルと一致しないと、期待したネットワーク制限が適用されない場合があります。ポリシーは自身の名前空間の Pod を選択し、空の selector はその名前空間のすべての Pod を選択します。

将来作成する Pod のためのポリシーが、一時的に何も選択しないことは有効な場合があります。実際の効果を判断するには、ネットワークプラグインの対応と、対象 Pod に適用されるすべてのポリシーを確認する必要があります。

想定される影響

  • 意図した Pod が隔離されず、想定より広い通信が許可される場合があります。
  • 誤った対象を選ぶと正常な通信が途切れる場合があります。

対処方法

  • ポリシーの名前空間、podSelector、実際の Pod ラベルを合わせてください。matchLabels または matchExpressions の条件全体を確認してください。
  • 対応するネットワークプラグインで policyTypes、ingress、egress を構成し、必要な接続が成功し、不要な接続が失敗するか試してください。複数のポリシーの許可は合算される場合があります。

例

両方とも許可ルールを持たない Ingress ポリシーです。同じ名前空間の実際の Pod を確認してください。別のポリシーが許可する受信通信は引き続き許可される場合があります。

変更前

yaml
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: test-network-policy
spec:
  podSelector:
    matchLabels:
      app: rarelabel
  policyTypes:
    - Ingress

app=rarelabel の Pod を選択します。該当する Pod がなければ、現在の適用対象はありません。

変更後

yaml
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: test-network-policy
spec:
  podSelector:
    matchLabels:
      app: nginx
  policyTypes:
    - Ingress

app=nginx の Pod を選択します。実際に Pod が存在し、対応プラグインがポリシーを適用する必要があります。

参考資料