监听器和监听器的排空

/listeners 端点列出了所有配置的监听器。这包括名称以及每个监听器的地址和监听的端口。

例如:

$ curl localhost:9901/listeners
http_8080::0.0.0.0:8080
http_hello_world_9090::0.0.0.0:9090

对于 JSON 输出,我们可以在 URL 上附加 ?format=json

$ curl localhost:9901/listeners?format=json
{
 "listener_statuses": [
  {
   "name": "http_8080",
   "local_address": {
    "socket_address": {
     "address": "0.0.0.0",
     "port_value": 8080
    }
   }
  },
  {
   "name": "http_hello_world_9090",
   "local_address": {
    "socket_address": {
     "address": "0.0.0.0",
     "port_value": 9090
    }
   }
  }
 ]
}

监听器排空

发生排空(draining)的一个典型场景是在热重启排空期间。它涉及到在 Envoy 进程关闭之前,通过指示监听器停止接受传入的请求来减少打开连接的数量。

默认情况下,如果我们关闭 Envoy,所有的连接都会立即关闭。要进行优雅的关闭(即不关闭现有的连接),我们可以使用 /drain_listeners 端点,并加入一个可选的 graceful 查询参数。

Envoy 根据通过 --drain-time-s--drain-strategy 指定的配置来排空连接。

如果没有提供,排空时间默认为 10 分钟(600 秒)。该值指定了 Envoy 将排空连接的时间——即在关闭它们之前等待多久。

排空策略参数决定了排空序列中的行为(例如,在热重启期间),连接是通过发送 “Connection:CLOSE”(HTTP/1.1)或 GOAWAY 帧(HTTP/2)。

有两种支持的策略:渐进(默认)和立即。当使用渐进策略时,随着排空时间的推移,排空的请求的百分比慢慢增加到 100%。即时策略将使所有的请求在排空序列开始后立即排空。

排空是按监听器进行的。然而,它必须在网络过滤器层面得到支持。目前支持优雅排空的过滤器是 Redis、Mongo 和 HTTP 连接管理器。

端点的另一个选项是使用 inboundonly 查询参数(例如,/drain_listeners?inboundonly)排空所有入站监听器的能力。这使用监听器上的 traffic_direction 字段来确定流量方向。

上一页
下一页