설명
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로 일치합니다. 일치 자체만으로 원하는 차단·허용 규칙이 완성되지는 않습니다.