从一个 pod 到同一 Kubernetes 集群中的另一个 pod 的内部 API 调用超时
Internal API call from one pod to another pod in same Kubernetes cluster times out
我有两个 API 是 public 只暴露的,比方说 xyz.com/apiA 和 xyz.com/apiB.
这两个 API 都是 运行 节点并且是 dockerized 服务 运行 作为个体 pods 在 Kubernetes 集群的相同命名空间中。
现在,apiA 在内部调用 apiB 作为其代码逻辑的一部分。 apiA 服务对 apiB 进行 POST 调用,并在其 body 参数中发送一个稍大的有效负载。如果其正文中的有效负载超过 30kb,此 POST 请求将超时。
我们检查了服务器日志,没有看到 POST 请求。
错误提示显示connection timeout to 20.xx.xx.xx which is the public ip address of xyz.com
我是 Kubernetes 的新手,非常感谢您的帮助。
到目前为止已经尝试了 this,但没有用。
如果需要更多信息,请告诉我。
编辑:kubectl 客户端和服务器版本为 1.22.0
更新那些花时间了解问题并提出解决方案的好心人 - 问题是由于路由错误造成的。内部API(上例中的apiB)不应使用完整域名xyz.com/apiB调用,而是可以使用pod名称直接引用
http://pod_name.namespace.svc.local/apiB
.
这将确保内部调用通过 Kubernetes DNS 路由,而不必通过负载均衡器和 nginx,从而大大缩短响应时间。
对 apiA 的每次调用都通过填充对 apiB 的数百次调用并使服务器过载来产生多米诺骨牌效应,这导致它仅在几千个请求后失败。
经验教训:使用集群的内部网络路由所有内部调用。
我有两个 API 是 public 只暴露的,比方说 xyz.com/apiA 和 xyz.com/apiB.
这两个 API 都是 运行 节点并且是 dockerized 服务 运行 作为个体 pods 在 Kubernetes 集群的相同命名空间中。
现在,apiA 在内部调用 apiB 作为其代码逻辑的一部分。 apiA 服务对 apiB 进行 POST 调用,并在其 body 参数中发送一个稍大的有效负载。如果其正文中的有效负载超过 30kb,此 POST 请求将超时。
我们检查了服务器日志,没有看到 POST 请求。
错误提示显示connection timeout to 20.xx.xx.xx which is the public ip address of xyz.com
我是 Kubernetes 的新手,非常感谢您的帮助。
到目前为止已经尝试了 this,但没有用。
如果需要更多信息,请告诉我。
编辑:kubectl 客户端和服务器版本为 1.22.0
更新那些花时间了解问题并提出解决方案的好心人 - 问题是由于路由错误造成的。内部API(上例中的apiB)不应使用完整域名xyz.com/apiB调用,而是可以使用pod名称直接引用
http://pod_name.namespace.svc.local/apiB
.
这将确保内部调用通过 Kubernetes DNS 路由,而不必通过负载均衡器和 nginx,从而大大缩短响应时间。
对 apiA 的每次调用都通过填充对 apiB 的数百次调用并使服务器过载来产生多米诺骨牌效应,这导致它仅在几千个请求后失败。
经验教训:使用集群的内部网络路由所有内部调用。