NetworkPolicy
Kubernetes Pod 간 네트워크 통신을 제어하는 방화벽 규칙
Kubernetes Pod 간 네트워크 통신을 제어하는 방화벽 규칙
목표: 제로 트러스트 네트워크를 구현할 수 있는 수준
🛡️ NetworkPolicy 개요
기본 동작
graph TB
subgraph "기본: 모든 통신 허용"
A["Pod A"] --- B["Pod B"]
A --- C["Pod C"]
B --- C
end
subgraph "NetworkPolicy 적용 후"
D["Pod D"] ---|"✅ 허용"| E["Pod E"]
D ---|"❌ 차단"| F["Pod F"]
end
기본적으로 Kubernetes는 모든 Pod 간 통신을 허용합니다. NetworkPolicy로 이를 제한합니다.
📋 기본 정책
1. 기본 차단 (Default Deny)
# 모든 Ingress 차단
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: default-deny-ingress
spec:
podSelector: {}
policyTypes:
- Ingress
# 모든 Egress 차단
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: default-deny-egress
spec:
podSelector: {}
policyTypes:
- Egress
# Ingress + Egress 모두 차단
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: default-deny-all
spec:
podSelector: {}
policyTypes:
- Ingress
- Egress
2. 허용 규칙
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-frontend
spec:
podSelector:
matchLabels:
app: backend
policyTypes:
- Ingress
ingress:
- from:
- podSelector:
matchLabels:
app: frontend
ports:
- protocol: TCP
port: 8080
🎯 고급 규칙
네임스페이스 기반
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-from-namespace
spec:
podSelector:
matchLabels:
app: api
ingress:
- from:
- namespaceSelector:
matchLabels:
env: production
IP 블록 기반
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-from-ip
spec:
podSelector:
matchLabels:
app: api
ingress:
- from:
- ipBlock:
cidr: 10.0.0.0/8
except:
- 10.0.1.0/24
Egress 규칙
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: egress-policy
spec:
podSelector:
matchLabels:
app: frontend
policyTypes:
- Egress
egress:
- to:
- podSelector:
matchLabels:
app: backend
ports:
- protocol: TCP
port: 8080
- to:
- ipBlock:
cidr: 8.8.8.8/32
ports:
- protocol: UDP
port: 53
🐛 문제 해결
정책 확인
# NetworkPolicy 목록
kubectl get networkpolicies
# 상세 정보
kubectl describe networkpolicy allow-frontend
# Pod에 적용된 정책 확인
# (CNI 플러그인에 따라 다름)
Calico에서 확인
# Calico 정책
kubectl get networkpolicies.crd.projectcalico.org
# iptables 규칙
sudo iptables -L -n | grep cali
📋 체크리스트
- Default Deny 정책 적용
- Pod Selector 이해
- Namespace Selector 사용
- IP Block 사용
- Ingress/Egress 규칙
- 포트/프로토콜 제한
- CNI 지원 확인
🔗 관련 노트
- 02-03-CNI-네트워크 — 네트워크 플러그인
- 02-04-NetworkPolicy — TLS, mTLS
- 01-06-Service-타입 — 서비스 노출
마지막 업데이트: 2026-06-01