集群管理器

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(取决于配置)。

  • 对于更新后的集群,旧集群将继续存在并提供流量。当新集群被预热后,它将与旧集群进行原子交换,这样就不会发生流量中断。