Istio 트래픽 관리

Istio 트래픽 관리 (Traffic Management)

메시 안에 들어온 요청은 기본적으로 목적지 서비스로 바로 흘러가요. 하지만 실제 운영에서는 "이 요청을 어느 버전으로 보낼지", "실패하면 어떻게 대신 처리할지", "외부로 나가는 트래픽은 어떻게 통제할지" 같은 결정이 필요하죠. Istio의 트래픽 관리 기능이 바로 그 부분을 애플리케이션 코드를 건드리지 않고 처리해 줘요.

출처: https://istio.io/latest/docs/concepts/traffic-management/

트래픽 관리를 이해할 때 핵심은 Envoy 사이드카 프록시가 파드마다 붙어 모든 인·아웃바운드 트래픽을 가로챈다는 점이에요. 그 다음엔 VirtualServiceDestinationRule이라는 두 가지 리소스가 라우팅 규칙을 정의해요.

  • VirtualService: 요청이 실제로 어디로 갈지 정해요. 호스트 이름, 경로, 헤더 같은 조건으로 요청을 매칭하고, 매칭된 요청을 특정 destination으로 보내죠. 무게(weight)를 줘서 트래픽을 두 버전에 나눠 보내는 카나리 배포도 여기서 해요.
  • DestinationRule: 어느 버전이 실제 파드의 어떤 티어로 가는지, 그리고 연결 풀·타임아웃·리트라이 같은 정책을 정의해요. VirtualService가 "어느 destination으로 갈지"를 정한다면, DestinationRule은 "그 destination의 하위 버전(subset)을 어떻게 다룰지"를 정해요.

매칭 조건으로 쓸 수 있는 필드는 HTTPMatchRequest레퍼런스에서 확인할 수 있고, 호스트·포트·경로·헤더·쿼리 파라미터·메서드 같은 것들이 있어요. 그 외에도 게이트웨이에서 L4~L6 로드밸런싱을 설정하고, TLS 종료, 인그레스·이그레스 트래픽 제어도 이 개념 위에서 다뤄요.

더 알아보기

  • VirtualService/DestinationRule의 전체 필드: networking reference
  • 요청 라우팅 태스크에서 실제 VirtualService 예시를 직접 보고 싶다면 Request Routing