실험 환경 구성
노드 및 IP 구성
4개 노드: 1개 마스터, 3개 워커 VM(Ubuntu 22.04, 커널 5.15). NAT 네트워크 192.168.100.0/24 대역에서 로드밸런서 IP로 200-209 대역 사용.
| 역할 | IP | 호스트명 | 사양 |
| master01 | 192.168.100.101 | m01 | 2vCPU 4GB |
| worker01 | 192.168.100.111 | w01 | 4vCPU 4GB |
| worker02 | 192.168.100.112 | w02 | 4vCPU 4GB |
| worker03 | 192.168.100.113 | w03 | 4vCPU 4GB |
소프트웨어 버전
- Kubernetes: 1.29.0
- MetalLB: 0.13.12
MetalLB를 통한 로드밸런서 구현
MetalLB 설치
kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.13.12/config/manifests/metallb-native.yaml
IP 풀 구성
apiVersion: metallb.io/v1beta1
kind: IPAddressPool
metadata:
name: lb-pool
namespace: metallb-system
spec:
addresses:
- 192.168.100.200-192.168.100.209
---
apiVersion: metallb.io/v1beta1
kind: L2Advertisement
metadata:
name: lb-advert
namespace: metallb-system
spec:
ipAddressPools:
- lb-pool
로드밸런서 서비스 생성
apiVersion: v1
kind: Service
metadata:
name: web-lb
spec:
type: LoadBalancer
loadBalancerIP: 192.168.100.201
ports:
- port: 80
targetPort: 80
selector:
app: web-server
서비스 유형 비교 분석
서비스 생성 예제
ClusterIP 서비스
apiVersion: v1
kind: Service
metadata:
name: web-clusterip
spec:
type: ClusterIP
ports:
- port: 8080
targetPort: 80
selector:
app: web-server
NodePort 서비스
apiVersion: v1
kind: Service
metadata:
name: web-nodeport
spec:
type: NodePort
ports:
- port: 8081
targetPort: 80
nodePort: 32000
selector:
app: web-server
서비스 특성 비교
| 유형 | 내부 접근 | 외부 접근 | 엔드포인트 |
| ClusterIP | 클러스터 내 IP:포트 | 불가 | Pod IP:80 |
| NodePort | ClusterIP 기능 포함 | 노드IP:고정포트 | Pod IP:80 |
| LoadBalancer | ClusterIP 기능 포함 | 전용 서비스 IP | Pod IP:80 |
장단점 비교
- ClusterIP:
- 장점: 내부 부하분산 최적화
- 단점: 외부 접근 불가
- NodePort:
- 장점: 간단한 외부 노출
- 단점: 포트 제한, 단일 장애점
- LoadBalancer:
- 장점: 고정 IP/포트 제공
- 단점: 동일 네트워크 대역 필요
부록: Nginx 애플리케이션 배포
apiVersion: apps/v1
kind: Deployment
metadata:
name: web-server
spec:
replicas: 3
selector:
matchLabels:
app: web-server
template:
metadata:
labels:
app: web-server
spec:
containers:
- name: web-container
image: nginx:1.25