1. flannel 网络流量分析
1.1. 选择目标容器
# kubectl get pod
NAME READY STATUS RESTARTS AGE
busybox-7868487dfd-7rndh 1/1 Running 0 41m
busybox-7868487dfd-gjkq6 1/1 Running 0 41m
busybox-7868487dfd-h5x52 1/1 Running 0 41m
这里以 busybox-7868487dfd-7rndh
进行分析,登录到调度的 node 节点
2. 查看对应的
[root@wenyu-rancher-server ~]# docker ps |grep my-dep-759ddc4c75-g6485
0d3c8f05ffa3 centos "/bin/sh -c 'sleep 3…" 10 minutes ago Up 10 minutes k8s_centos_my-dep-759ddc4c75-g6485_default_a57ae383-82e5-4f5e-9ce4-d9f366afdf24_0
7a59bdb90c93 registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.1 "/pause" 10 minutes ago Up 10 minutes k8s_POD_my-dep-759ddc4c75-g6485_default_a57ae383-82e5-4f5e-9ce4-d9f366afdf24_0
找到 POD 对应的容器 ID 0d3c8f05ffa3
登录
[root@wenyu-rancher-server ~]# docker exec -it 0d3c8f05ffa3 bash
[root@my-dep-759ddc4c75-g6485 /]# cat /sys/class/net/eth0/iflink
28
或者
root@my-dep-759ddc4c75-g6485:/# ethtool -S eth0
NIC statistics:
peer_ifindex: 28
查看 net link 为 28
2.1. 查找虚拟网卡
/sys/class/net/ 和 /sys/class/net/ 是一样的连接文件
[root@wenyu-rancher-server ~]# ll /sys/class/net/
总用量 0
lrwxrwxrwx 1 root root 0 4月 22 20:54 cni0 -> ../../devices/virtual/net/cni0
lrwxrwxrwx 1 root root 0 4月 22 20:54 docker0 -> ../../devices/virtual/net/docker0
lrwxrwxrwx 1 root root 0 4月 22 20:54 eth0 -> ../../devices/pci0000:00/0000:00:03.0/virtio0/net/eth0
lrwxrwxrwx 1 root root 0 4月 22 20:54 flannel.1 -> ../../devices/virtual/net/flannel.1
lrwxrwxrwx 1 root root 0 4月 22 20:54 lo -> ../../devices/virtual/net/lo
lrwxrwxrwx 1 root root 0 4月 22 20:54 veth05a33997 -> ../../devices/virtual/net/veth05a33997
lrwxrwxrwx 1 root root 0 4月 22 21:34 veth5c8a14d5 -> ../../devices/virtual/net/veth5c8a14d5
lrwxrwxrwx 1 root root 0 4月 22 21:34 veth6925d34b -> ../../devices/virtual/net/veth6925d34b
lrwxrwxrwx 1 root root 0 4月 22 20:54 veth9ef9e7a -> ../../devices/virtual/net/veth9ef9e7a
lrwxrwxrwx 1 root root 0 4月 22 21:34 vethafab477d -> ../../devices/virtual/net/vethafab477d
变量所有虚拟网卡,查找 ifindex 为 28
的文件
2.2. 查找宿主机对应的网卡
方法1
ip addr show
28: veth6925d34b@if3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc noqueue master cni0 state UP group default
link/ether b6:24:0c:11:43:d1 brd ff:ff:ff:ff:ff:ff link-netnsid 4
inet6 fe80::b424:cff:fe11:43d1/64 scope link
valid_lft forever preferred_lft forever
在直接通过 ip a show
查找 ID 为 28
的网卡
方法2
过滤所有网卡网卡,查找有 28
的文件
[root@wenyu-rancher-server ~]# find /sys/devices/virtual/net -type f -name "ifindex" |xargs grep "28"
/sys/devices/virtual/net/veth6925d34b/ifindex:28
这里可以看到路径中 veth6925d34b
为绑定在网桥上的虚拟网卡的的名称
[root@wenyu-rancher-server ~]# ip a |grep veth6925d34b
28: veth6925d34b@if3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc noqueue master cni0 state UP group default
在宿主机上可以看到该 虚拟 vethXXX 最下面的 ID 同样为 28
2.3. 确认vethXX绑定的虚拟网桥
[root@wenyu-rancher-server ~]# brctl show
bridge name bridge id STP enabled interfaces
cni0 8000.6e4cd2014939 no veth05a33997
veth5c8a14d5
veth6925d34b
vethafab477d
docker0 8000.0242dee8482b no veth9ef9e7a
由 brctl show
可以看到该机器上有2个网桥,而要查找的 vethXX 链接到 cni0
上
提示:
brctl 命令需要安装
yum install -y bridge-utils