🔧
DevOps
Envoy
Envoy Proxy
클라우드 네이티브 프록시. Istio의 데이터 플레인.
Envoy Proxy
클라우드 네이티브 프록시. Istio의 데이터 플레인.
Envoy는 Lyft에서 개발한 고성능 L7(애플리케이션 레이어) 프록시로, 현재 CNCF 졸업 프로젝트입니다. 마이크로서비스 아키텍처에서 서비스 간 통신을 처리하며, Istio, AWS App Mesh 등 서비스 메시의 데이터 플레인으로 광범위하게 사용됩니다.
# envoy.yaml - HTTP 리버스 프록시 설정
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
codec_type: AUTO
route_config:
name: local_route
virtual_hosts:
- name: backend
domains: ["*"]
routes:
# API 라우트
- match:
prefix: "/api/"
route:
cluster: api_service
timeout: 30s
# 정적 파일
- match:
prefix: "/"
route:
cluster: frontend_service
http_filters:
- name: envoy.filters.http.router
typed_config:
"@type": type.googleapis.com/envoy.extensions.filters.http.router.v3.Router
clusters:
- name: api_service
connect_timeout: 5s
type: STRICT_DNS
lb_policy: ROUND_ROBIN
load_assignment:
cluster_name: api_service
endpoints:
- lb_endpoints:
- endpoint:
address:
socket_address:
address: api-server
port_value: 3000
# 헬스체크
health_checks:
- timeout: 3s
interval: 10s
unhealthy_threshold: 3
healthy_threshold: 2
http_health_check:
path: /health
# 서킷 브레이커
circuit_breakers:
thresholds:
- priority: DEFAULT
max_connections: 1000
max_pending_requests: 1000
max_requests: 1000
max_retries: 3
- name: frontend_service
connect_timeout: 5s
type: STRICT_DNS
lb_policy: ROUND_ROBIN
load_assignment:
cluster_name: frontend_service
endpoints:
- lb_endpoints:
- endpoint:
address:
socket_address:
address: frontend
port_value: 80
admin:
address:
socket_address:
address: 0.0.0.0
port_value: 9901
# Rate limit 필터 설정
http_filters:
- name: envoy.filters.http.ratelimit
typed_config:
"@type": type.googleapis.com/envoy.extensions.filters.http.ratelimit.v3.RateLimit
domain: my_domain
stage: 0
rate_limit_service:
grpc_service:
envoy_grpc:
cluster_name: ratelimit_service
transport_api_version: V3
- name: envoy.filters.http.router
# Route level rate limit
routes:
- match:
prefix: "/api/"
route:
cluster: api_service
rate_limits:
- actions:
- request_headers:
header_name: "x-api-key"
descriptor_key: "api_key"
# TLS 리스너 설정
filter_chains:
- filter_chain_match: {}
transport_socket:
name: envoy.transport_sockets.tls
typed_config:
"@type": type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.DownstreamTlsContext
require_client_certificate: true
common_tls_context:
tls_certificates:
- certificate_chain:
filename: /etc/certs/server.crt
private_key:
filename: /etc/certs/server.key
validation_context:
trusted_ca:
filename: /etc/certs/ca.crt
Envoy YAML 설정은 매우 복잡합니다. 직접 작성보다는 Istio, Contour 같은 상위 레벨 도구를 사용하거나, xDS 컨트롤 플레인을 활용하세요.
사이드카 패턴으로 배포 시 파드당 추가 메모리/CPU가 필요합니다. 대규모 클러스터에서는 리소스 계획을 신중히 하세요.
프록시 레이어가 추가되면 네트워크 문제 디버깅이 복잡해집니다. Envoy admin API와 상세 로깅 활용법을 익혀두세요.
xDS API 버전(v2, v3)에 주의하세요. 최신 Envoy는 v2를 지원하지 않을 수 있습니다.