Envoy Proxy Reference
Envoy Proxy 서비스 메시 프록시 레퍼런스
Envoy Proxy Reference 소개
Envoy Proxy 레퍼런스는 현대 마이크로서비스 아키텍처에서 사용되는 고성능 L7 프록시 Envoy의 핵심 설정 개념을 검색할 수 있는 치트 시트입니다. 리스너(TLS 종단, LDS), 클러스터(로드 밸런싱 정책, 헬스체크, 서킷 브레이커, 이상치 탐지), 라우트(경로/헤더 매칭, 가중치 라우팅, 재시도 정책), HTTP 필터(커넥션 매니저, CORS, JWT 인증, Lua, ext_authz, 속도 제한), Istio 서비스 메시 연동(사이드카 프록시, mTLS, VirtualService, DestinationRule), 설정 관리(정적, xDS 동적, 액세스 로깅, 관리 인터페이스)를 다룹니다.
Kubernetes, Istio 또는 독립형 Envoy 배포를 다루는 DevOps 엔지니어, 플랫폼 엔지니어, SRE, 백엔드 개발자를 위해 설계되었으며, 6개 카테고리로 정리된 바로 사용 가능한 YAML 설정 스니펫을 제공합니다. 각 항목에는 복사하여 바로 적용할 수 있는 완전한 설정 예제가 포함되어 있습니다.
모든 콘텐츠는 브라우저에서 로컬로 렌더링되며 서버 처리가 없습니다. 다크 모드를 지원하고 데스크톱, 태블릿, 모바일에서 원활하게 작동합니다.
주요 기능
- TLS 종단, 리스너 필터, 다중 포트, LDS 동적 디스커버리를 포함한 리스너 설정 레퍼런스
- ROUND_ROBIN/LEAST_REQUEST 로드 밸런싱, 헬스체크, 서킷 브레이커, 이상치 탐지를 다루는 클러스터 레퍼런스
- 접두사/경로/정규식 매칭, 헤더 기반 라우팅, 가중치 트래픽 분할, 재시도 정책을 포함한 라우트 설정
- 커넥션 매니저, CORS, JWT 인증, Lua 스크립팅, 외부 인가, 속도 제한을 위한 HTTP 필터 레퍼런스
- 사이드카 프록시, mTLS PeerAuthentication, VirtualService, DestinationRule 예제를 포함한 Istio 서비스 메시 연동
- 액세스 로깅 및 관리 인터페이스 엔드포인트와 함께하는 정적 및 동적(xDS) 설정 관리
- 프로덕션 배포에 바로 복사하여 적용할 수 있는 완전한 YAML 설정 스니펫
- 리스너, 클러스터, 라우트, 필터, 서비스 메시, 설정의 6개 체계적 카테고리
자주 묻는 질문
Envoy Proxy란 무엇이며 왜 사용하나요?
Envoy는 클라우드 네이티브 애플리케이션을 위해 설계된 고성능 오픈소스 L7 프록시입니다. 고급 로드 밸런싱, 서비스 디스커버리, TLS 종단, HTTP/2 및 gRPC 지원, 서킷 브레이킹, 헬스체크, 옵저버빌리티를 제공합니다. Istio 서비스 메시의 기본 데이터 플레인 프록시이며 Kubernetes 환경에서 트래픽 관리, 보안, 관측성을 위해 널리 사용됩니다.
Envoy 리스너와 클러스터는 어떻게 함께 작동하나요?
리스너는 지정된 주소와 포트에서 들어오는 네트워크 연결을 수신하고 필터 체인을 적용하여 트래픽을 처리합니다. HTTP 커넥션 매니저 필터가 라우트 설정 규칙에 따라 요청을 클러스터로 라우팅합니다. 클러스터는 로드 밸런싱 정책, 헬스체크, 서킷 브레이커와 함께 업스트림 서비스 엔드포인트를 정의합니다. 함께 요청 흐름을 구성합니다: 리스너가 트래픽 수신, 필터가 처리, 라우트가 매칭, 클러스터가 백엔드 서비스로 전달합니다.
Envoy는 어떤 로드 밸런싱 정책을 지원하나요?
Envoy는 ROUND_ROBIN(기본, 균등 분배), LEAST_REQUEST(활성 요청이 가장 적은 엔드포인트로 라우팅), RING_HASH(세션 어피니티를 위한 일관성 해싱), RANDOM(무작위 엔드포인트 선택), MAGLEV(더 나은 분배의 일관성 해싱)를 지원합니다. 각 정책은 클러스터별로 설정 가능하며, LEAST_REQUEST는 power-of-two-choices 알고리즘을 위한 choice_count 설정을 지원합니다.
Envoy의 서킷 브레이커는 어떻게 작동하나요?
Envoy 서킷 브레이커는 업스트림 서비스가 과부하되는 것을 방지합니다. 우선순위 수준별로 임계값을 설정합니다: max_connections(동시 TCP 연결 제한), max_pending_requests(대기 요청 제한), max_requests(동시 HTTP 요청 제한), max_retries(동시 재시도 제한). 임계값이 초과되면 Envoy가 요청을 단락(short-circuit)하고 에러를 반환하여 업스트림 서비스의 복구를 돕습니다.
Istio에서 mTLS를 어떻게 설정하나요?
Istio에서 PeerAuthentication 리소스를 생성하여 mTLS를 활성화합니다. STRICT 모드는 모든 트래픽 암호화를 강제하고, PERMISSIVE는 평문과 mTLS 모두 허용(마이그레이션에 유용), DISABLE은 비활성화합니다. Envoy 사이드카가 Istio Citadel을 통해 인증서 관리를 자동으로 처리합니다. 네임스페이스별 또는 메시 전체에 적용 가능합니다. DestinationRule로 특정 서비스의 트래픽 정책을 설정합니다.
xDS란 무엇이며 동적 설정은 어떻게 작동하나요?
xDS는 Envoy의 디스커버리 서비스 API 모음입니다: LDS(리스너), CDS(클러스터), RDS(라우트), EDS(엔드포인트), SDS(시크릿). 정적 YAML 파일 대신 제어 평면(Istio pilot 등)이 gRPC를 통해 Envoy에 설정을 동적으로 푸시합니다. 이를 통해 Envoy를 재시작하지 않고 라우팅 규칙, 서비스 엔드포인트, TLS 인증서를 실시간으로 업데이트할 수 있습니다.
Envoy에서 JWT 인증은 어떻게 설정하나요?
envoy.filters.http.jwt_authn 필터에 발급자 URL과 JWKS(JSON Web Key Set) 엔드포인트를 지정하는 프로바이더를 구성합니다. Envoy가 원격 JWKS URI에서 공개키를 가져와 들어오는 요청의 JWT 토큰을 검증합니다. 어떤 라우트에 인증이 필요한지 설정하고, 헤더나 쿼리 파라미터에서 토큰을 추출하는 방법을 지정할 수 있습니다.
가중치 라우팅이란 무엇이며 카나리 배포에 어떻게 사용하나요?
Envoy의 가중치 라우팅은 설정된 가중치에 따라 여러 클러스터로 트래픽을 분배합니다. 카나리 배포에서 라우트 설정의 weighted_clusters를 사용하여 service_v1에 90%, service_v2에 10%의 트래픽을 라우팅할 수 있습니다. 신뢰도가 높아지면 v2 비율을 점진적으로 증가시킵니다. Istio에서는 DestinationRule에 정의된 서브셋별 가중치와 VirtualService를 통해 설정합니다.