1 pod 常见网络异常分类
1.1 网络不可达
主要现象为 ping 不通,其可能原因为:
- 源端和目的端防火墙(iptables, selinux)限制
- 网络路由配置不正确
- 源端和目的端的系统负载过高,网络连接数满,网卡队列满
- 网络链路故障
1.2 端口不可达
主要现象为可以 ping 通,但 telnet 端口不通,其可能原因为:
- 源端和目的端防火墙限制
- 源端和目的端的系统负载过高,网络连接数满,网卡队列满,端口耗尽
- 目的端应用未正常监听导致(应用未启动,或监听为 127.0.0.1 等)
1.3 DNS 解析异常
主要现象为基础网络可以连通,访问域名报错无法解析,访问 IP 可以正常连通。其可能原因为
- Pod 的 DNS 配置不正确
- DNS 服务异常
- pod 与 DNS 服务通讯异常
1.4 大数据包丢包
主要现象为基础网络和端口均可以连通,小数据包收发无异常,大数据包丢包。可能原因为:
- 可使用 ping -s 指定数据包大小进行测试
- 数据包的大小超过了 docker、CNI 插件、或者宿主机网卡的 MTU 值。
1.5 CNI 异常
主要现象为 Node 可以通,但 Pod 无法访问集群地址,可能原因有:
- kube-proxy 服务异常,没有生成 iptables 策略或者 ipvs 规则导致无法访问
- CIDR 耗尽,无法为 Node 注入 PodCIDR 导致 CNI 插件异常
- 其他 CNI 插件问题
2 网络排查工具
2.1 tcpdump
2.2 wireshark 追踪流
2.3 nsenter
2.4 paping
2.5 mtr
3 Pod 网络异常排查思路及流程模型
4 CNI 网络异常排查步骤
5 实践
5.1 现象
- 所有节点之间的 pod 通信正常
- 任意节点和 Pod curl registry 的 Pod 的 IP:5000 均可以连通
- 新扩容节点 10.153.204.15 curl registry 服务的 Cluster lP 10.233.0.100:5000
不通,其他节点 curl 均可以连通
5.2 分析思路
- 根据现象 1 可以初步判断 CNI 插件无异常
- 根据现象 2 可以判断 registry 的 Pod 无异常
- 根据现象 3 可以判断 registry 的 service 异常的可能性不大,可能是新扩容节点访问 registry 的 service存在异常
5.3 怀疑方向
- 问题节点的 kube-proxy 存在异常
- 问题节点的 iptables 规则存在异常
- 问题节点到 service 的网络层面存在异常
5.4 排查过程
- 排查问题节点的 kube-proxy
- 执行 kubectl get pod -owide -nkube-system l grep kube-proxy 查看
kube-proxy Pod 的状态,问题节点上的 kube-proxy Pod 为 running 状态 - 执行 kubecti logs -nkube-system 查看问题节点
kube-proxy 的 Pod 日志,没有异常报错 - 在问题节点操作系统上执行 iptables -S -t nat 查看 iptables 规则
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/79919.html