POD间网络不通的排查思路

POD间网络不通

VXLAN网络模式

canal网络插件
测试以下场景

  • 通过Rancher UI检查system项目下canal网络插件是否运行正常。
  • 在对应项目下以daemonset方式启动多个POD,分布到不同节点,POD内进行ping测试。
  • POD内直接ping对端宿主机的flannel.1网卡。
  • 在POD所在宿主机上ping对应POD ip。
  • 主机上udp 8472端口是否监听

macvlan网络插件

端口单vlan通过场景验证
找2台机器worker1和worker2,在2台机器中,分别给需要支持macvlan的网卡手动添加一个IP,假如网卡为eth0。 添加IP 在worker1中执行如下命令

1
ip address add 192.168.1.2/24 dev eth0

在worker2中执行如下命令

1
ip address add 192.168.1.3/24 dev eth0

检查IP是否添加成功 以worker1为例,添加前

1
2
3
4
5
6
7
8
9
10
11
12
13
ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9001 qdisc mq state UP group default qlen 1000
link/ether 0a:06:7c:64:b7:f6 brd ff:ff:ff:ff:ff:ff
inet 172.31.15.100/20 brd 172.31.15.255 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::806:7cff:fe64:b7f6/64 scope link
valid_lft forever preferred_lft forever

添加后

1
2
3
4
5
6
7
8
9
10
11
12
13
14
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9001 qdisc mq state UP group default qlen 1000
link/ether 0a:06:7c:64:b7:f6 brd ff:ff:ff:ff:ff:ff
inet 172.31.15.100/20 brd 172.31.15.255 scope global eth0
valid_lft forever preferred_lft forever
inet 192.168.1.2/24 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::806:7cff:fe64:b7f6/64 scope link
valid_lft forever preferred_lft forever

检查路由规则 给网卡添加IP时,会自动添加路由规则,可通过route -n查看。

添加前

1
2
3
4
5
route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 172.31.0.1 0.0.0.0 UG 0 0 0 eth0
172.31.0.0 0.0.0.0 255.255.240.0 U 0 0 0 eth0

添加后

1
2
3
4
5
6
route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 172.31.0.1 0.0.0.0 UG 0 0 0 eth0
172.31.0.0 0.0.0.0 255.255.240.0 U 0 0 0 eth0
192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0

跨主机互ping验证 只要跨主机在网卡上添加ip且互相可以ping通,说明iaas层就没问题,此时worker1和worker2上的eth0网卡详情如下

worker1 eth0

1
2
3
4
5
6
7
8
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9001 qdisc mq state UP group default qlen 1000
link/ether 0a:06:7c:64:b7:f6 brd ff:ff:ff:ff:ff:ff
inet 172.31.15.100/20 brd 172.31.15.255 scope global eth0
valid_lft forever preferred_lft forever
inet 192.168.1.2/24 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::806:7cff:fe64:b7f6/64 scope link
valid_lft forever preferred_lft forever

worker2 eth0

1
2
3
4
5
6
7
8
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9001 qdisc mq state UP group default qlen 1000
link/ether 0a:16:e4:de:a5:68 brd ff:ff:ff:ff:ff:ff
inet 172.31.1.41/20 brd 172.31.15.255 scope global eth0
valid_lft forever preferred_lft forever
inet 192.168.1.3/24 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::816:e4ff:fede:a568/64 scope link
valid_lft forever preferred_lft forever

从worker1上ping worker2机器使用macvlan ip进行互ping

端口多vlan通过场景验证

验证方式与单端口一致,唯一区别在于多vlan情况下,交换机端口配置的是trunk模式,允许多个vlan通过,也就是交换机本身不会对端口打vlan-tag了,需要通过软件层面给对应的网卡的数据包打上vlan-tag,否则不能通信,在linux操作系统中可以通过建立子vlan口的方式将IP地址配置在子vlan口上,对应的数据包经过子vlan口后会自动打上vlan-tag 实现使用以下方式:

在需要测试的两台worker节点上按下述方法创建好子vlan口,然后在子vlan口上配置ip,互相ping测试。 测试跨子网通信,则需要提前配置好路由,手动添加静态路由由即可。

安装vconfig命令

1
yum install -y vlan

给eth0设置vlan 404

1
2
vconfig add eth0 404
//添加eth0.404子接口

1
ip address add 192.168.1.101 dev eth0.404 //设置IP

测试路由

1
ip route add 192.168.1.0/24 dev eth0.404

//设置路由,192.168.1.0网段的从eth0.404发出

1
ifconfig eth0.404 up

删除方式

1
vconfig rem eth0.404

实际生产环境中建议配置使用多网卡做Bond方式,保证网卡的高可用,一般推荐模式为Bond1模式即为主备模式,需要提前验证Bond配置是否生效。

验证

查看bond状态

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
cat /proc/net/bonding/bond0
Ethernet Channel Bonding Driver: v3.7.1 (April 27, 2011)
Bonding Mode: fault-tolerance (active-backup)
Primary Slave: None
Currently Active Slave: eth1 #当前主接口
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 0
Down Delay (ms): 0
Slave Interface: eth1
MII Status: up
Speed: Unknown //openstack虚拟化网卡默认不显示速率
Duplex: Unknown //openstack虚拟化网卡默认不显示双工
Link Failure Count: 0
Permanent HW addr: fa:16:3e:47:c7:a0
Slave queue ID: 0

测试方法 Down掉当前主接口,进行测试,看是否会进行网卡切换,网络是否会中断。

模拟容器内macvlan网络测试

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# 创建namespace
ip netns add ns1
ip netns add ns2
# 基于物理网卡创建macvlan网卡
ip link add mv1 link eno1 type macvlan mode bridge
ip link add mv2 link eno1 type macvlan mode bridge
# 将网卡挂载到对应namespace中(若trunk模式,需要配置子vlan口,将子vlan口加入)
ip link set mv1 netns ns1
ip link set mv2 netns ns2
# 启动网卡
ip netns exec ns1 ip link set dev mv1 up
ip netns exec ns2 ip link set dev mv2 up
# 设置IP地址
ip netns exec ns1 ifconfig mv1 192.168.1.50/24 up
ip netns exec ns2 ifconfig mv2 192.168.1.60/24 up
# 查看端口详细情况
ip netns exec ns1 ip a
ip netns exec ns2 ip a
# ping测试
ip netns exec ns1 ping -c 4 192.168.1.60
# 清除
ip netns del ns1
ip netns del ns2