NetworkPolicy 대상 파드 선택 점검

정책이 의도한 네임스페이스와 파드를 실제로 선택하는지 확인하세요.

설명

NetworkPolicy의 pod_selector가 대상 파드의 라벨과 맞지 않으면 기대한 네트워크 통제가 적용되지 않을 수 있습니다. 정책은 자신이 속한 네임스페이스의 파드를 선택하며, 빈 selector는 그 네임스페이스의 모든 파드를 선택합니다.

미래에 생성할 파드를 위한 정책이 일시적으로 아무 파드도 선택하지 않는 것은 유효할 수 있습니다. 실제 효과는 네트워크 플러그인의 지원과 선택된 파드에 적용되는 모든 정책을 함께 확인해야 합니다.

잠재적 영향

  • 의도한 파드에 격리가 적용되지 않아 통신이 예상보다 넓게 허용될 수 있습니다.
  • 잘못된 대상을 선택하면 정상 통신이 끊길 수 있습니다.

해결 방법

  • 정책의 네임스페이스, pod_selector와 실제 파드 라벨을 맞추세요. match_labels나 match_expressions의 전체 조건을 확인하세요.
  • 지원되는 네트워크 플러그인에서 policy_types, ingress와 egress 규칙을 구성하고 필요한 통신은 성공하며 차단할 통신은 실패하는지 시험하세요. 여러 정책의 허용 규칙은 합쳐질 수 있습니다.

예시

선택자 비교만 보여 주며 파드 spec과 정책 유형·허용 규칙은 생략했습니다. 변경 전의 app=ngnix 파드가 실제로 있는지도 확인해야 합니다. 변경 후는 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인 파드를 선택합니다. 해당 파드가 없으면 현재 적용 대상이 없습니다.
  • 변경 후: 파드 라벨과 선택자가 app=ngnix2로 일치합니다. 일치 자체만으로 원하는 차단·허용 규칙이 완성되지는 않습니다.

참조