개요
Envoy는 Lyft가 개발한 고성능 오픈소스 L7 프록시 및 서비스 메시 데이터플레인. 마이크로서비스 간 통신을 투명하게 처리하며 Istio의 사이드카 프록시로 가장 널리 사용.
- GitHub: https://github.com/envoyproxy/envoy
- 개발: Lyft → CNCF 기부 (2017)
- 언어: C++
- 특징: L7 인식, 동적 설정, 풍부한 관찰성
핵심 개념
아키텍처
클라이언트
→ Listener (수신 포트/프로토콜)
→ Filter Chain (L4/L7 필터 파이프라인)
→ Route (요청 경로 매핑)
→ Cluster (업스트림 서버 그룹)
→ Endpoint (실제 인스턴스)
주요 구성 요소
| 구성요소 | 설명 |
|---|---|
| Listener | 수신 포트·프로토콜 설정 |
| Filter | HTTP 필터, 인증, 속도제한 등 |
| Route | URL·헤더 기반 트래픽 라우팅 |
| Cluster | 업스트림 서비스 그룹 (LB 설정) |
| Endpoint | 개별 서비스 인스턴스 |
xDS API (동적 설정)
Envoy는 정적 YAML 대신 xDS API로 실시간 설정 업데이트 가능:
| API | 역할 |
|---|---|
| LDS | Listener Discovery Service |
| RDS | Route Discovery Service |
| CDS | Cluster Discovery Service |
| EDS | Endpoint Discovery Service |
| ADS | Aggregated Discovery Service (통합) |
정적 설정 예시
static_resources:
listeners:
- name: listener_0
address:
socket_address:
address: 0.0.0.0
port_value: 8080
filter_chains:
- filters:
- name: envoy.filters.network.http_connection_manager
typed_config:
"@type": type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager
stat_prefix: ingress_http
route_config:
virtual_hosts:
- name: backend
domains: ["*"]
routes:
- match: { prefix: "/" }
route: { cluster: service_cluster }
http_filters:
- name: envoy.filters.http.router
clusters:
- name: service_cluster
type: STATIC
load_assignment:
cluster_name: service_cluster
endpoints:
- lb_endpoints:
- endpoint:
address:
socket_address:
address: 127.0.0.1
port_value: 8081주요 기능
| 기능 | 설명 |
|---|---|
| 로드 밸런싱 | Round Robin, Least Request, Ring Hash |
| 서킷 브레이커 | 연속 실패 시 트래픽 차단 |
| 재시도 | 실패 요청 자동 재시도 |
| 타임아웃 | 연결·요청 타임아웃 설정 |
| TLS | mTLS 지원 (서비스 메시) |
| 관찰성 | Prometheus 메트릭, Zipkin/Jaeger 트레이싱 |
서비스 메시에서의 역할
[Pod A] [Pod B]
App ↔ Envoy ──────── Envoy ↔ App
↑ ↑
└── Istio Control Plane (xDS)
Istio가 Envoy 사이드카를 자동 주입·설정 관리