初始化
Envoy 在启动时如何初始化本身是一个复杂的过程。本节从高级别解释该过程的工作原理。所有以下操作都在任何监听器开始监听和接受新连接之前完成。
在启动期间,集群管理器 会经过多阶段初始化,首先初始化静态/DNS 集群,然后是预定义的 EDS 集群。然后,它会初始化 CDS (如果适用),等待 有时间限制的时间段 内的单个响应(或失败),并对 CDS 提供的集群进行相同的主/从初始化。
如果集群使用 主动健康检查,Envoy 也会执行一次主动健康检查。
集群管理器初始化完成后,RDS 和 LDS 会初始化(如果适用)。服务器等待 有时间限制的时间段 内的至少一个 LDS/RDS 请求响应(或失败)。之后,它开始接受连接。
如果 LDS 本身返回一个需要 RDS 响应的监听器,Envoy 会进一步等待 有时间限制的时间段 直到收到 RDS 响应(或失败)。请注意,此过程在通过 LDS 添加的每个未来的监听器上都会发生,被称为 监听器预热。
所有先前的步骤完成后,监听器开始接受新连接。此流程确保在热重启期间,新进程能够在开始排空旧进程之前完全准备好接受和处理新连接。
初始化的关键设计原则是,Envoy 始终保证在 initial_fetch_timeout 内完成初始化,并尽最大努力在该时间段内(受管理服务器可用性的影响)获取完整的 xDS 配置集。