Kubernetes cluster REST API error: 500 internal server error

Kubernetes cluster REST API error: 500 internal server error

我有一个使用 kubespray 部署的 k8s 集群。 使用的负载均衡器是 metalLB。 我在这个集群中部署了一个 helm chart,它在地址 10.0.8.26:50028

有一个 REST 服务

我正在向此服务发送请求:

http://10.0.8.26:50028/data/v3/authentication

http://10.0.8.26:50028/data/v3/actions

http://10.0.8.26:50028/data/v3/versions

但每次我调用端点时,它 return 的响应顺序为:

503 运输正在关闭

500 个内部服务器

500 个内部服务器

204 - 正确反应

当我调用每个端点时,相同的顺序是 returned。一旦 return 编辑了正确的响应,之后就没有错误了。但是尝试一个新的端点会 return 错误。

有人可以帮我吗?

此错误与集群中服务之间的连接有关。集群在 IPVS 模式下使用 kube-proxy。由于 IPVS 超时(在他的节点中),服务之间的连接在 900 秒后终止:

$ ipvsadm -l --timeout    
Timeout (tcp tcpfin udp): 900 120 300 

这意味着 tcp 连接已被另一个代理终止。 我的应用程序同时使用 grpc 协议进行某些服务之间的通信。 因此,在应用程序代码中将 grpc keepalive 和 pods 的 tcp keepalive 设置为较低值后,问题得到解决。

以下链接可能提供更多详细信息:

https://success.docker.com/article/ipvs-connection-timeout-issue

https://github.com/moby/moby/issues/31208

https://github.com/kubernetes/kubernetes/issues/80298