Kubernetes 上的 Node.js + gRPC 应用程序的随机超时

问题描述 投票:0回答:1

我们遇到了一个奇怪的网络问题。

我们有一个用 Node.js 编写的 Hyperledger Fabric 客户端应用程序,在 Kubernetes 中运行,它与外部 Hyperledger Fabric 网络进行通信。

我们在此通信中随机遇到超时错误。当 pod 重新启动时,一段时间内一切正常,然后开始出现超时错误,有时会自行随机修复,然后再次变坏。

这是 Azure AKS,我们使用 Rancher 在 AWS 中设置了一个快速 Kubernetes 集群,并在那里部署了应用程序,那里也发生了相同的超时错误。

我们整夜在同一个容器中运行脚本,每分钟都会使用 cURL 和一个小型 Node.js 脚本访问外部 Hyperledger 端点,但我们甚至没有收到任何错误。

我们在另一个虚拟机中将应用程序作为普通 Docker 容器运行,并且没有出现任何问题。

我们检查了容器内的网络流量,当出现此问题时,我们可以使用 netstat 看到已建立连接,但 tcpdump 显示没有流量,甚至没有尝试发送任何包。

检查 Hyperledger Fabric SDK 代码,它在幕后使用 gRPC 协议缓冲区。

那么也许有什么线索吗?

node.js kubernetes hyperledger-fabric grpc
1个回答
1
投票

这不是 Kubernetes 的问题,而是连接断开的问题。

gRPC 保持连接打开,在一段时间不活动后,中间组件会断开连接。在 Azure AKS 情况下,这是负载均衡器,因为每个出站连接都会经过负载均衡器。有一个不可配置的 4 分钟空闲超时时间,在此之后负载均衡器会断开连接。

解决方案是配置 gRPC 以发送保持活动消息。

容器中的脚本运行没有问题,因为它们每次运行时都会打开一个新连接。

作为普通 Docker 容器运行的应用程序没有这个问题,因为我们每分钟都会访问端点,因此永远不会达到空闲超时阈值。当我们每 10 分钟到达一次端点时,超时问题也从那里开始。

© www.soinside.com 2019 - 2024. All rights reserved.