[Kubernetes] Multi Region 서비스에서 최소한의 latency 를 위한 Topology Aware Hint
Kubernetes 2025. 11. 23. 16:10퍼블릭 클라우드를 사용하면, 실제 물리 서버를 어떤 Region 과 Zone(Availability Zone) 의 것을 사용할지 결정하게 된다. Region 은 Zone 을 묶는 상위 개념이며, Region 과 Region 사이에는 도시나 국가 만큼의 큰 거리 차이가 존재한다. Zone 은 하나의 Region 안에 여러개 존재할 수 있으며, 흔히 생각하는 데이터센터라고 생각하면 좋다.
- Region: ap-northeast-2 (서울)
- Zone: ap-northeast-2a (데이터센터 a)
- Zone: ap-northeast-2b (데이터센터 b)
- Zone: ap-northeast-2c (데이터센터 c)
아래는 Region 과 Zone 의 차이를 비교한 표이다.
| 규모 | 도시/국가 단위 | 데이터센터 단위 |
| 물리적 거리 | 수십~수백 km | 수백 m ~ 수 km |
| 네트워크 레이턴시 | 높음 (10~200ms) | 매우 낮음 (1~2ms) |
| 장애 범위 | 전체 Region 장애 가능 | Zone 단위 장애 |
| 비용 | Region 간 트래픽 비쌈 | Zone 간 트래픽 저렴 또는 무료 |
| 목적 | DR(재해복구), 글로벌 배포 | 고가용성, 고성능 서비스 |
레이턴시를 고려하였을 때, 최대한 같은 zone 에 존재하는 node 의 pod 로 요청을 보내는 것이 유리하다. 이러한 설정을 하는 것을 Topology Aware Hint 라고 한다.
1. Topology Aware Hint 의 기능
같은 zone/region 으로 요청을 보내도록 우선순위를 설정할 수 있다. 기본 설정은 같은 zone 우선이다. 같은 node 로 우선순위를 설정할 수는 없다. 같은 node 단위에서 라우팅 하도록 하려면 클러스터 외부 트래픽에 대해 노드에서의 로드 밸런싱 제외 을 참고하자.(단 외부 요청에 한함)
2. 설정방법
Topology Aware Hint 는 Service 에 직접 설정하는 것이 아니라, EndpointSlice 컨트롤러가 node 의 zone/region 라벨을 보고 EndpointSlice에 hint를 자동으로 생성해준다.(hints.forZones) 각 노드에 존재하는 kube-proxy 는이 힌트를 읽고, client 노드와 같은 zone 의 Endpoints 를 우선으로 라우팅해준다.
실제로 사람이 설정해주어야 하는 것은 node 별로 label 을 붙여주는 것이다. 즉, 라벨만 붙여주면 클라이언트 node 와 동일한 zone/region 의 파드가 우선적으로 선택되게 된다. 참고로, 퍼블릭 클라우드를 사용하면 기본적으로 zone/region 라벨이 붙게 된다.
- topology.kubernetes.io/region
- topology.kubernetes.io/zone
$ kubectl label nodes node1 topology.kubernetes.io/region=ap-northeast-2
$ kubectl label nodes node1 topology.kubernetes.io/zone=ap-northeast-2-a
topology.kubernetes.io/region: ap-northeast-2
topology.kubernetes.io/zone: ap-northeast-2-a
3. 확인방법
아래의 커맨드로 EndpointSlice 를 조회해보면 fotZones 힌트가 생성된 것을 볼 수 있다.
$ kubectl get endpointslice -l kubernetes.io/service-name={ClusterIP 서비스명} -o yaml
apiVersion: discovery.k8s.io/v1
kind: EndpointSlice
metadata:
name: sample-svc-abc12
addressType: IPv4
endpoints:
- addresses:
- 10.244.1.15
zone: zone-a
hints:
forZones:
- name: zone-a
- addresses:
- 10.244.2.19
zone: zone-b
hints:
forZones:
- name: zone-b
ports:
- port: 80
https://kubernetes.io/ko/docs/concepts/services-networking/topology-aware-hints/ 참고
'Kubernetes' 카테고리의 다른 글
| [Kubernetes] 클러스터 외부 트래픽에 대해 노드에서의 로드 밸런싱 제외 (0) | 2025.11.23 |
|---|---|
| [Kubernetes] 서비스 Session Affinity 설정 (0) | 2025.11.22 |
| [Kubernetes] LoadBalancer 서비스 이해 (0) | 2025.11.15 |
| [Kubernetes] NodePort 서비스 이해 (0) | 2025.11.15 |
| [Kubernetes] ClusterIP - externalIPs 서비스 이해 (0) | 2025.10.19 |


