网络异常大概分为如下几类:
- 网络不可达,主要现象为ping不通,其可能原因为:
- 源端和目的端防火墙(iptables, selinux)限制
- 网络路由配置不正确
- 源端和目的端的系统负载过高,网络连接数满,网卡队列满
- 网络链路故障
- 端口不可达:主要现象为可以ping通,但telnet端口不通,其可能原因为:
- 源端和目的端防火墙限制
- 源端和目的端的系统负载过高,网络连接数满,网卡队列满,端口耗尽
- 目的端应用未正常监听导致(应用未启动,或监听为127.0.0.1等)
- DNS解析异常:主要现象为基础网络可以连通,访问域名报错无法解析,访问IP可以正常连通。其可能原因为
- Pod的DNS配置不正确
- DNS服务异常
- pod与DNS服务通讯异常
- 大数据包丢包:主要现象为基础网络和端口均可以连通,小数据包收发无异常,大数据包丢包。可能原因为:
- 可使用 ping -s 指定数据包大小进行测试
- 数据包的大小超过了 dockero,CNI 插件,或者宿主机网卡的 MTU 值。
- CNI异常:主要现象为Node可以通,但Pod无法访问集群地址,可能原因有:
- kube-proxy 服务异常,没有生成 iptables 策略或者 ipvs 规则导致无法访问
- CIDR耗尽,无法为Node注入 PodCIDR 导致 CNI 插件异常
- 其他 CNI 插件问题
那么整个Pod网络异常分类可以如下图所示:
总结一下,Pod最常见的网络故障有,网络不可达(ping不通);端口不可达(telnet不通);DNS解析异常(域名不通)与大数据包丢失(大包不通)。