简介
之前详细解析过Flannel的vxlan模式的网络通信原理,本篇将继续深入结合源码进行探索
前情提要
阅读本文需要知道flannel vxlan网络模式的网络请求路径,可以参考以前博主写的文章:K8S探索之Service+Flannel本机及跨主机网络访问原理详解
本篇的示例场景还是之前文章中的图,如下:
在主节点121.4.190.84,直接是可以ping通容器ip:10.244.1.8
➜ ~ ping 10.244.1.8
PING 10.244.1.8 (10.244.1.8) 56(84) bytes of data.
64 bytes from 10.244.1.8: icmp_seq=1 ttl=63 time=29.3 ms
64 bytes from 10.244.1.8: icmp_seq=2 ttl=63 time=29.3 ms
64 bytes from 10.244.1.8: icmp_seq=3 ttl=63 time=29.3 ms
本篇就以121.4.190.84 --> 10.244.1.8的网络请求路径开始探索下flannel的相关源码
源码探索
初始启动配置vxlan网卡
在主节点121.4.190.84,ping10.244.1.8时,由于后者不是公网ip,所以是不能直接ping的,在vxlan网络模式下,是将请求交给了vxlan网卡进行封包,封了一层后,包的请求目的地址换成了目标公网ip和vxlan的监听端口
在初次启动时,肯定得是vxlan网卡的添加了,手动配置的命令类似如下:
ip link add vxlan0 type vxlan \
id 42 \
dstport 4789 \
dev enp0s8 \
......
flannel初次启动的时候肯定是要配置自己的vxlan,在机器上我们可以看到:
➜ ~ ifconfig
flannel.1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1450
inet 10.244.0.0 netmask 255.255.255.255 broadcast 10.244.0.0
inet6 fe80::f4f2:b0ff:fefa:7573 prefixlen 64 scopeid 0x20<link>
ether f6:f2:b0:fa:75:73 txqueuelen 0 (Ethernet)
RX packets 205910 bytes 22397966 (21.3 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 296287 bytes 41537899 (39.6 MiB)
TX errors 0 dropped 8 overruns 0 carrier 0 collisions 0
➜ ~ ip -d link show dev flannel.1
39: flannel.1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc noqueue state UNKNOWN