![传出的 http 调用随机失败 - 没有到主机的路由](https://linux22.com/image/774661/%E4%BC%A0%E5%87%BA%E7%9A%84%20http%20%E8%B0%83%E7%94%A8%E9%9A%8F%E6%9C%BA%E5%A4%B1%E8%B4%A5%20-%20%E6%B2%A1%E6%9C%89%E5%88%B0%E4%B8%BB%E6%9C%BA%E7%9A%84%E8%B7%AF%E7%94%B1.png)
不久前,我们的 kubernetes 集群出现了一个奇怪的问题。我们有一个包含 windows 服务器(web 服务器、邮件服务器等)的网络和一个运行 Rancher v2.6.0 的 kubernetes 集群。
集群通过 http 请求和 smtp/imap 与 Windows 服务器通信,以发送和阅读电子邮件。一段时间以来,随机 http 请求失败并显示错误消息no route to host
。它似乎仅限于网络内的连接,并不影响对第三方 API 的请求。而且错误并不总是发生。许多请求都顺利通过,但有些请求失败。我实施了重试策略,几秒钟后再次尝试相同的请求,有时它在第一次重试时有效,有时在第二次重试时有效,有时根本不有效。
我尝试通过 Google 寻找解决方案,但却没有找到任何答案,尤其是因为只有一小部分请求受到影响。
维护网络和 Windows 服务器的系统管理员无法识别任何问题,甚至看不到请求。因此我猜测请求没有离开集群...如果这说得通的话。
不幸的是,kubernetes 集群曾经由一位同事维护,而他现在已经不在了。如果能给我一些建议,我将非常感激,可以从哪里开始寻找解决方案。
答案1
我会进入其中一个吊舱:
kubectl exec -it <podname> -n <namespace> -- bash
并运行:
for i in {0..100}; do curl http://<windows.server>;done
并检查是否存在任何错误,如果有 - 我将从节点本身运行相同的测试(ssh 到节点并运行 for 循环),最好是运行用于测试的 pod 的同一节点。
如果仍然看到错误或超时,我会通过 ssh 连接到集群外部的节点并运行相同的测试,以尝试确定问题是否仅来自 pod、集群节点或 Windows 服务器。
答案2
我遇到了类似的错误,这似乎与 DNS 查询失败有关。Coredns 正在将非 kubernetes 请求转发到 pfsense DNS,并且随机失败,导致没有路由到主机。检查 Coredns 日志。