Kubernetes NetworkPolicy 대상 파드 선택 점검

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

설명

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

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

잠재적 영향

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

해결 방법

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

예시

두 예시 모두 Ingress 정책이며 허용 규칙은 없습니다. 같은 네임스페이스의 실제 파드를 확인해야 하며, 다른 정책이 허용하는 수신 트래픽은 여전히 허용될 수 있습니다.

변경 전

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

app=rarelabel 파드를 선택합니다. 실제로 해당 라벨의 파드가 없다면 현재 적용 대상이 없습니다.

변경 후

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

app=nginx 파드를 선택합니다. 해당 파드가 존재하고 지원되는 플러그인이 정책을 적용해야 효과가 있습니다.

참조