Istio

Envoy 기초

dongb 2023. 12. 27. 16:03
반응형

Overview

MSA 시장이 커지면서 서비스들은 서로 통신해야 했는데 여기에는 HTTP, gRPC, MongoDB 등 L7 프로토콜이 핵심적으로 사용됐다.

L3, L4 기반의 기존 프록시들은 위와 같은 요구사항을 처리하기 어려웠고, 그에 따라 L7 기능을 포함하는 프록시가 점차 필요하게 됐다. 이런 상황에서 만들어진 Envoy 프록시의 기본 개념에 대해 알아본다.

 

Envoy란?

네트워크는 애플리케이션에 투명해야 하며 장애가 발생하면 어디에서 문제가 발생했는지 쉽게 파악할 수 있어야 한다.

Envoy는 Lift사에서 위와 같은 목적을 갖고 만들어진 클라우드 네이티브 애플리케이션용 서비스 프록시 오픈 소스이다.

CNCF에서 Kubernetes, Prometheus 다음 세번째 Graduated Project로도 알려져있다.

 

Istio에서 기본으로 채택한 프록시로써 애플리케이션 service에 사이트카로 배치되며 이를 통해 service간 통신에서 다양한 기능을 수행하기도 한다.

 

Envoy 기능

  • HTTP, TCP, gRPC 지원
  • TLS client certification 지원
  • HTTP L7 라우팅을 통한 URL 기반 라우팅, 버퍼링, 서버간 부하 분산 조절
  • HTTP2 지원
  • Circuit breaker, Retries, Timeout 등 지원
  • 다양한 metric 수집 기능 및 Zipkin 통합을 통해 분산 트랜젝션 성능 측정 제공 → Visibility 제공
  • Dynamic configuration 지원 (설정 정보를 동적으로 읽어옴) → Server shutdown 없이 라우팅 설정 변경 가능
  • MongoDB 및 AWS Dynamo에 대해 L7 라우팅 기능 제공

위치에 따른 Envoy 프록시 기능

위치에 따른 Envoy 프록시 기능

envoy 프록시는 4가지 위치에 배포가 가능하고, 그 위치에 따라 다양한 기능 수행이 가능하다.

Front Envoy proxy

전체 시스템의 가장 앞 단에 위치하는 프록시.

클라이언트가 요청한 각 호출을 받아 적절한 서비스로 라우팅 한다. 이때 라우팅을 URL 기반으로 하거나 TLS(SSL) 처리를 하는 등의 역할도 가능하다. (이 프록시에서 TLS 인증 처리를 하면 내부 서비스들은 별도로 처리하지 않게 할 수 있다.)

Service to Service ingress listener

특정 서비스 앞 단에 위치시키는 배포 방식. 해당 서비스로 들어오는 트래픽에 대한 처리를 하며 버퍼링, circuit breaker 수행

Service to Service egress listener

특정 서비스 뒷 단에 위치시키는 배포 방식. 호출 대상이 되는 서비스에 대해 로드 밸런싱, 호출 횟수 통제 같은 기능 수행

External service Egress listener

내부 서비스에서 외부 서비스로 나가는 트래픽을 관리. delegator와 같은 역할 수행

서비스 앞뒤에 envoy를 위치시키고 싶을 때 실제로 두개의 envoy 프록시를 배치 하지는 않고 ingress/egress 용도를 겸해 사용한다.

 

Envoy 구조

Envoy 설정 파일은 크게 Listener, Filter, Cluster 세가지로 구성된다.

Envoy 구조

  • Listener: 프로토콜을 받는 부분. TCP Listener, Http Listener 등이 있음
  • Filter: 받은 요청을 중간 처리하는 부분. 압축, traffic 제한 등 처리를 한 후 router를 통해 적절한 클러스터로 메시지를 라우팅, filter chain을 이용해서 연속으로 정의.
  • Cluster: 실제 라우팅이 될 대상 서비스 지정
반응형