监听器发现服务(LDS)

监听器发现服务是一个可选 API,Envoy 调用它来动态获取监听器。Envoy 将协调 API 响应,并根据需要来增加、修改或者删除已知监听器。

监听器的更新规则如下:

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

  • 当新增一个监听器时,在它接受流量以前需要先“预热”。比如,如果监听器参考了 RDS 配置,在监听器变成“激活”状态以前,配置需要被获取并解析。

  • 监听器一旦被创建,就不会发生变化。因此,当更新监听器时,会创建一个新的监听器(使用相同的监听套接字)。新 创建的监听器会经过同样的上述预热流程。

  • 当监听器在更新或删除时,老监听器会被放置在“排空”状态,这和整个服务器在重启时被排空的场景是非常像的。 在监听器被删除且剩余连接被关闭之前,属于监听器的连接将会在特定时间段内被优雅的关闭(如果可能)。 排空时间可以通过选项 --drain-time-s 来设定。 .. note:

    在 Envoy 配置内静态定义的任何监听器都是不能够通过 LDS API 来进行修改或删除的。
    

配置

统计

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