잘못 구성된 Pod NetworkPolicy

파드가 올바른 NetworkPolicy 대상이 아니면 클러스터 내부 트래픽 제한이 기대대로 적용되지 않을 수 있습니다.

설명

NetworkPolicy가 존재하더라도 대상 파드와 같은 네임스페이스에 있지 않거나, podSelector가 실제 파드를 제대로 선택하지 못하면 그 정책은 해당 파드에 적용되지 않습니다. 이 경우 파드는 네트워크 보호를 받고 있는 것처럼 보여도 실제로는 노출 상태일 수 있습니다.

NetworkPolicy는 선언만으로 끝나지 않고, 대상 파드와 네임스페이스, 라벨이 정확히 맞아야 합니다. 운영 환경에서는 실제 적용 대상을 함께 검증해야 합니다. NetworkPolicy를 지원하는 네트워크 플러그인이 필요하며, 여러 정책의 허용 범위는 합쳐져 적용됩니다.

잠재적 영향

  • 파드 간 통신이나 외부 통신이 기대보다 넓게 허용될 수 있습니다.
  • 내부 서비스가 보호되지 않은 상태로 남을 수 있습니다.
  • 정책이 있는 것처럼 보이지만 실제 격리가 동작하지 않을 수 있습니다.

해결 방법

  • NetworkPolicy를 보호 대상 파드와 같은 네임스페이스에 배치하세요.
  • podSelector가 실제 파드 라벨과 일치하는지 확인하세요.
  • 정책 적용 후 대상 파드에 실제로 트래픽 제한이 적용되는지 테스트하세요.

예시

사용할 네임스페이스와 애플리케이션 이미지는 별도로 준비하세요. 예시의 오래된 nginx 버전은 배포 권장 사항이 아닙니다.

변경 전

yaml
apiVersion: v1
kind: Pod
metadata:
  name: sample-pod
  namespace: app-one
  labels:
    app: shouldmatch
spec:
  containers:
    - name: nginx
      image: nginx:1.14.2
---
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: sample-policy
  namespace: app-another
spec:
  podSelector:
    matchLabels:
      app: shouldmatch

변경 후

yaml
apiVersion: v1
kind: Pod
metadata:
  name: sample-pod
  namespace: app-safe
spec:
  containers:
    - name: app
      image: images.my-company.example/app:v4
---
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: sample-policy
  namespace: app-safe
spec:
  podSelector: {}
  policyTypes:
    - Ingress
    - Egress

설명:

  • 변경 전: 파드와 정책이 다른 네임스페이스에 있어 NetworkPolicy가 실제 대상 파드에 적용되지 않습니다.
  • 변경 후: 같은 네임스페이스의 모든 Pod에 수신·송신 기본 거부를 적용합니다. 별도 정책이 허용하는 통신은 가능하므로 전체 정책을 검토하고 DNS와 애플리케이션에 필요한 통신을 명시적으로 허용하세요.

참조