현대적인 마이크로서비스 아키텍처에서는 서비스 간 통신, 보안, 트래픽 제어, 관측 가능성(O11y)을 통합적으로 다루는 솔루션이 필요하다. Envoy는 이러한 요구사항을 만족시키는 고성능 L7 프록시이며, 서비스 메시 구조에서 데이터 플레인(Data Plane) 으로 자주 활용된다. Istio, AWS App Mesh, Consul Connect 등 주요 서비스 메시가 내부적으로 Envoy를 채택하고 있다.
Envoy는 원래 Lyft에서 개발한 오픈소스 L7 프록시로, 다음과 같은 역할을 수행한다:
Homebrew를 통해 간편하게 설치할 수 있다:
brew install envoy
설치가 완료되면 다음 명령어로 버전을 확인한다:
envoy --version
Envoy는 YAML 기반 설정 파일을 통해 구동되며, 아래와 같은 demo.yaml 예제를 통해 기본 구조를 파악할 수 있다.
admin:
access_log_path: "/tmp/admin_access.log"
address:
socket_address:
address: 0.0.0.0
port_value: 9901
static_resources:
listeners:
- name: listener_0
address:
socket_address:
address: 0.0.0.0
port_value: 10000
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:
name: local_route
virtual_hosts:
- name: backend
domains: ["*"]
routes:
- match:
prefix: "/"
route:
cluster: service_1
http_filters:
- name: envoy.filters.http.router
typed_config:
"@type": type.googleapis.com/envoy.extensions.filters.http.router.v3.Router
clusters:
- name: service_1
connect_timeout: 0.25s
type: strict_dns
lb_policy: round_robin
load_assignment:
cluster_name: service_1
endpoints:
- lb_endpoints:
- endpoint:
address:
socket_address:
address: localhost
port_value: 1234
envoy -c demo.yaml
정상적으로 실행되었다면 다음과 같이 테스트를 진행할 수 있다. 이때 3개의 터미널을 활용하면 테스트 흐름을 직관적으로 파악할 수 있다.
터미널 1: Envoy 실행
envoy -c demo.yaml
터미널 2: 백엔드 서버 실행 (간단한 Python HTTP 서버)
python3 -m http.server 1234
터미널 3: Envoy를 통한 요청 테스트
curl http://localhost:10000/
→ 정상적으로 Python 서버의 디렉터리 listing HTML이 응답된다면 성공이다. 이는 Envoy가 수신한 요청을 백엔드 서버(1234 포트)로 라우팅하고, 응답을 다시 클라이언트로 반환하고 있다는 것을 의미한다.
만약 curl 명령을 통해 / 루트로 요청을 보냈을 때, Directory listing for / HTML 페이지가 출력된다면 이는 Python의 기본 HTTP 서버가 정상적으로 작동하고 있으며 Envoy가 해당 요청을 제대로 전달하고 있다는 증거다.
localhost:1234로 열리는 백엔드 서버는 반드시 Envoy 실행 이전 혹은 동시에 열어야 정상적으로 동작함http://localhost:9901로 접근해 상태를 확인하거나 /config_dump, /stats와 같은 endpoint 호출도 가능