Kubernetes Cluster에서는 기본적으로 모든 Pod 간 통신이 가능합니다.
하지만 Production 환경에서는 모든 Application이 서로 자유롭게 통신하면 보안 문제가 발생할 수 있습니다.
예:
Frontend Pod
↓
Backend Pod
↓
Database Pod
만약 공격자가 하나의 Pod를 탈취한다면 전체 Cluster 내부로 접근할 수 있습니다.
이를 방지하기 위해 사용하는 기능이 Kubernetes NetworkPolicy입니다.
NetworkPolicy는 Pod 간 Network Traffic을 제어하고 필요한 통신만 허용하는 Kubernetes 보안 기능입니다.
| 구성 요소 | 역할 |
|---|---|
| NetworkPolicy | Traffic 제어 정책 |
| CNI Plugin | 정책 적용 |
| Pod Selector | 대상 Pod 선택 |
| Ingress | 들어오는 Traffic 관리 |
| Egress | 나가는 Traffic 관리 |
NetworkPolicy를 이해하면 Kubernetes 환경에서 Zero Trust Network 구조를 구축할 수 있습니다.
Kubernetes NetworkPolicy란?
NetworkPolicy는 Pod 간 통신 규칙을 정의하는 Kubernetes Resource입니다.
기본 상태:
모든 Pod 통신 허용
↓
NetworkPolicy 적용
↓
허용된 Traffic만 통과
즉:
“필요한 연결만 허용하는 방식”
입니다.
Kubernetes NetworkPolicy가 필요한 이유
Microservice 환경에서는 많은 Service가 연결됩니다.
예:
User Service
↓
Payment Service
↓
Database
하지만:
Admin Service
↓
Database
불필요한 접근
차단 필요
NetworkPolicy를 사용하면 Application 간 접근 범위를 제한할 수 있습니다.
Kubernetes NetworkPolicy 동작 구조
흐름:
Traffic 발생
↓
NetworkPolicy 확인
↓
CNI Plugin 검사
↓
허용 또는 차단
↓
Pod 전달
중요:
NetworkPolicy 자체가 Packet을 처리하는 것이 아니라 CNI Plugin이 실제 적용합니다.
Kubernetes NetworkPolicy 기본 구조
예:
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: backend-policy
spec:
podSelector:
matchLabels:
app: backend
대상 Pod를 선택하고 Traffic 규칙을 적용합니다.
Kubernetes Ingress Policy
Ingress는 들어오는 Traffic을 제어합니다.
예:
Frontend
↓
Backend 허용
Database
↓
Backend 차단
구조:
External Traffic
↓
Pod
외부 또는 다른 Pod에서 접근하는 Traffic 관리입니다.
Kubernetes Egress Policy
Egress는 나가는 Traffic을 관리합니다.
예:
Application
↓
외부 API 허용
Database
↓
Internet 차단
외부 통신 제어에 사용됩니다.
Kubernetes NetworkPolicy Selector
Policy 적용 대상은 Label 기반으로 선택합니다.
예:
Pod Label:
app: database
Policy:
podSelector:
matchLabels:
app: database
해당 Label을 가진 Pod에만 적용됩니다.
Kubernetes Namespace 기반 NetworkPolicy
Namespace 단위 제어도 가능합니다.
예:
Production Namespace
↓
Production Service만 통신 허용
Development Namespace
↓
차단
멀티 팀 환경에서 중요합니다.
Kubernetes NetworkPolicy Allow 구조
예:
Backend 접근 허용:
Frontend Pod
↓
Backend Pod
허용
다른 Pod:
↓
차단
최소 권한 Network를 구성합니다.
Kubernetes Default Deny Policy
보안 환경에서는 기본 차단 방식을 사용합니다.
구조:
모든 Traffic 차단
↓
필요한 Traffic만 허용
예:
policyTypes:
- Ingress
Zero Trust Network의 기본 방식입니다.
Kubernetes NetworkPolicy와 CNI 관계
모든 CNI가 NetworkPolicy를 지원하는 것은 아닙니다.
대표:
| CNI | 지원 |
|---|---|
| Calico | 지원 |
| Cilium | 지원 |
| Flannel | 제한적 |
| Weave | 지원 |
따라서 CNI 선택이 중요합니다.
Kubernetes NetworkPolicy 장애 분석
통신 문제가 발생하면 확인합니다.
Policy 확인
kubectl get networkpolicy
상세 확인
kubectl describe networkpolicy policy-name
Pod Label 확인
kubectl get pods --show-labels
Policy 대상이 맞는지 확인합니다.
Kubernetes NetworkPolicy Debug 방법
테스트 Pod 생성:
kubectl run debug --image=nicolaka/netshoot
통신 테스트:
curl service-name
Traffic 허용 여부를 확인합니다.
Kubernetes NetworkPolicy와 Zero Trust Architecture
Zero Trust 핵심:
“기본 신뢰하지 않고 모든 접근 검증”
Kubernetes 적용:
User
↓
Service
↓
NetworkPolicy 검증
↓
Pod 접근
보안 중심 Cluster 운영 방식입니다.
Kubernetes NetworkPolicy 운영 전략
Production 환경:
1단계
전체 Traffic 분석
↓
2단계
Default Deny 적용
↓
3단계
필요한 연결 허용
↓
4단계
Monitoring 적용
점진적인 적용이 안전합니다.
Kubernetes NetworkPolicy와 Microservice 보안
Microservice 구조에서는 필수 기능입니다.
예:
Frontend
↓
Backend
허용
Backend
↓
Database
허용
Backend
↓
Admin
차단
서비스별 접근 범위를 관리할 수 있습니다.
Kubernetes NetworkPolicy Monitoring
확인 항목:
- 차단 Traffic
- 허용 Traffic
- Policy 변경
- Network Error
Cilium 같은 솔루션은 상세 Flow 분석도 제공합니다.
Kubernetes NetworkPolicy 장점
| 장점 | 설명 |
|---|---|
| 보안 강화 | 불필요한 접근 차단 |
| Zero Trust 구현 | 최소 권한 Network |
| Microservice 보호 | 서비스 분리 |
| 장애 감소 | Traffic 제어 |
Production Kubernetes 환경에서 중요한 보안 기능입니다.
자주 묻는 질문
NetworkPolicy를 적용하면 모든 통신이 차단되나요?
기본 설정에 따라 다릅니다.
Default Deny 정책을 적용하면 차단 후 필요한 연결만 허용합니다.
NetworkPolicy는 Kubernetes 자체 기능인가요?
Resource는 Kubernetes 기능이며 실제 적용은 CNI Plugin이 담당합니다.
모든 CNI에서 NetworkPolicy를 사용할 수 있나요?
아닙니다.
NetworkPolicy 지원 여부는 CNI Plugin에 따라 다릅니다.
마무리
Kubernetes NetworkPolicy는 Pod 간 Network Traffic을 제어하여 Cluster 보안을 강화하는 핵심 기능입니다.
| 구성 요소 | 역할 |
|---|---|
| NetworkPolicy | 규칙 정의 |
| CNI Plugin | 정책 적용 |
| Ingress | 수신 Traffic 제어 |
| Egress | 송신 Traffic 제어 |
NetworkPolicy를 이해하면 Kubernetes 환경에서 Zero Trust Network와 안전한 Microservice Architecture를 구축할 수 있습니다.
다음 글에서는 Kubernetes Storage 구조를 다시 확장하여 Kubernetes Persistent Volume 완벽 가이드! Container 데이터 영속성과 Storage Architecture 이해하기를 진행하겠습니다.