Kubernetes NetworkPolicy Egress (DNS만 허용) — 실제 검증 방법 정리
2026. 2. 22. 18:41ㆍk8s
CKAD 문제 유형 중 하나:
frontend Pod는 외부 통신 불가
단 DNS(53 TCP/UDP)는 허용
1️⃣ NetworkPolicy 설정
내가 사용한 정책은 다음과 같다.
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: restrict-egress
spec:
podSelector:
matchLabels:
run: frontend
policyTypes:
- Egress
egress:
- ports:
- protocol: UDP
port: 53
- protocol: TCP
port: 53
핵심 포인트
policyTypes: Egress→ 해당 Pod는 기본적으로 egress 차단- 53번 포트만 예외 허용
- 그 외 모든 외부 통신은 자동 차단 (default deny)
2️⃣ nginx 이미지에 curl이 없을 때 검증 방법
nginx 이미지는 curl / wget이 없다.
그래서 Pod 안에 들어가서 직접 테스트하기 어렵다.
그래서 나는 이렇게 해결했다.
✔️ 정책과 동일한 라벨을 가진 테스트 Pod를 띄웠다
NetworkPolicy는 이미지가 아니라 라벨(selector) 기준으로 적용된다.
따라서 policy가 run=frontend라면
테스트 Pod도 동일하게 run=frontend로 생성하면 된다.
3️⃣ 실제 검증 명령
🔹 외부 HTTP 호출 (실패해야 정상)
kubectl run busybox -n test --image busybox \
-l run=frontend -it --rm --restart=Never -- \
wget -qO- www.naver.com --timeout 2
✔ 정상이라면 timeout 발생
✔ 외부 HTTP는 차단된 상태
🔹 DNS 테스트 (성공해야 정상)
kubectl run busybox -n test --image busybox \
-l run=frontend -it --rm --restart=Never -- \
nslookup google.com
✔ DNS 응답이 정상적으로 반환됨
✔ 53번 포트 허용이 제대로 적용됨
4️⃣ 결과 해석
| 테스트 | 기대 결과 |
|---|---|
| nslookup google.com | 성공 |
| wget www.naver.com | timeout |
이 상태라면
✅ DNS는 허용
✅ 외부 HTTP는 차단
→ NetworkPolicy egress가 정상 동작
5️⃣ 여기서 중요한 포인트
🔥 반드시 라벨을 정책과 동일하게 맞춰야 한다
예를 들어
matchLabels:
run: frontend
이라면
-l run=frontend
로 생성해야 한다.
만약
-l app=frontend
로 생성하면 정책이 적용되지 않는다.
NetworkPolicy는 이미지 기반이 아니라 selector 기반이라는 점이 핵심이다.
6️⃣ 정리
CKAD에서 egress 제한 문제는 다음 흐름으로 푼다.
- policyTypes: Egress 설정
- 허용할 포트만 명시
- 동일 라벨 테스트 Pod 생성
- DNS 성공 / 외부 HTTP 실패 확인
nginx 이미지에 curl이 없어도
같은 라벨을 가진 busybox Pod를 띄우면 충분히 검증 가능하다.
'k8s' 카테고리의 다른 글
| CKAD 실전 유형 정리(추가) — SA 연결, Docker Build, Docker Tar (0) | 2026.02.23 |
|---|---|
| 🔥 CKAD 예상 문제 22선 (문제 + 정답) (0) | 2026.02.22 |
| 🚀 CKAD 시험에서 가장 많이 나오는 내용 정리 (합격용 핵심 요약) (0) | 2026.02.22 |
| 🔐 Kubernetes NetworkPolicy에서 policyTypes 완전 이해하기 (0) | 2026.02.22 |
| 🚀 CKAD 시험 대비 – Kubernetes Job 완전 정리 (0) | 2026.02.22 |