Kubernetes에서 MetalLB를 활용한 로드 밸런서 서비스 및 서비스 유형 비교

실험 환경 구성

노드 및 IP 구성

4개 노드: 1개 마스터, 3개 워커 VM(Ubuntu 22.04, 커널 5.15). NAT 네트워크 192.168.100.0/24 대역에서 로드밸런서 IP로 200-209 대역 사용.

역할IP호스트명사양
master01192.168.100.101m012vCPU 4GB
worker01192.168.100.111w014vCPU 4GB
worker02192.168.100.112w024vCPU 4GB
worker03192.168.100.113w034vCPU 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
NodePortClusterIP 기능 포함노드IP:고정포트Pod IP:80
LoadBalancerClusterIP 기능 포함전용 서비스 IPPod 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

태그: kubernetes MetalLB LoadBalancer ClusterIP NodePort

6월 23일 00:47에 게시됨