-
Envoy Proxy 소개Envoy & Istio 2019. 8. 8. 22:01
envoy는 클라우드 네이티브용으로 Lyft 사에서 C++로 개발해서 2016년 12월 14일 공개한 L7 프록시입니다.
2017년 5월에 Google, Lyft, IBM에서 공동으로 개발해서 내놓은 Service Mesh 오픈소스인 Istio의 메인 프록시가 됐습니다.
공개후 1년 뒤인 2017년 12월 14일에 CNCF에 11번째 프로젝트로 합류했습니다.
그리고 다시 1년뒤인 2018년 11월 28일 CNCF의 3번째 졸업 프로젝트가 되었습니다.
CNCF의 첫번째 졸업프로젝트는 Kubernetes이고 두번째 졸업프로젝트는 Prometheus입니다.
envoy는 다음을 목표로 하고 태어났습니다.
"The network should be transparent to applications. When network and application problems do occur it should be easy to determine the source of the problem."
“네트워크는 애플리케이션에 투명해야(transparent) 합니다. 네트워크나 애플리케이션에 문제가 발생했을때 문제의 원인을 쉽게 파악할수 있어야 합니다.”
envoy 주요 기능
- L7 프록시가 주요 기능이지만 핵심 부분은 L3/L4 프록시입니다.
- HTTP L7 필터 레이어를 제공합니다.
- HTTP/2 를 기본 지원합니다. 물론, HTTP/1.1도 지원합니다.
- HTTP L7 라우팅을 지원합니다.
- gRPC를 지원합니다.
- MongoDB L7을 지원합니다.
- DynamoDB L7을 지원합니다.
- 서비스 디스커버리(Service Discovery)와 설정을 동적으로 변경하는 것이 가능합니다.
- 헬스 체킹 지원.
- 자동 재시도, 서킷브레이킹, 전역 비율 제한, 요청 셰도잉, 이상 탐지 등을 제공합니다.
- 프론트/엣지 프록시 지원
- 관리용으로 다양한 통계 정보 제공.
envoy 시작하기
envoy는 docker를 이용해서 간단하게 실행해 볼 수 있습니다.
$ docker pull envoyproxy/envoy-dev:8b549bd994a1256fb1913d5dce050a016ed63877 $ docker run --rm -d -p 10000:10000 envoyproxy/envoy-dev:8b549bd994a1256fb1913d5dce050a016ed63877 $ curl -v localhost:10000
실행후에 브라우저에서 localhost:10000으로 접근하면 구글 첫 페이지가 뜨는걸 확인할 수 있습니다.
실행한 도커 컨테이너에 접속해서 설정파일인 /etc/envoy/envoy.yaml 의 내용을 확인하면 www.google.com 관련 설정들이 보이는걸 확인할 수 있습니다.
$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES d36fc0ad32b3 envoyproxy/envoy-dev:8b549bd994a1256fb1913d5dce050a016ed63877 "/docker-entrypoint.…" 2 minutes ago Up 2 minutes 0.0.0.0:10000->10000/tcp elegant_perlman $ docker exec -it d36fc0ad32b3 bash root@d36fc0ad32b3:/# cat /etc/envoy/envoy.yaml admin: access_log_path: /tmp/admin_access.log address: socket_address: protocol: TCP address: 127.0.0.1 port_value: 9901 static_resources: listeners: - name: listener_0 address: socket_address: protocol: TCP address: 0.0.0.0 port_value: 10000 filter_chains: - filters: - name: envoy.http_connection_manager typed_config: "@type": type.googleapis.com/envoy.config.filter.network.http_connection_manager.v2.HttpConnectionManager stat_prefix: ingress_http route_config: name: local_route virtual_hosts: - name: local_service domains: ["*"] routes: - match: prefix: "/" route: host_rewrite: www.google.com cluster: service_google http_filters: - name: envoy.router clusters: - name: service_google connect_timeout: 0.25s type: LOGICAL_DNS # Comment out the following line to test on v6 networks dns_lookup_family: V4_ONLY lb_policy: ROUND_ROBIN load_assignment: cluster_name: service_google endpoints: - lb_endpoints: - endpoint: address: socket_address: address: www.google.com port_value: 443 tls_context: sni: www.google.com root@d36fc0ad32b3:/#
참조
https://eng.lyft.com/announcing-envoy-c-l7-proxy-and-communication-bus-92520b6c8191
https://eng.lyft.com/envoy-joins-the-cncf-dc18baefbc22
https://www.cncf.io/announcement/2018/11/28/cncf-announces-envoy-graduation/
https://www.envoyproxy.io/docs/envoy/latest/intro/what_is_envoy#design-goals
'Envoy & Istio' 카테고리의 다른 글
istio를 이용해서 클러스터 외부에서 내부로 접근하도록 설정해보기 (0) 2019.08.26 istio 현재 설정 내용 확인하기 (0) 2019.08.23 istio ControlZ 웹 화면보기 (0) 2019.08.21 istio 설치하기 (2) 2019.08.19 istio란 무엇인가? (0) 2019.08.15 댓글