Kubernetes
Kubernetes Network 구성
DevOps Engineer
2025. 3. 25. 01:18
728x90
Kubernetes는 다음과 같은 네트워크 요구 사항을 기본 가정으로 합니다:
- 모든 Pod는 클러스터 내 다른 Pod와 통신 가능해야 한다.
- 노드에서 실행 중인 모든 Pod는 동일한 IP 주소 체계를 공유해야 한다.
- NAT 없이 Pod 간 직접 통신이 가능해야 한다.
이러한 요구사항을 충족시키기 위해 Kubernetes는 CNI 플러그인, Service IP, kube-proxy, Network Policy 등을 이용합니다.
주요 구성 요소
1. CNI 플러그인
- Pod 간 통신을 위한 네트워크 인터페이스를 설정
- Pod에 IP를 할당하고 라우팅 설정을 적용
- 예시: Calico, Flannel, Cilium, Weave
2. kube-proxy
- Service 리소스의 가상 IP로 요청이 들어오면 실제 Pod IP로 라우팅되도록 설정
- 내부적으로 iptables 또는 IPVS를 사용해 라우팅 테이블을 구성
모드 종류
모드 | 설명 |
iptables 모드 | iptables 규칙을 사용해 패킷을 Pod로 전달 |
ipvs 모드 | Linux IPVS를 사용해 더 효율적이고 고성능의 로드밸런싱 제공 |
iptables vs IPVS
항목 | iptables | IPVS |
구조 | 규칙 기반 순차적 검사 | 커널 내 해시 테이블 기반 |
성능 | 규칙 수 많아지면 성능 저하 | 높은 성능 유지 |
관리 | 단순함 | 약간 복잡 (의존 모듈 필요) |
사용 시기 | 소규모 클러스터나 단순 구성 | 대규모 트래픽 처리, 고성능 요구 시 |
예시
- iptables 모드에서 특정 ClusterIP에 요청 시:
iptables -t nat -L -n | grep <ClusterIP>
→ 해당 ClusterIP로 오는 요청을 실제 Pod IP로 DNAT 설정
- ipvs 모드에서는:
ipvsadm -Ln
→ Service IP가 Virtual Server로 설정되고, 그 뒤에 여러 Real Server(Pod IP)가 붙음
외부와의 통신
- NodePort, LoadBalancer, Ingress Controller 등을 통해 외부 요청을 Cluster 내부로 전달
- 클러스터 외부에서 Pod에 직접 접근하지 않고, kube-proxy를 통해 요청 분배
네트워크 정책
- Pod 간 통신을 제어하기 위해 NetworkPolicy 사용
- 대부분의 CNI 플러그인이 이를 지원하며, 세부적인 보안 정책을 정의 가능
요약
항목 | 설명 |
CNI 플러그인 | Pod 네트워크 설정 및 IP 할당 |
kube-proxy | 서비스 요청을 Pod로 전달 (iptables or IPVS 이용) |
iptables | 순차적인 방화벽/라우팅 규칙으로 트래픽 처리 |
IPVS | 커널 기반 고성능 로드밸런싱 |
NetworkPolicy | 보안 제어, 허용된 통신만 가능하게 제한 |
728x90