트래픽 분산

트래픽 분산 (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)

여러 수준이 구성되면 가장 구체적인 것이 이겨요:

  1. spec.trafficDistribution 필드 (Service 전용)
  2. Service/ServiceEntry의 어노테이션
  3. Namespace의 어노테이션
  4. 기본 동작 (지역 선호 없음)

예제 (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)별로 분류하고 가장 가까운 건강한 것들로 라우팅해요:

  1. 같은 네트워크, 리전, 존, 서브존
  2. 같은 네트워크, 리전, 존
  3. 같은 네트워크, 리전
  4. 같은 네트워크
  5. 사용 가능한 엔드포인트 아무거나

더 가까운 지역의 모든 엔드포인트가 비정상이 되면, 트래픽이 자동으로 다음 수준으로 페일오버돼요.

예를 들어 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 필드가 우선해요.

웨이포인트는 이 어노테이션을 자동으로 구성해요.

함께 보기 (See also)

더 알아보기 (Learn more)