🔐 Kubernetes NetworkPolicy에서 policyTypes 완전 이해하기

2026. 2. 22. 17:14k8s

Kubernetes NetworkPolicy에서
많은 사람들이 헷갈리는 부분이 바로 이것이다.

policyTypes는 무엇을 의미하는가?

단순히 Ingress/Egress를 적는 옵션이 아니다.


📌 policyTypes의 진짜 역할

policyTypes는:

어떤 방향의 트래픽을 “기본 차단(Default Deny)”으로 만들 것인지 결정하는 스위치

이다.

NetworkPolicy는 기본적으로 “Allow 규칙만 작성”한다.
하지만 그 전에 policyTypes가 먼저 동작한다.


📦 기본 동작 정리

기본 Kubernetes 상태는:

모든 Pod ↔ 모든 Pod 통신 허용

NetworkPolicy를 생성하면:

policyTypes에 명시된 방향이 Default Deny 상태가 된다.

그리고 그 위에 Allow 규칙을 추가하는 구조다.


📌 1️⃣ Ingress만 지정한 경우

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: ingress-only
spec:
  podSelector:
    matchLabels:
      app: nginx
  policyTypes:
  - Ingress
  ingress:
  - from:
    - podSelector:
        matchLabels:
          role: frontend

결과

  • Ingress → Default Deny
  • Egress → 기존처럼 모두 허용

즉,
nginx Pod는 외부에서 아무나 접근할 수 없고
명시한 frontend Pod만 접근 가능.

하지만 nginx Pod가 외부로 나가는 트래픽은 여전히 허용된다.


📌 2️⃣ Egress만 지정한 경우

policyTypes:
- Egress

결과

  • Ingress → 기본 허용
  • Egress → Default Deny

즉,
Pod는 외부에서 접근 가능하지만
밖으로 나가는 트래픽은 명시된 것만 허용된다.


📌 3️⃣ Ingress + Egress 둘 다 지정한 경우

policyTypes:
- Ingress
- Egress

결과

  • Ingress → Default Deny
  • Egress → Default Deny

양방향 모두 기본 차단.

명시한 트래픽만 허용.


📊 한눈에 보는 차이

policyTypes 설정 Ingress Egress
없음 허용 허용
Ingress 차단 허용
Egress 허용 차단
둘 다 차단 차단

🚨 매우 중요한 사실

policyTypes를 명시하지 않으면 Kubernetes가 자동 추론한다.

  • ingress 규칙만 있으면 → Ingress만 적용
  • egress 규칙이 있으면 → Egress도 자동 적용

하지만 실무에서는 반드시 명시하는 것이 안전하다.

이유:

  • 가독성 증가
  • 유지보수 시 사고 방지
  • 의도 명확화

🧠 실무 설계 핵심 원칙

실무에서는 보통 이렇게 시작한다:

1️⃣ Default Deny 정책 생성

policyTypes:
- Ingress
- Egress
podSelector: {}

2️⃣ 필요한 트래픽만 명시적으로 허용

  • API 접근 허용
  • DB 접근 허용
  • DNS 허용

🎯 핵심 요약

NetworkPolicy는 단순히 Allow 규칙이 아니다.

policyTypes가 먼저 Default Deny를 만들고,
그 위에 Allow를 쌓는 구조다.

이 개념을 이해하면
NetworkPolicy는 더 이상 어렵지 않다.