视频讲解:Envoy手把手入门视频讲解

Envoy 的 network filter 列表

可以加入到 filter_chains 中的 network filter 数量众多,Network filters 中列出了以下几个:

Dubbo proxy
Client TLS authentication
Echo
External Authorization
Mongo proxy
MySQL proxy
Rate limit
Role Based Access Control (RBAC) Network Filter
Redis proxy
TCP proxy
Thrift proxy
Upstream Cluster from SNI
ZooKeeper proxy

另还有一个名为 HTTP connection manager 的 network filter,这个 filter 主要处理 http 协议,自身已经足够复杂,被单独列出 HTTP connection manager

HTTP connection manager、Thrift proxy 和 Dubbo proxy 还有在自己内部使用的 filter,分别是: HTTP filtersThrift filtersDubbo filters

envoy.tcp_proxy

TCP proxy 是四层 tcp 代理,管理 downstream client 与 upstream cluster 之间的 tcp 连接,保证连接数不超过 upstream cluster 的上限。

envoy.ratelimit

Rate limit 提供全局限速功能(需要连接外部的限速服务),可以限制 tcp 连接速率和 http 请求速率。为了避免每个连接、或者每个请求都查询限速服务,可以设置限速服务的查询占比:

ratelimit.tcp_filter_enabled     # 对应比例的连接会查询限速服务,但不执行查询结果
ratelimit.tcp_filter_enforcing   # 对应比例的连接会查询限速服务,并按照查询结果执行

envoy.filters.network.rbac

Role Based Access Control (RBAC) Network Filter 提供了访问控制的能力。

envoy.client_ssl_auth

Client TLS authentication 验证 client 端的证书,它会以配置的频率调用 GET /v1/certs/list/approved 获取最新的有效证书。

envoy.ext_authz

External Authorization 通过外部的认证服务判断当前请求是否获得授权,如果没有授权,关闭连接。

filters:
  - name: envoy.ext_authz
    config:
      stat_prefix: ext_authz
      grpc_service:
        envoy_grpc:
          cluster_name: ext-authz

clusters:
  - name: ext-authz
    type: static
    http2_protocol_options: {}
    load_assignment:
      cluster_name: ext-authz
      endpoints:
      - lb_endpoints:
        - endpoint:
            address:
              socket_address:
                address: 127.0.0.1
                port_value: 10003

envoy.echo

Echo 将收到的数据原样返回给客户端。

envoy.http_connection_manager

HTTP connection manager 是专门处理 http 协议的 network filter,因为 http 最经常使用的协议,对代理功能需求也非常多样, HTTP connection manager 本身是一个比较复杂的 network filter,在 envoy 文档中被单独列出:HTTP connection manager

HTTP connection manager 有自己专用的 HTTP filters,在 http filters 中单独介绍。

envoy.filters.network.thrift_proxy

Thrift proxy 能够解析 thrift 协议。

Thrift proxy 有自己专用的 Thrift filters

envoy.filters.network.dubbo_proxy

Dubbo proxy 解析 dubbo client 和 service 之间的 grpc 通信。

Dubbo proxy 有自己专用的 Dubbo filters

filter_chains:
- filters:
  - name: envoy.filters.network.dubbo_proxy
    config:
      stat_prefix: dubbo_incomming_stats
      protocol_type: Dubbo
      serialization_type: Hessian2
      route_config:
        name: local_route
        interface: org.apache.dubbo.demo.DemoService
        routes:
        - match:
            method:
              name:
                exact: sayHello
          route:
            cluster: user_service_dubbo_server
      dubbo_filters:
      - name: envoy.filters.dubbo.testFilter
        config:
          "@type": type.googleapis.com/google.protobuf.Struct
          value:
            name: test_service
      - name: envoy.filters.dubbo.router

envoy.filters.network.zookeeper_proxy

ZooKeeper proxy 能够解析 zookeeper 协议。

envoy.mongo_proxy

Mongo proxy 能够解析 mongo 通信,记录 mongo 日志、统计、注入错误等。

envoy.filters.network.mysql_proxy

MySQL proxy 能够解析 mysql 的通信协议,需要和 [TCP proxy][] 一起使用:

filter_chains:
- filters:
  - name: envoy.filters.network.mysql_proxy
    typed_config:
      "@type": type.googleapis.com/envoy.config.filter.network.mysql_proxy.v1alpha1.MySQLProxy
      stat_prefix: mysql
  - name: envoy.tcp_proxy
    typed_config:
      "@type": type.googleapis.com/envoy.config.filter.network.tcp_proxy.v2.TcpProxy
      stat_prefix: tcp
      cluster: ...

envoy.redis_proxy

Redis proxy 能够解析 redis 协议,使 envoy 成为 redis 代理,可以将不同的 redis command 代理到不同 redis cluster。

参考