NetworkPolicy の対象 Pod 選択の確認

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

説明

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

今後作成する Pod に備えたポリシーが、一時的に対象を持たないことは問題ない場合があります。実際の制御は、ネットワークプラグインの対応状況と対象 Pod に適用されるすべてのポリシーを併せて確認してください。

想定される影響

  • 意図した Pod が隔離されず、想定より広く通信できる場合があります。
  • 誤った Pod を選択すると、必要な通信が途切れる場合があります。

対処方法

  • ポリシーの名前空間、pod_selector、実際の Pod ラベルを合わせ、match_labels や match_expressions のすべての条件を確認してください。
  • 対応するネットワークプラグインで policy_types、ingress、egress を構成し、必要な通信が成功し、不要な通信が拒否されることをテストしてください。複数ポリシーの許可ルールは合算される場合があります。

例

セレクターだけを比較し、Pod spec、ポリシー種別、通信ルールは省略しています。変更前の app=ngnix の Pod が実際にあるかも確認してください。変更後は default 名前空間で一致するラベルを示します。

変更前

hcl
resource "kubernetes_network_policy" "example" {
  metadata {
    name      = "terraform-example-network-policy"
    namespace = "default"
  }

  spec {
    pod_selector {
      match_labels = {
        app = "ngnix"
      }
    }
  }
}

変更後

hcl
resource "kubernetes_pod" "example" {
  metadata {
    name = "terraform-example"

    labels = {
      app = "ngnix2"
    }
  }
}

resource "kubernetes_network_policy" "example" {
  metadata {
    name      = "terraform-example-network-policy"
    namespace = "default"
  }

  spec {
    pod_selector {
      match_labels = {
        app = "ngnix2"
      }
    }
  }
}

補足:

  • 変更前: app=ngnix の Pod を選択します。そのような Pod がなければ、現在の適用対象はありません。
  • 変更後: Pod ラベルとセレクターが app=ngnix2 で一致します。一致だけで目的の通信ルールが完成するわけではありません。

参考資料