envoy速覽

組織架構

  1. Listeners::它們定義了 Envoy 代理如何接受傳入的請求。目前,Envoy Proxy 僅支持基於 TCP 的偵聽器。建立連接後,將其傳遞給一組過濾器進行處理
  2. Filters:它們是可以處理入站和出站數據的管道架構的一部分。此功能啓用過濾器,例如 Gzip,可在將數據發送到客戶端之前對其進行壓縮
  3. Routers:這些將流量轉發到所需的目的地(集羣)。
  4. Clusters:它們定義流量的目標端點和配置設置。

特點

  1. 每個工作線程運行一個非阻塞事件循環
  2. 轉發日誌爲stdout和stderr
  3. 通過docker配置低權限用戶
  4. xDS 配置(discovery service)
    • eds, cds, lds
    • file-based,RESTful-api,gRPC
  5. 灰度測試 weight
  6. 方便集成監控(Jaeger)和指標(Prometheus)

簡單樣例

static_resources:
  listeners:
  - name: listener_0
    address:
      socket_address: { address: 0.0.0.0, port_value: 10000 }
 
    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: { host_rewrite: www.google.com, cluster: service_google }
          http_filters:
          - name: envoy.router
 
  clusters:
  - name: service_google
    connect_timeout: 0.25s
    type: LOGICAL_DNS
    dns_lookup_family: V4_ONLY
    lb_policy: ROUND_ROBIN
    hosts: [{ socket_address: { address: google.com, port_value: 443 }}]
    tls_context: { sni: www.google.com }
 
admin:
  access_log_path: /tmp/admin_access.log
  address:
    socket_address: { address: 0.0.0.0, port_value: 9901 }

參考

envoy官方教程