集群管理器
Envoy 的集群管理器管理所有配置的上游集群。就像 Envoy 配置可以包含任意数量的监听器一样,配置也可以包含任意数量的独立配置的上游集群。
上游集群和主机与网络/HTTP 过滤器堆栈分离,因为上游集群和主机可用于任意数量的不同代理任务。集群管理器向过滤器堆栈公开 API,允许过滤器获得与上游集群的 L3/L4 连接,或获得与上游集群的抽象 HTTP 连接池的句柄(上游主机是否支持 HTTP/1.1、HTTP/2 或 HTTP/3 是隐藏的)。一个过滤器阶段确定它是否需要 L3/L4 连接或新的 HTTP 流,而集群管理器处理所有关于哪些主机可用且健康、负载均衡、上游连接数据的线程局部存储(因为大多数 Envoy 代码被编写为单线程)、上游连接类型(TCP/IP、UDS)、上游协议(如果适用)(HTTP/1.1、HTTP/2、HTTP/3)等的复杂性。
集群管理器已知的集群可以通过静态配置或通过集群发现服务 (CDS) API 动态获取。动态集群获取允许在中央配置服务器中存储更多配置,从而需要更少的 Envoy 重启和配置分发。
集群预热
当集群在服务器启动时以及通过 CDS 初始化时,它们会被“预热”。这意味着集群只有在以下操作完成之后才会变得可用。
初始服务发现负载(例如,DNS 解析、EDS 更新等)。
初始活跃 健康检查 通过,如果配置了主动健康检查。Envoy 将向每个发现的主机发送健康检查请求,以确定其初始健康状态。
之前的项目确保 Envoy 在开始使用集群进行流量服务之前对其有一个准确的了解。
在讨论集群预热时,“集群变得可用”意味着
对于新添加的集群,在预热之前,该集群对于 Envoy 的其他部分来说并不存在。即,引用该集群的 HTTP 路由将导致 404 或 503(取决于配置)。
对于更新的集群,旧的集群将继续存在并提供服务。当新的集群预热后,它将与旧的集群进行原子交换,以便不会发生流量中断。