我有两个公开的 API,比如说 xyz.com/apiA 和 xyz.com/apiB。
这两个 API 都在运行节点,并且是在 Kubernetes 集群的同一命名空间中作为单独的 Pod 运行的 Docker 化服务。
现在,apiA 在内部调用 apiB 作为其代码逻辑的一部分。 apiA 服务对 apiB 进行 POST 调用,并在其 body 参数中发送一个较大的有效负载。如果其正文中的有效负载超过 30kb,则此 POST 请求超时。
我们检查了服务器日志,没有看到 POST 请求。
错误提示显示连接超时到20.xx.xx.xx这是xyz.com的公网IP地址
我是 Kubernetes 新手,非常感谢您的帮助。
到目前为止已经尝试了这个,但没有帮助。
如果需要更多信息,请告诉我。
编辑:kubectl 客户端和服务器版本是 1.22.0
更新那些花时间了解问题并提出解决方案的好心人 - 该问题是由于路由错误造成的。内部 API(上例中的 apiB)不应该使用 xyz.com/apiB 的完整域名来调用,而是可以使用 pod 名称直接引用它们
http://pod_name.namespace.svc.local/apiB
.
这将确保内部调用通过 Kubernetes DNS 进行路由,而不必经过负载均衡器和 nginx,从而大大提高响应时间。
对 apiA 的每次调用都会通过填充数百个对 apiB 的调用并使服务器超载而产生多米诺骨牌效应,这导致它在几千个请求后才失败。
经验教训:使用集群的内部网络路由所有内部呼叫。
对于上述答案,kubenetes 如何解析多 pod 系统中的请求目的地。