监听器发现服务 (LDS)

监听器发现服务 (LDS) 是一种可选的 API,Envoy 会调用它来动态获取监听器。Envoy 会协调 API 响应,并根据需要添加、修改或删除已知的监听器。

监听器更新的语义如下

  • 每个监听器都必须有一个唯一的 name。如果未提供名称,Envoy 将创建一个 UUID。要动态更新的监听器应该有一个由管理服务器提供的唯一名称。

  • 当添加监听器时,它将在接收流量之前进行“预热”。例如,如果监听器引用了 RDS 配置,则在将监听器移动到“活动”状态之前,将解析并获取该配置。

  • 监听器在创建后实际上是恒定的。因此,当更新监听器时,将创建一个全新的监听器(如果监听器的地址未更改,则新监听器使用相同的监听套接字)。此监听器将经历与新添加的监听器相同的预热过程。

  • 当移除监听器时,旧监听器将进入“排空”状态,就像整个服务器要排空以进行重启一样。监听器拥有的连接将被优雅地关闭(如果可能),一段时间后监听器将被移除,任何剩余的连接也将被关闭。排空时间通过 --drain-time-s 选项设置。

  • 当更新 TCP 监听器时,如果新监听器包含旧监听器中的一部分过滤器链,则这些重叠过滤器链拥有的连接保持打开状态。只有被移除的过滤器链拥有的连接将在遵循上述模式后被排空。请注意,如果任何全局监听器属性发生更改,则整个监听器(以及所有过滤器链)将类似于上述移除一样被排空。有关受影响过滤器链的推理规则的详细信息,请参阅 仅过滤器链更新

    注意

    在 Envoy 配置中静态定义的任何监听器都不能通过 LDS API 修改或移除。

配置

统计信息

LDS 具有一个以 listener_manager.lds. 为根的 统计信息 树。