3

Envoy 在其关于逻辑 DNS 服务发现的文档(https://www.envoyproxy.io/docs/envoy/latest/intro/arch_overview/service_discovery#logical-dns )中说:

“仅在需要启动新连接时使用返回的第一个 IP 地址”

Envoy 如何决定何时需要启动新的上游连接?

它还说:

“连接永远不会耗尽”

如果上游主机无法访问,旧连接会怎样?健康检查是否适用于当前已建立连接的所有上游主机,或者它们是否仅监视具有当前“第一个 IP 地址”的主机?如果是后者,我是否可以假设 Envoy 只会在尝试写入并且对等 ACK 超时时删除失败的上游连接(并因此停止尝试向这些主机发送流量)?如果是这样,是否可以配置超时持续时间?

4

1 回答 1

3

在查看代码并进行一些测试之后,这就是我所看到的:

Envoy 如何决定何时需要启动新的上游连接?

  • 对于连接建立,在 TCP 代理(我使用的过滤器)的情况下,下游和上游连接之间存在 1:1 映射,因此在建立新的下游连接时会建立新的上游连接。

如果上游主机无法访问,旧连接会怎样?

  • 这取决于连接是否被优雅地终止(发送了 TCP RST 数据包)。如果是,则连接将被破坏(连同下游连接),如果不是,则在 TCP 连接超时之前什么都不会发生(我相信由于TCP_USER_TIMEOUTtcp_retries2重试 - 在我的本地上花费了 15 分钟以上机器)。

健康检查是否适用于当前已建立连接的所有上游主机,或者它们是否仅监视具有当前“第一个 IP 地址”的主机?

  • 它们仅适用于当前的“第一个 IP 地址”。

如果是后者,我是否可以假设 Envoy 只会在尝试写入并且对等 ACK 超时时删除失败的上游连接(并因此停止尝试向这些主机发送流量)?

  • 是的。通常,下游客户端超时将首先启动并破坏连接。

如果是这样,是否可以配置超时持续时间?

  • 我找不到TCP_USER_TIMEOUT在特使中设置套接字的选项。更改操作系统tcp_retries2可能会有所帮助,但是根据文档,总时间还受到 TCP 连接的平滑往返时间的影响,因此更改为tcp_retries2将无法定义绝对超时值。
于 2019-02-02T21:26:06.737 回答