监听器
Envoy 配置支持在单个进程中使用任意数量的监听器。通常情况下,我们建议无论配置了多少监听器,都应该在每台机器上运行一个 Envoy。这使得操作更轻松,并且提供了一个单一的统计信息来源。
TCP
每个监听器都独立配置了 filter_chains,其中单个 filter_chain 是根据其 filter_chain_match 标准选择的。
单个 filter_chain 由一个或多个网络级(L3/L4) 过滤器 组成。
当监听器接收到新的连接时,会选择相应的 filter_chain,并实例化配置的连接本地过滤器栈,并开始处理后续事件。
通用监听器架构用于执行 Envoy 用来执行的大多数不同代理任务(例如,速率限制、TLS 客户端身份验证、HTTP 连接管理、MongoDB 嗅探、原始 TCP 代理 等)。
监听器还可以选择配置一些 监听器过滤器。这些过滤器在网络级过滤器之前处理,并有机会操纵连接元数据,通常是影响后续过滤器或集群如何处理连接。
监听器也可以通过 监听器发现服务 (LDS) 动态获取。
UDP
Envoy 还支持 UDP 监听器,特别是 UDP 监听器过滤器。
UDP 监听器过滤器在每个工作进程中实例化一次,并且对该工作进程是全局的。
每个监听器过滤器处理每个由监听该端口的工作进程接收的 UDP 数据报。
实际上,UDP 监听器配置了 SO_REUSEPORT
内核选项,该选项将导致内核始终将每个 UDP 4 元组散列到同一个工作进程。这使得 UDP 监听器过滤器可以根据需要以“会话”为导向。一个内置的示例是 UDP 代理 监听器过滤器。