트래픽 관리

지원 버전: Linkerd 2.16+ 마지막 업데이트: 2026년 2월 22일

개요

Linkerd는 ServiceProfile, TrafficSplit, HTTPRoute 등을 통해 서비스 간 트래픽을 세밀하게 제어할 수 있습니다. 이 문서에서는 재시도, 타임아웃, 트래픽 분할, 카나리 배포 등 트래픽 관리 기능을 상세히 설명합니다.

트래픽 관리 아키텍처

spinner

ServiceProfile

ServiceProfile은 Linkerd의 핵심 트래픽 관리 리소스로, 서비스별로 라우트를 정의하고 각 라우트에 대한 재시도, 타임아웃, 메트릭을 설정합니다.

ServiceProfile 구조

apiVersion: linkerd.io/v1alpha2
kind: ServiceProfile
metadata:
  name: web-service.my-app.svc.cluster.local
  namespace: my-app
spec:
  # 라우트 정의
  routes:
  - name: GET /api/users
    condition:
      method: GET
      pathRegex: /api/users(/.*)?
    # 이 라우트는 재시도 가능
    isRetryable: true
    # 타임아웃 설정
    timeout: 5s

  - name: POST /api/orders
    condition:
      method: POST
      pathRegex: /api/orders
    # POST 요청은 기본적으로 재시도하지 않음
    isRetryable: false
    timeout: 10s

  - name: GET /health
    condition:
      method: GET
      pathRegex: /health
    isRetryable: true
    timeout: 1s

  # 재시도 예산 (전체 요청 대비 재시도 비율)
  retryBudget:
    retryRatio: 0.2          # 최대 20% 추가 요청
    minRetriesPerSecond: 10  # 초당 최소 재시도 수
    ttl: 10s                 # 예산 리셋 주기

라우트 조건

ServiceProfile 자동 생성

상세 예제

재시도 (Retries)

Linkerd는 실패한 요청을 자동으로 재시도하여 일시적인 장애를 극복합니다.

재시도 동작 방식

spinner

재시도 조건

재시도 예산

재시도 모니터링

타임아웃 (Timeouts)

타임아웃은 요청이 지정된 시간 내에 완료되지 않으면 실패로 처리합니다.

라우트별 타임아웃

타임아웃 동작

spinner

로드 밸런싱

Linkerd는 EWMA(Exponentially Weighted Moving Average) 알고리즘을 사용하여 지능적인 로드 밸런싱을 수행합니다.

EWMA 알고리즘

spinner

EWMA 특성:

특성
설명

지연 시간 기반

응답 시간이 빠른 엔드포인트 선호

실시간 적응

엔드포인트 상태 변화에 빠르게 적응

공정한 분배

새 엔드포인트도 트래픽 받을 기회 제공

자동 회피

느린 엔드포인트 자동으로 트래픽 감소

로드 밸런싱 모니터링

TrafficSplit (SMI)

TrafficSplit은 SMI(Service Mesh Interface) 표준을 따르는 트래픽 분할 리소스입니다.

기본 구조

카나리 배포

spinner

단계적 카나리 배포:

TrafficSplit 서비스 설정

TrafficSplit 모니터링

HTTPRoute (Gateway API)

Linkerd 2.14+부터 Gateway API의 HTTPRoute를 지원합니다.

HTTPRoute 기본 구조

고급 HTTPRoute 설정

Circuit Breaking (장애 격리)

Linkerd는 failure accrual을 통해 서킷 브레이커 패턴을 구현합니다.

Failure Accrual 동작

spinner

동작 방식:

상태
설명

Closed

정상 작동, 모든 요청 전달

Open

엔드포인트로 요청 전달 안함

Half-Open

주기적으로 프로브 요청 전송

서킷 브레이커 설정

장애 격리 모니터링

Flagger를 사용한 자동 카나리 배포

Flagger는 Linkerd와 통합하여 자동화된 카나리 배포를 제공합니다.

Flagger 설치

Canary 리소스 정의

Flagger 배포 흐름

spinner

Flagger 메트릭 템플릿

Flagger 모니터링

헤더 기반 라우팅

디버깅용 헤더 라우팅

트래픽 관리 모범 사례

1. ServiceProfile 정의 전략

2. 점진적 트래픽 전환

3. 타임아웃 튜닝

다음 단계

참고 자료

마지막 업데이트