← 학습 카테고리

Learn

Kubernetes

24개 모듈 · 현재 16번째

Kubernetes 모듈 16/24 k8s-learn-16

NetworkPolicy — 기본은 전부 허용, 정책이 붙는 순간부터 화이트리스트

Kubernetes HorizontalPodAutoscaler 및 NetworkPolicy 공식 문서·운영 가이드 종합 (웹 리서치, 2026) — GKE 공식 문서(horizontalpodautoscaler), Calico/Kubernetes 커뮤니티 NetworkPolicy 가이드 Calico/Kubernetes 커뮤니티 NetworkPolicy 가이드

이 모듈을 다 읽으면

  • NetworkPolicy가 없을 때는 기본 전부 허용이지만, 하나라도 적용되는 순간 화이트리스트 모델로 바뀐다는 것을 설명할 수 있다
  • podSelector와 namespaceSelector를 조합해 트래픽 출처를 지정하는 방법을 설명할 수 있다

k8s-learn-04에서 다룬 Service(트래픽을 어디로 라우팅할지)와 별개로, NetworkPolicy가 '그 트래픽이 애초에 허용되는지'를 통제하는 계층이라는 것을 정리한다.

기본값은 전부 허용 — 정책이 붙는 순간 화이트리스트로 전환

어떤 Pod에도 NetworkPolicy가 전혀 적용돼 있지 않으면, 그 Pod로 들어오고 나가는 모든 트래픽은 기본적으로 허용된다(default-allow). 그런데 ingress 타입의 NetworkPolicy가 하나라도 그 Pod에 적용되는 순간, 그 Pod로 들어오는 트래픽은 그 정책들이 명시적으로 허용한 것만 통과하는 방식으로 바뀐다 — egress 타입도 마찬가지로 나가는 트래픽에 대해 같은 원리가 적용된다. clickhouse-learn-36에서 다룬 ROW POLICY의 default-deny 전환과 정확히 같은 성격의 함정이다 — '정책을 만드는 순간 그 대상 Pod의 다른 모든 트래픽까지 갑자기 막히는' 상황을 배포 전에 반드시 확인해야 한다.

핵심 포인트

  • NetworkPolicy가 전혀 없으면 모든 트래픽 기본 허용(default-allow) — ingress 정책이 하나라도 적용되면 그 트래픽은 화이트리스트 방식으로 전환
  • clickhouse-learn-36의 ROW POLICY default-deny와 같은 성격의 함정 — 정책 적용 시 그 대상의 다른 트래픽까지 갑자기 막힐 수 있음

podSelector와 namespaceSelector — 트래픽 출처를 어떻게 지정하는가

NetworkPolicy는 라벨을 이용한 셀렉터로 대상을 지정한다 — podSelector로 이 정책이 적용될 Pod들을 고르고, ingress 규칙의 from 절 안에 다시 podSelector·namespaceSelector를 조합해 '어디서 오는 트래픽을 허용할지'를 지정한다. 예를 들어 같은 네임스페이스의 특정 라벨을 가진 Pod에서만 오는 트래픽을 허용하거나, 다른 네임스페이스 전체에서 오는 트래픽을 허용하는 식이다. IP 대역(CIDR)을 직접 지정할 수도 있어 셀렉터로 표현 못 하는 외부 트래픽도 다룰 수 있다.

핵심 포인트

  • podSelector: 이 정책이 적용될 대상 Pod 선택 / ingress의 from 절 안 podSelector·namespaceSelector 조합: 트래픽 출처를 라벨 기준으로 지정
  • IP 대역(CIDR)도 직접 지정 가능 — 클러스터 밖 외부 트래픽 등 셀렉터로 표현 못 하는 경우까지 커버

빈 podSelector — 네임스페이스 전체를 대상으로 하는 default-deny 패턴

podSelector에 아무 조건도 없는 빈 값({})을 주면 그 네임스페이스의 모든 Pod가 대상이 된다. 여기에 Ingress·Egress 타입을 둘 다 지정하고 허용 규칙을 아무것도 안 넣으면, 그 네임스페이스 전체에 대한 default-deny-all 정책이 된다 — 명시적으로 허용되지 않는 한 모든 트래픽이 차단되는, 가장 엄격한 출발점이다. 실무에서는 이 default-deny-all을 먼저 깔아두고, 필요한 트래픽만 하나씩 별도 정책으로 화이트리스트에 추가해나가는 방식이 흔히 쓰인다.

핵심 포인트

  • 빈 podSelector({}) = 네임스페이스의 모든 Pod 대상 — Ingress+Egress 타입에 허용 규칙 없이 지정하면 그 네임스페이스 전체의 default-deny-all
  • 실무 패턴: default-deny-all을 먼저 깔고, 필요한 트래픽만 별도 정책으로 하나씩 화이트리스트 추가