쿠버네티스의 서비스가 트래픽을 올바른 파드(Pod)로 전달하도록 중간에서 라우팅·포워딩을 해주는 구성 요소
요청으로 온 cluster IP를 실제 Pod IP와 연결해준다.
대표적으로 kube-proxy가 있으며 3가지 방식으로 움직인다.
iptables - 서비스의 가상 IP와 포트를 커널레벨의 iptables 규칙으로 등록 후 패킷을 해당 서비스의 파드로 NAT
IPVS - 리눅스 커널의 IPVS 모듈을 이용 - 대규모 작업에 효과적
userspace - kube-proxy 프로세스가 직접 소켓을 포워딩하는 형식(현재는 거의 안쓰임)
iptables 방식
# ClusterIP로 들어온 패킷을 서비스 체인으로 이동
-A KUBE-SERVICES -d 10.96.0.1/32 -p tcp --dport 80 \
-j KUBE-SVC-XXXXXXX
# 서비스 체인 → 엔드포인트 체인 (라운드 로빈)
-A KUBE-SVC-XXXXXXX -m statistic --mode random --probability 0.333333 \
-j KUBE-SEP-AAAAAAA
-A KUBE-SVC-XXXXXXX -j KUBE-SEP-BBBBBBB
...
# 엔드포인트 체인에서 DNAT 수행
-A KUBE-SEP-AAAAAAA -j DNAT --to-destination 10.244.1.5:80
- 커널수준에서 처리하기에 빠른 편이고, 의존성이 적다는 장점이 있다.
- 서비스나 파드수가 늘어날수록 규칙이 더 복잡해지기 때문에 업그레이드 시 성능저하의 위험이 있다.
IPVS 방식
- 원리: Linux 커널의 IPVS (IP Virtual Server) 모듈을 사용
- IPVS는 iptables보다 더 전문적인 L4 로드밸런싱 엔진
- kube-proxy가 ipvsadm 명령을 통해 서비스와 엔드포인트를 커널에 등록
- 커널 내부에서 해시 테이블로 매핑 → 검색과 라우팅 속도가 훨씬 빠름
TCP 10.96.0.1:80 rr
-> 10.244.1.5:80 Masq 1 0 0
-> 10.244.2.8:80 Masq 1 0 0
-> 10.244.3.12:80 Masq 1 0 0
- 커널 레벨 해시 기반 → 규칙이 많아져도 빠름
- 다양한 LB 알고리즘 지원 (rr, lc, sh 등)
- iptables보다 업데이트 시 부하 적음
- IPVS 모듈이 커널에 로드되어 있어야 함 (추가 설정 필요할 수도 있음)
'kubernetes' 카테고리의 다른 글
| 배포 전략 - init container 이용하여 소스 파일 받아오기 (0) | 2025.03.11 |
|---|---|
| 파드의 상태 검사 (startProbe readinessProbe livenessProbe) (0) | 2025.03.06 |
| 노드에 파드 분배 - affinity (0) | 2025.03.02 |
| init container 이용 sysctl 실행 (3) | 2025.01.25 |
| sidecar 사용하여 수시로 git clone = git-sync (0) | 2025.01.21 |