ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Envoy Proxy 소개
    Envoy & Istio 2019. 8. 8. 22:01

     

    https://www.envoyproxy.io/

     

    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

    https://www.envoyproxy.io/docs/envoy/latest/start/start

    댓글

Designed by Tistory.