본문 바로가기
클라우드/Istio

[Istio] 트래픽 관리의 핵심, 로드밸런서(Load Balancer) 설정 완벽 가이드 🚦

by gasbugs 2025. 11. 29.

안녕하세요! 오늘은 마이크로서비스 아키텍처(MSA)의 핵심인 Istio에서 트래픽을 효율적으로 분배하는 로드밸런싱(Load Balancing) 전략에 대해 깊이 파헤쳐 보겠습니다.

Istio는 Envoy 프록시를 사이드카로 사용하여 트래픽을 제어하는데요, 이때 DestinationRule 리소스를 통해 아주 정교한 로드밸런싱 설정이 가능합니다. 단순히 "트래픽을 나눈다"를 넘어 상황에 딱 맞는 전략을 선택하는 방법을 정리해 드립니다.

 

 


1. 로드밸런서 설정 위치 📍

모든 설정은 DestinationRule 리소스의 trafficPolicy.loadBalancer 항목에서 이루어집니다.

apiVersion: networking.istio.io/v1beta1
kind: DestinationRule
metadata:
  name: my-destination-rule
spec:
  host: my-service
  trafficPolicy:
    loadBalancer:
      # 여기에 설정이 들어갑니다!

2. Simple Load Balancer: 가장 기본적이고 강력한 분산 ⚖️

별도의 상태(State) 유지가 필요 없는 일반적인 API 서버나 웹 서비스에 사용합니다. 가장 많이 쓰이는 방식들입니다.

모드 설명 추천 상황
ROUND_ROBIN (기본값) 순서대로 하나씩 차례대로 요청을 보냅니다. 가장 무난하고 예측 가능합니다. 모든 파드의 사양이 같고, 요청 처리 시간이 비슷할 때
LEAST_REQUEST 현재 작업 중인 요청(Active Request)이 가장 적은 파드로 보냅니다. (랜덤으로 2개를 골라 더 한가한 쪽 선택) 요청마다 처리 시간이 들쑥날쑥할 때 (예: 어떤 건 1초, 어떤 건 10초)
RANDOM 무작위로 선택합니다. 로드밸런서 자체의 연산 부하가 가장 적습니다. 파드 개수가 엄청나게 많을 때
PASSTHROUGH 로드밸런싱을 하지 않고 클라이언트가 요청한 IP 그대로 연결합니다. Headless 서비스, DB 등 직접 연결이 필요할 때

💡 YAML 설정 예시 (LEAST_REQUEST)

trafficPolicy:
  loadBalancer:
    simple: LEAST_REQUEST

3. Consistent Hash: "너는 아까 걔한테 가!" (Sticky Session) 🔗

특정 사용자의 요청을 항상 동일한 파드로 보내야 할 때 사용합니다. 로그인 세션 유지나 로컬 캐시 효율을 높일 때 필수적입니다. 이를 Sticky Session이라고도 부릅니다.

어떤 것을 '키(Key)'로 잡을지에 따라 나뉩니다.

  • 🍪 HTTP Cookie: 브라우저 쿠키(예: JSESSIONID)를 기준으로 고정합니다.
  • 📡 Source IP: 클라이언트의 IP 주소가 같다면 같은 파드로 보냅니다. (TCP 연결 등에 유용)
  • 🏷️ HTTP Header: 특정 헤더 값(예: x-user-id)을 기준으로 분배합니다.
  • 🔍 Query Parameter: URL 뒤의 파라미터(예: ?shard_id=1)를 기준으로 합니다.

💡 YAML 설정 예시 (Cookie 기반)

trafficPolicy:
  loadBalancer:
    consistentHash:
      httpCookie:
        name: JSESSIONID
        ttl: 0s # 브라우저 세션 동안 유지

4. Locality Load Balancer: "가까운 곳이 제일 빠르다" 🌍

이것은 알고리즘이라기보다 트래픽 분배의 우선순위 정책입니다. 클라우드 환경에서 Multi-AZ(가용 영역)Multi-Region을 운영 중이라면 비용 절감과 속도를 위해 꼭 알아야 합니다.

  • 동작 원리: 요청을 보낸 파드와 같은 지역(Region/Zone)에 있는 파드를 최우선으로 호출합니다.
  • Failover: 만약 같은 지역의 파드가 모두 죽거나 건강하지 않다면? 그때 자동으로 다음으로 가까운 지역으로 트래픽을 넘깁니다.
  • 장점: 네트워크 지연(Latency) 최소화, 클라우드 데이터 전송 비용(Cross-zone traffic cost) 절감.

💡 YAML 설정 예시

trafficPolicy:
  loadBalancer:
    simple: ROUND_ROBIN
    localityLbSetting:
      enabled: true

📝 요약 및 결론

상황에 따라 적절한 무기를 선택하세요!

  1. 일반적인 웹/API 서버 👉 simple: ROUND_ROBIN (그냥 두면 됨)
  2. 무거운 작업이 섞여 있는 서버 👉 simple: LEAST_REQUEST
  3. 로그인이 필요한 웹 사이트 👉 consistentHash (Cookie 사용)
  4. AWS/Azure 등 클라우드 사용자 👉 localityLbSetting (비용/속도 최적화)

Istio의 강력한 로드밸런싱 기능을 통해 더 안정적이고 빠른 서비스를 구축해 보세요! 🚀