IPTables
개념 및 특징
- 패킷 필터링, NAT 수행
- 규칙을 하나씩 차례로 검사, 매칭되는 규칙을 찾고 적용
- 규칙이 많아질 수록 검사 시간이 오래 걸림
- 사용 목적: 방화벽, NAT, LB, 포트 포워딩
기본 명령 예시
iptables -L -v -n
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -D INPUT 1
IPVS
- IP Virtual Server의 약자
- 클라이언트가 '가상 서버'에 요청을 보내고, IPVS 설정에 따라서 적절한 백엔드 서버로 트래픽을 전달하는 개념
- 백엔드 서버 응답
- 직접 클라이언트로 응답 or IPVS 통해서 응답
- Netfilter 대신 커널 공간에서 작동 -> 더 빠르다.
- 연결된 서비스와 앤드포인트를 해시 테이블로 관리 -> 더 빠르다.
- 대규모 서비스 환경에 적합
- 네트워크 포로토콜(TCP, UDP)을 지원
IPTables vs IPVS
기능 | IPTables | IPVS |
---|
LB | RR, NAT | RR, LC, WRR 등 다양한 알고리즘 지원 |
트래픽 | L3/L4 레벨 트래픽 제어 | L4 기반 LB |
기타 개념
Netfilter
- 리눅스 커널의 네트워크 스택에 내장된 패킷 필터링 프레임워크
NAT
- Network Address Translation, 네트워크 주소 변환
LB (로드밸런싱) 종류
- 라운드 로빈(Round Robin)
- 최소 연결(Least Connections)
- 가중 라운드 로빈(Weighted Round Robin)
- 가중 최소 연결(Weighted Least Connections)
- 해시 기반(Source Hashing, Destination Hashing)
LB
- L3 LB: IP 주소 기준 트래픽 분배
- L4 LB: IP 주소, 포트(TCP, UDP) 기준으로 트래픽 분배
kube-proxy of Kubernetes
- kube-proxy가 Kubernetes 클러스터 네트워크 트래픽 제어를 위해 iptables나 IPVS를 사용
- Kubernetes v1.9이상에서 IPVS 사용 가능, IPVS 모듈이 커널에 설치되어 있어야함
- IPVS 설정 방법
kube-proxy 설정에 '--proxy-mode-ipvs' 플래그를 설정