看看赤裸的envoy是什麼樣子的?

入門istio,envoy如今看來必不可少,花點時間瞭解一下吧。nginx

Envoy 是什麼

咱們援引一段官網的描述:架構

Envoy is an L7 proxy and communication bus designed for large modern service oriented architectures. The project was born out of the belief that: "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."app

Envoy 的核心功能/賣點

  • 非侵入的架構:Envoy 是和應用服務並行運行的,透明地代理應用服務發出/接收的流量。應用服務只須要和 Envoy 通訊,無需知道其餘微服務應用在哪裏。
  • 基於 Modern C++11實現,性能優異。
  • L3/L4 過濾器架構:Envoy 的核心是一個 L3/L4 代理,而後經過插件式的過濾器(network filters)鏈條來執行 TCP/UDP 的相關任務,例如 TCP 轉發,TLS 認證等工做。
  • HTTP L7 過濾器架構:HTTP在現代應用體系裏是地位很是特殊的應用層協議,因此 Envoy 內置了一個很是核心的過濾器: http_connection_managerhttp_connection_manager 自己是如此特殊和複雜,支持豐富的配置,以及自己也是過濾器架構,能夠經過一系列 http 過濾器(http filters)來實現 http協議層面的任務,例如:http路由,重定向,CORS支持等等。
  • HTTP/2 做爲第一公民:Envoy 支持 HTTP/1.1 和 HTTP/2,推薦使用 HTTP/2。
  • gRPC 支持:由於對 HTTP/2 的良好支持,Envoy 能夠方便的支持 gRPC,特別是在負載和代理上。
  • 服務發現: 支持包括 DNS, EDS 在內的多種服務發現方案。
  • 健康檢查:內置健康檢查子系統。
  • 高級的負載均衡方案:除了通常的負載均衡,Envoy 還支持基於 rate limit 服務的多種高級負載均衡方案,包括: automatic retries, circuit breaking, global rate limiting
  • Tracing:方便集成 Open Tracing 系統,追蹤請求
  • 統計與監控:內置 stats 模塊,方便集成諸如 prometheus/statsd 等監控方案
  • 動態配置:經過「動態配置API」實現配置的動態調整,而無需重啓 Envoy 服務的。

核心術語解釋

Host負載均衡

這裏的 Host,能夠理解爲由 IP, Port 惟一肯定的服務實例dom

Downstreamsocket

發送請求給 Envoy 的 Host 是 Downstream(下游),例如gRPC的 client微服務

Upstream性能

接收 Enovy 發出的請求的 Host 是Upstream(上游),例如 gRPC的 serverui

Listenerspa

Envoy 監聽的一個地址,例如 ip:port, unix socket 等等

Cluster

一組功能一致的上游 Host,稱爲一個cluster。相似 k8sService, nginxupstream

Http Route Table

HTTP 的路由規則,例如請求的域名,Path符合什麼規則,轉發給哪一個 Cluster。


此次用的只有靜態的配置文件:
admin:
  access_log_path: /tmp/admin_access.log
  address:
    socket_address: { address: 0.0.0.0, port_value: 9901 }

static_resources:
  listeners:
  - name: listener_0
    address:
      socket_address: { address: 0.0.0.0, port_value: 7777 }
    filter_chains:
    - filters:
      - name: envoy.http_connection_manager
        config:
          stat_prefix: ingress_http
          route_config:
            name: local_route
            virtual_hosts:
            - name: local_service
              domains: ["*"]
              routes:
              - match: { prefix: "/" }
                route: { cluster: some_service }
          http_filters:
          - name: envoy.router
  clusters:
  - name: some_service
    connect_timeout: 0.25s
    type: STATIC
    lb_policy: ROUND_ROBIN
    hosts: [{ socket_address: { address: 127.0.0.1, port_value: 8000 }}]

 

相關文章
相關標籤/搜索