Skip to main content

Docs

God shall bless us; and all the ends of the earth shall fear him.

envoy-proxy 대규모 서비스를 위한 L7 프록시

목차

Proxy​

프록시는 다른 네트워크 서비스에 간접적으로 접속할 수 있게 해 주는 애플리케이션을 말합니다. 프록시를 사용해 다음 목적을 달성할 수 있습니다.

프록시는 크게 세 종류로 나눕니다.

  • 포워드 프록시
    일반적인 프록시를 말합니다. 네트워크상에 어느 위치에 있을 수 있고, 주로 캐싱 목적으로 사용합니다.
  • 리버스 프록시
    서버쪽에서 사용되는 프록시로 서버 자원을 보호합니다. http로 서브되는 원본 서버를 숨길 수 있고, TLS 인증을 추가할 수 있습니다. 또한, 로드밸런싱과 캐시 등을 사용할 수 있습니다.
  • 오픈 프록시
    IP 우회와 인터넷 속도가 느린 곳에서 캐시를 위해 사용합니다.

프록시는 대개 TCP/IP L4 레이어로 작동했습니다. 하지만 MSA에서 URL이나 HTTP header를 이용한 복잡한 라우팅을 요구하며, L7 라우팅이 필요하게 됬습니다.

Envoy​

L4 라우팅은 IP와 Port 정보로 이루어집니다. 하지만 전체 요청을 읽고 파싱해야 하는 L7는 조금 느릴 수 밖에 없습니다. Envoy(舊Lyft)는 MSA가 요구하는 L7 라우팅, 네트워크 투명성, 쉬운 문제 파악을 위해 등장했습니다. 이는 다음으로 구현됩니다.

Out of Process Architecture​

모든 Envoy는 각 애플리케이션 마다 함께 실행됩니다. 각 애플리케이션은 로컬호스트 Envoy와 통신하며 네트워크 토폴로지를 인식하지 못하는, 즉 투명성(transparent)를 지원합니다.

이는 기존 proxy에 비해 두가지 이점을 지닙니다.

  • 다양한 언어 지원 Java, C++, Go, PHP, Python
  • 업그레이드와 배포의 투명화

L3/L4 필터​

플러그형 체인 필터는 서로 다른 TCP/UDP 프록시를 수행할 수 있게 작성되었습니다. 필터는 이미 TCP, UDP, HTTP, Redis, MongoDB, Postgres 와 TLS 인증을 지원하도록 작성됬습니다.

L7 필터​

버퍼링, 속도 제한, 라우팅 등 HTTP 연결 관리 서브시스템 기능을 사용할 수 있습니다. L7 트래픽에 대한 깊은 가시성으로 MongoDB, DynamoDB 등에 wire 레벨의 가시성을 제공합니다.

다양한 프로토콜 지원​

HTTP/2, gRPC 프로토콜을 최고 수준으로 지원합니다.
RFC7540(HTTP/2)


실습​

Envoy를 실행해 보는 다양한 방법이 있으나, 가장 간단하다고 생각되는 도커 이미지로 해봅시다.

$ docker pull envoyproxy/envoy-dev:21df5e8676a0f705709f0b3ed90fc2dbbd63cfc5
$ docker run --rm envoyproxy/envoy-dev:21df5e8676a0f705709f0b3ed90fc2dbbd63cfc5 --version

envoy version: 21df5e8676a0f705709f0b3ed90fc2dbbd63cfc5/1.20.0-dev/Clean/RELEASE/BoringSSL

$ docker run --rm -d -p 10000:10000 envoyproxy/envoy-distroless-dev:21df5e8676a0f705709f0b3ed90fc2dbbd63cfc5

http://localhost:10000 으로 접속하면 envoy 공식 홈페이지로 라우팅 됩니다. 이는 envoy.yaml 로 설정할 수 있습니다.


Tips​

Istio는 envoy의 강력한 프록시 기능을 이용해 쿠버네티스에 프로그램 가능한 애플리케이션 인식 레이어를 구축합니다.

위의 실습을 해보면, envoy 설정파일을 수정해도 실행시간에 동적으로 라우팅이 변경되지 않는 걸 알 수 있습니다. Istio는 설정이 바뀌면 sidecar로 inject 된 envoy 컨테이너를 재생성하는 것이 아닌가 추측해 봅니다.
Istio

(Nginx 글을 언젠가 작성하겠습니다)

Reference​

[위키]프록시 서버
[공식]Envoy Proxy
[조대협]Envoy Proxy
[공식]Install envoy using docker