【发布时间】:2021-06-23 09:11:37
【问题描述】:
我正在使用 AWS Application Load Balancer (ALB) 来公开 ASP.NET Core gRPC 服务。这些服务在 Fargate 容器中运行并公开不安全的 HTTP 端口。 ALB 终止外部 TLS 连接并根据路由将未加密的流量转发到目标组。 gRPC 应用程序有多个客户端流式传输端点,客户端可以暂停流式传输几分钟。我知道有 HTTP2 PING 帧,可以在这种情况下使用,以在一段时间内保持没有数据传输的连接。
gRPC 服务器配置为每 20 秒发送一次 HTTP2 ping 以保持连接处于活动状态。我测试了这种方法并且它有效,ping 帧来自服务器并被客户端确认。 但是当涉及到 ALB 时,这种方法就失败了。在传输暂停期间,我没有看到来自负载均衡器后面的服务器的任何包(我使用 Wireshark)。然后在超时 1 分钟后,ALB 重置连接。
我也尝试使用客户端发送的 HTTP2 ping。但是连接也会在 1 分钟内重置,我没有证据表明这些 ping 包是否真的到达了 ALB 后面的服务器。 我假设 AWS ALB 不允许此类数据包通过它,但我没有找到任何证明这一点的文档。
【问题讨论】:
-
ALB 支持 grpc aws.amazon.com/blogs/aws/…,奇怪的是他们不支持 PING。
标签: asp.net-core grpc http2 keep-alive aws-application-load-balancer