본문으로 바로가기

Envoy(엔보이)란? envoy proxy띄우기

category 개발/AWS 2019.06.10 11:47

Envoy(엔보이)란?

엔보이는 L7 프록시(OSI 7 Layer)이고 커뮤니케이션 버스입니다. 커다란 현대적인 서비스 기반 아키텍쳐를 위해 만들어졌습니다. 네트웍과 어플리케이션 문제들을 조금 더 쉽게 해결 할 수 있습니다.

 

프록시란?

프록시란 일종에 자동 가격비교 사이트 같은 것입니다. 우리가 특정 물건을 검색하면 어떤 사이트에서 얼마에 파는지 알려줍니다. 프록시는 여기에 더해서 가장 가격이 저렴한 사이트로 바로 이동하게 해주는 기능이 포함 되어 있다고 생각하시면 됩니다. 사용자의 요청이 어떤 서버로 가면 좋을지를 판단해서 사용자의 요청을 해당 서버에 보내고 그 결과를 사용자에게 대신 전달해주는 것이 프록시 입니다.

 

Transparent proxy(트렌스패런트 프록시)란?

투명한 프록시로서 사용자가 요청한 내용을 변경하지 않고 대상 서버로 보내고 받는 프록시를 말한다.

 

MSA에서 프록시(proxy)를 사용하는 이유

MSA(Micro Service Architecture)에서는 서비스를 마이크로하게 잘게 쪼갭니다. 그리고 쪼개진 각 서비스들을 연결 해야 합니다. 현재는 주로 서버끼리 통신을 할 때 http request를 이용해 통신을 합니다. 하지만 서비스가 복잡해지고 모니터링을 해야 하는 등의 이슈가 있습니다. 서비스가 점점 커지고 기능이 추가되면서 이 부분을 http request만으로 해결하기가 어렵게 되었습니다. 그래서 서버들 사이에 프록시를 놓고 통신을 해서 로깅을 하거나 프록시가 어떤 서버로 요청을 해야 하는지 정해주기도 합니다.

Envoy 띄우기

docker로 띄우면 됩니다

 

$ docker pull envoyproxy/envoy-dev:c167c65b8b93a3bcd92ba24c50c6f175b053f06e

$ docker run --rm -d -p 10000:10000 envoyproxy/envoy-dev:c167c65b8b93a3bcd92ba24c50c6f175b053f06e

$ curl -v localhost:10000

 

위 명령어로 띄우면 됩니다.

 

간단 설정

Envoy can be configured using a single YAML file passed in as an argument on the command line.

엔보이는 YAML파일로 설정 할수 있습니다. YAML파일은 커맨드라인으로 넘길 수 있습니다.

어드민 서버를 설정 하려면 어드민 메세지가 필요합니다. 주소 key는 듣는 주소(listening address)를 구분합니다. 이 경우에는 간단하게 0.0.0.0:9901 입니다.

 

envoyproxy는 docker image로 제공 됩니다.

 

 

엔보이와 네트웍 스택

당신이 HTTP 네트웍 프록시를 만들고 싶다고 가정해 보겠습니다. 두가지 방법이 있습니다. HTTP레벨에서 하는 방법이 있고 TCP레벨에서 하는 방법이 있습니다.

 

HTTP레벨에서 한다면 HTTP 전체 요청에 대해 읽어야 하고 파싱 해야 하고 헤더와 URL을 확인하고 무엇을 할지 결정 해야 합니다. 그러면 당신은 전체 응답(response)을 백엔드에서 읽어와야 하고 이것을 클라이언트에 보내줘야 합니다. 이것이 OSI 7번째 계층 프록시 입니다. 이 프록시는 유저가 어떤것을 원하고 어떤 것을 시도했는지에 대한 모든 것을 알고 있습니다. 그리고 이 프록시는 똑똑하게 작동하기 위한 지식을 가지고 있습니다.

HTTP프록시의 단점은 복잡하고 느리다는 것입니다. HTTP프록시는 어떤 결정을 내리기 전에 전체 요청(request)을 읽고 파싱합니다. 시간이 꽤 오래 걸리겠지요? 종종 최상위(highest) 레벨 프로토콜은 의사결정을 하는데 필요한 정보를 하나도 가지고 있지 않은 경우도 있습니다.

 

이것을 설명하기 가장 좋은 예는 SSL입니다. SSL 클라이언트는 SRI 확장이 추가되기 전에 어떤 호스트가 연결을 시도하는 중인지 확인하지 않습니다. HTTP서버들이 가상 호스트를 잘 관리 하고 있어도 7번째 계층의 프록시는 SSL을 정확히 프록시 하는데 필요한 정보가 없습니다.

 

그렇기 때문에 이 문제는 TCP 레벨에서 처리하는게 좋습니다. 어떻게 핸들링 할지를 결정하기 위해 단순히 바이트를 읽고 쓰고 IP주소를 사용하고 TCP 포트 번호가 있으면 됩니다. 이것은 OSI 3레벨 또는 4레벨 프록시 입니다. 엔보이의 용어를 빌어 표현하면 이것은 3/4 계층 프록시라고 표현 할 수 있습니다.

 

이 모델에서 속도를 향상 시키고 조금 더 멋지게 처리할 수 있습니다. 반대로 당신은 다른 URL을 다른 백엔드로 프록시 하고 싶을 때가 있다면 어떻게 하시겠습니까? 이것은 L3/4 proxy에서는 불가능 합니다. 상위 레벨에서 아래 단계로 액세스 하는 것은 불가능 합니다.

 

엔보이는 이 두가지 경우에 있는 물제점들을 3, 4, 7 계층을 유기적으로 관리 하면서 해결 해줍니다. 엔보이는 이런 점에서 강력하고 성능이 좋습니다. 하지만 설정을 하는 수고가 필요합니다.

 

간단한 것은 간단하게 처리하면서 복잡한 것들을 가능하게 해줍니다. 엔보이는 HTTP 프록싱 같이 괜찮은 성능을 보여줄 것입니다.


댓글을 달아 주세요

  1. 좋아요 2019.08.07 16:08

    좋아요^^