ingress nginx遇到502错误,connect() failed (113 Host is unreachable) while connecting to upstream

1.背景

  之前碰到过ingress nginx遇到502错误,(113 No route to host) while connecting to upstream的问题,于是按照以上方式将ingress升级至1.30。

  但是今天发现,发布容器后,老的报错没有碰上,这里出现一个相同的代码,但是不一样的报错提示。

  出现的场景是,因为业务需要测试更改时间,时间更改后在使用ntp同步回去,pod就无法访问,出现connect() failed (113 Host is unreachable) while connecting to upstream报错。

  升级至1.30之后。无法访问的情况还存在,只是nignx的报错日志内容有点小改变,但是网页的报错还是相同。

 

2.原因

  以下描述一下整个排错的过程。

  1.这里首先查看最后端pod的IP为以下:172.16.0.98

  然后使用浏览器访问网址,结果为502

  

  2.查看ingress日志的,发现ingress-nginx upstreamhost的IP为172.16.0.90,此IP为更新之前的pod IP。

  3.查看ingress-nginx的连接,发现也是向老的pod发起的请求。该pod都已经不存在了。

  到这里,问题定位到了,还是之前的bug,在更改pod时间后,然后将时间还原,然后发布版本后,老的pod消失,新的pod出现,ingress还是会将请求转发至老的pod,导致出现以上错误,网页返回502.

 

4.解决方式(临时)

  上一篇案例中与腾讯云联调怀疑是ingress保存了已经不存在的pod连接,将请求转发到已经删除掉的pod上去,所以这次直接删除ingress然后自动拉起一个问题临时得到解决。

  至于最终解决办法,还是没有改变。在删除ingress控制器之后,ingress-nginx控制器的日志正常。

  

后记:想过尝试重置pod的网卡或者清空TCP缓存,但是由于是pod,无法做到这些操作,至于最终解决方案,目前正在调研中。

posted @ 2021-11-10 23:57  小家电维修  阅读(3731)  评论(0编辑  收藏  举报