如何排查容器Pod访问公网CLB报Connection refused的问题

容器与中间件容器服务技术服务知识库
问题描述

容器 pod 请求另外一组容器公网域名访问部分不通,报错connection refused,我们该如何排查此类问题? 图片

问题分析

ingress-nginx-controller 使用的 loadbalancer service 的 trafficPolicy 是 Local 模式的,在集群内的其他节点访问 clb public ip 会被 ipvs 劫持,从而导致访问失败,如果 client pod 在 ingress-nginx-controller 节点上会被转发,从而出现部分不通的情况。 排查步骤如下:

  1. ping telnet 等测试检查 端口和网络通信,
  2. 公网其他客户端请求访问正常
  3. 在pod异常时, 所在node tcpdump抓包分析 ,查看ping 和curl 对比分析数据包
tcpdump -v -i any host 异常域名

图片 如上图所示查看POD请求优先转到了 ingress-nginx-contoller,检查ingress所在节点 ipvs规则是否有转发 4.发现在不通的node上没有转发规则。

解决方案

需要考虑如下两点:

  1. ingress nginx 的 service 设置为 Local 模式的话,集群内节点(非 ingress 所在节点)访问 ingress 会被 ipvs 劫持导致访问不通。
  2. ingress nginx 的 service 设置为 Cluster 模式的话,ingress nginx 不能获取客户端 IP。

配置方面的建议如下:

  1. 评估如何不需要获取真实IP可以更改成Cluster模式。
  2. 集群内POD使用service 访问service-name.namespace-name. svc.cluster.local。
  3. 修改 coredns 请参考[1]。
参考文档

[1]https://github.com/coredns/coredns/tree/0348b019be984a5e21c40d00d37da2bbcc7d1b20/plugin/forward 如果您有其他问题,欢迎您联系火山引擎技术支持服务

0
0
0
0
关于作者

文章

0

获赞

0

收藏

0

所属团队号:
相关资源
KubeZoo: 轻量级 Kubernetes 多租户方案探索与实践
伴随云原生技术的发展,多个租户共享 Kubernetes 集群资源的业务需求应运而生,社区现有方案各有侧重,但是在海量小租户的场景下仍然存在改进空间。本次分享对现有多租户方案进行了总结和对比,然后提出一种基于协议转换的轻量级 Kubernetes 网关服务:KubeZoo,该方案能够显著降低多租户控制面带来的资源和运维成本,同时提供安全可靠的租户隔离性。
相关产品
评论
未登录
看完啦,登录分享一下感受吧~
暂无评论