1.背景

  首先谈一下背景环境,出现文章标题的出错是公司的tke(腾讯云k8s,当然问题和腾讯云k8s集群没有关系),首先分为dev集群环境和生产集群环境,出现问题是在很早期创建的dev环境。

  问题报错以下:

ingress nginx遇到502错误,(113 No route to host) while connecting to upstream

  注意同时,后端upstream-host IP并不是svc的IP或者pod的IP。是一个不存在的IP。这是第二个问题。

  可以看到请求已经到了ingress,但是就是无法访问后端服务。

  检查了k8s的yaml配置,以及在测试pod中访问目标服务pod也可以访问,删除重新创建也是no route to host。

 

2.问题解决

  一筹莫展之际,想到有2套环境,于是再次发布至另一套环境,果然,另一套prod环境是正常的。于是想到两个环境只有ingress的版本不同。于是去查询。 Dev的环境为0.23,而prod环境是0.30。

  同时拉上腾讯的支持人员去分析,后面认为是0.23版本的bug,可能是长连接等问题,导致,即使pod不在了,连接依旧保持,并将请求转发至老的POD ip上(即使POD已经不存在),由于ingress镜像没有看tcp连接的命令,于是果断删除了ingress,然后自动拉起,问题果然解决,并且,ingress日志中的upstream-host ip也正常了。

  ingress nginx遇到502错误,(113 No route to host) while connecting to upstream

ingress nginx遇到502错误,(113 No route to host) while connecting to upstream

ingress nginx遇到502错误,(113 No route to host) while connecting to upstream

ingress nginx遇到502错误,(113 No route to host) while connecting to upstream

  该问题运行2个月后出现,出现概率较小,但是为了避免出现问题,还是推荐使用0.30以上版本的ingerss。

 

3.参考

  https://github.com/kubernetes/ingress-nginx/issues/5715

相关文章: