监听器
对于一个进程,Envoy支持配置多个监听器。通常我们建议在每台机器上只跑一个 Envoy 服务而不管要起多少个监听器。这样对于运维操作比较简便,同时也有单一的统计来源。不过目前 Envoy 仅支持TCP 监听器。
每个监听器都可以独立配置多个基于L3/L4 网络层的过滤器。当一个监听器收到一个新的连接的时候,配置本地连接过滤器的堆栈将实例化,并开始处理后续事件。通用的监听器体系架构用于执行 Envoy 使用的绝大多数不同代理任务 (例如,速率限制、TLS 客户端身份验证、HTTP 连接管理、MongoDB 嗅探、原始 TCP 代理等)。
监听器同时也可选配置多个监听器过滤器。这些过滤器比网络层的过滤器先执行,同时可以有机会操作连接的元数据,通常会影响之后过滤器或群集处理连接的方式。
还可以通过监听器发现服务 (LDS listener discovery service) 动态获取侦听器。
网络层(L3/L4)过滤器
正如在监听器部分中所讨论的,网络层(L3/L4)过滤器构成了 Envoy 连接处理的核心。过滤器 API 允许混合和匹配不同的过滤器集,并将其附加到给定的监听器。有三种不同类型的网络过滤器:
- 读取:当 Envoy 从下游连接接收数据时,将调用读取过滤器。
- 写入:当 Envoy 要将数据发送到下游连接时, 将调用写入过滤器。
- 读取/写入:当 Envoy 从下游连接接收数据和即将将数据发送到下游连接时,都会调用读取/写入过滤器。
网络层筛选器的 API 相对简单,因为过滤器最终会对原始字节和少量连接事件 (例如TLS 握手完成、本地或远程断开连接等) 进行操作。过滤器链中的过滤器可以拦截请求处理后继续传递给下一个过滤器。这允许更复杂的方案,如调用速率限制服务等。网络级过滤器还可以在单个下游连接的上下文中共享它们之间的状态 (静态和动态)。有关详细信息,请参阅过滤器之间的数据共享。Envoy 已经包括了几个网络级过滤器, 这些过滤器在此体系结构概述中以及配置参考中都有文档记录。