지역 기반 로드 밸런싱

지역 기반 로드 밸런싱 (Locality Load Balancing)

이 시리즈의 태스크에서는 Istio에서 지역(locality) 기반 로드 밸런싱을 설정하는 방법을 하나씩 살펴볼 거예요.

출처: Istio 문서

본문

이 시리즈의 태스크는 Istio에서 지역 기반 로드 밸런싱을 설정하는 방법을 보여줘요.

지역(locality) 은 메시 안에 있는 워크로드 인스턴스의 지리적 위치를 정의해요. 지역은 다음 세 가지로 구성돼요:

  • Region: 넓은 지리적 영역을 나타내요. 예를 들면 us-east 같은 거죠. 하나의 region에는 보통 여러 개의 가용성 zone이 포함돼요. Kubernetes에서는 topology.kubernetes.io/region 라벨이 노드의 region을 결정해요.
  • Zone: region 안에 있는 컴퓨팅 리소스의 묶음이에요. region 안에서 여러 zone에 걸쳐 서비스를 운영하면, region 내부에서 zone 간 장애 조치(failover)가 일어나면서도 최종 사용자와의 데이터 지역성은 유지할 수 있어요. Kubernetes에서는 topology.kubernetes.io/zone 라벨이 노드의 zone을 결정해요.
  • Sub-zone: 관리자가 "같은 랙(same rack)"처럼 더 세밀한 제어를 위해 zone을 더 나눌 수 있게 해주는 단위예요. sub-zone 개념은 Kubernetes에 존재하지 않아요. 그래서 Istio는 sub-zone을 정의하기 위해 커스텀 노드 라벨인 topology.istio.io/subzone을 도입했어요.

호스팅형 Kubernetes 서비스를 사용한다면 클라우드 제공자가 region과 zone 라벨을 알아서 설정해줄 거예요. 직접 운영하는 Kubernetes 클러스터라면 직접 노드에 이 라벨들을 추가해야 해요.

지역은 계층 구조를 가지며, 매칭 순서는 다음과 같아요:

  1. Region
  2. Zone
  3. Sub-zone

즉, region foo의 zone bar에서 실행 중인 pod는 region baz의 zone bar에서 실행 중인 pod와 동일(local)하지 않은 것으로 간주돼요.

Istio는 이 지역 정보를 사용해서 로드 밸런싱 동작을 제어해요. 이 시리즈의 태스크 중 하나를 따라가며 메시에 대한 지역 기반 로드 밸런싱을 설정해 보세요.

Istio의 기본 메시 설정은 지역 기반 로드 밸런싱을 활성화해요 (localityLbSetting.enabled: true). 즉, DestinationRule에서 OutlierDetection을 설정하면, 규칙에 localityLbSetting을 명시적으로 설정하지 않았더라도 지역 인지 장애 조치(locality-aware failover)가 자동으로 활성화돼요. Envoy는 아웃라이어 감지(outlier detection)를 통해 비정상 엔드포인트를 식별하고 다음 지역으로의 장애 조치를 트리거해요. 이런 암묵적 동작을 원하지 않는다면 DestinationRule의 로드 밸런서 설정에서 localityLbSetting.enabled: false로 설정하면 돼요.

더 알아보기 (Learn more)