视频讲解: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 filters、Thrift filters、Dubbo 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。