集群管理器

Envoy 集群管理器管理所有配置的上游集群。正如 Envoy 配置可以包含任意数量的监听器一样,配置也可以包含任意数量的独立配置的上游集群。

上游集群和主机是从网络/HTTP 过滤器堆栈中抽象而来,因为上游集群和主机可用于任意数量的不同代理任务。集群管理器向过滤器堆栈暴露 API,允许过滤器获得连接到上游集群的 L3/L4 连接,或者连接到上游集群的抽象 HTTP 连接池的句柄(上游主机是否支持 HTTP/1.1 或 HTTP/2 是隐藏的)。过滤器阶段判断是否需要 L3/L4 连接或新的 HTTP 流,而集群管理器处理所有的复杂性,包括获知哪些主机可用并且健康、负载均衡、上游连接数据的线程本地存储(因为大多数 Envoy 代码以单线程编写)、上游连接类型(TCP/IP、UDS)、适用的上游协议(HTTP/1.1、HTTP/2)等。

集群管理器获知集群的方式可以是静态配置,也可以通过集群发现服务(CDS)API 动态获取。动态集群获取允许将更多配置存储在中央配置服务器中,这样就可以减少重启 Envoy 和重新分配配置的次数。

集群热身

当集群在服务器启动或者通过 CDS 进行初始化时,它们会“热身”。这意味着集群在下列操作发生之前不可用。

  • 初始服务发现加载 (例如,DNS 解析、EDS 更新等等)。
  • 初始主动健康检查通过,如果配置了主动健康检查。Envoy 将发送健康检查请求到每个被发现的主机上,以此来判断它的初始健康状态。

以上几项能够确保 Envoy 在开始将集群用于流量服务之前具有准确的集群视图。

在讨论集群热身时,集群 “变为可用” 意味着:

  • 对于新加入的集群,在集群热身之前对于 Envoy 的其余部分来说是不可见的。即引用集群的 HTTP 路由将导致 404 或 503(取决于配置)。
  • 对于更新后的集群,旧集群将继续存在并服务流量。当新集群被加热后,它将与旧集群进行原子交换,从而不会发生流量中断。