트래픽 분산
트래픽 분산 (Traffic Distribution)
networking.istio.io/traffic-distribution 어노테이션은 ztunnel이 사용 가능한 엔드포인트들 사이에서 트래픽을 분산하는 방식을 제어해요. 이는 지연 시간과 크로스-존 비용을 줄이기 위해 트래픽을 로컬에 유지하는 데 유용해요.
출처: Istio 문서
본문
지원되는 값 (Supported values)
| 값 | 동작 |
|---|---|
PreferSameZone |
인접성으로 엔드포인트에 우선순위를 둬요: 네트워크, 리전, 존, 그다음 서브존. 트래픽이 가장 가까운 건강한 엔드포인트에 먼저 가요. |
PreferClose |
PreferSameZone의 더 이상 사용되지 않는 별칭. Kubernetes enhancement proposal 3015 참조. |
PreferSameNode |
클라이언트와 같은 노드의 엔드포인트를 선호해요. |
| (설정 안 함) | 지역 선호가 없어요. 트래픽이 모든 건강한 엔드포인트에 분산돼요. |
어노테이션 적용하기 (Applying the annotation)
어노테이션은 다음에 적용할 수 있어요:
Service: 그 특정 서비스로의 트래픽에 영향을 줘요Namespace: 네임스페이스의 모든 서비스의 기본값을 설정해요ServiceEntry: 외부 서비스로의 트래픽에 영향을 줘요
우선순위 (Precedence)
여러 수준이 구성되면 가장 구체적인 것이 이겨요:
spec.trafficDistribution필드 (Service전용)Service/ServiceEntry의 어노테이션Namespace의 어노테이션- 기본 동작 (지역 선호 없음)
예제 (Examples)
서비스별 구성 (Per-service configuration)
단일 서비스에 적용:
apiVersion: v1
kind: Service
metadata:
name: my-service
annotations:
networking.istio.io/traffic-distribution: PreferSameZone
spec:
selector:
app: my-app
ports:
- port: 80
네임스페이스 전체 구성 (Namespace-wide configuration)
네임스페이스의 모든 서비스에 적용:
apiVersion: v1
kind: Namespace
metadata:
name: my-namespace
annotations:
networking.istio.io/traffic-distribution: PreferSameZone
네임스페이스의 서비스는 자체 어노테이션이 없으면 이 설정을 상속해요.
네임스페이스 기본값 재정의 (Override namespace default)
서비스는 자체 어노테이션으로 네임스페이스 설정을 재정의할 수 있어요:
apiVersion: v1
kind: Namespace
metadata:
name: my-namespace
annotations:
networking.istio.io/traffic-distribution: PreferSameZone
---
apiVersion: v1
kind: Service
metadata:
name: different-service
namespace: my-namespace
annotations:
networking.istio.io/traffic-distribution: PreferSameNode
spec:
selector:
app: different-app
ports:
- port: 80
어노테이션이 없는 서비스는 네임스페이스 설정을 상속해요.
동작 (Behavior)
PreferSameZone
PreferSameZone을 사용하면 ztunnel이 엔드포인트를 지역(locality)별로 분류하고 가장 가까운 건강한 것들로 라우팅해요:
- 같은 네트워크, 리전, 존, 서브존
- 같은 네트워크, 리전, 존
- 같은 네트워크, 리전
- 같은 네트워크
- 사용 가능한 엔드포인트 아무거나
더 가까운 지역의 모든 엔드포인트가 비정상이 되면, 트래픽이 자동으로 다음 수준으로 페일오버돼요.
예를 들어 us-west, us-west, us-east 존에 엔드포인트가 있는 서비스:
us-west의 클라이언트는 모든 트래픽을 두 개의us-west엔드포인트로 보내요us-west엔드포인트 하나가 실패하면 트래픽은 남은us-west엔드포인트로 가요us-west엔드포인트 둘 다 실패하면 트래픽은us-east로 페일오버돼요
PreferSameNode
PreferSameNode를 사용하면 ztunnel이 클라이언트와 같은 쿠버네티스 노드에서 실행 중인 엔드포인트를 선호해요. 이는 노드-로컬 통신의 네트워크 홉과 지연 시간을 최소화해요.
쿠버네티스 trafficDistribution과의 관계 (Relationship to Kubernetes trafficDistribution)
쿠버네티스 1.31은 Service에 spec.trafficDistribution 필드를 도입했어요. 이 Istio 어노테이션은 추가적인 이점과 함께 같은 기능을 제공해요:
spec.trafficDistribution |
어노테이션 | |
|---|---|---|
| 쿠버네티스 버전 | 1.31+ | 모든 |
Service |
예 | 예 |
ServiceEntry |
아니요 | 예 |
Namespace |
아니요 | 예 |
Service에 spec 필드와 어노테이션 둘 다 설정되면 spec 필드가 우선해요.
웨이포인트는 이 어노테이션을 자동으로 구성해요.