#夏日挑战赛# Flannel Vxlan 跨节点通信-鸿蒙开发者社区-51CTO.COM

#夏日挑战赛# Flannel Vxlan 跨节点通信 原创 精华

whale_life
发布于 2022-7-4 17:02
浏览
5收藏

「本文正在参加星光计划3.0–夏日挑战赛」

Flannel 跨节点通信

和 calico vxlan 一样,跨节点通信,利用的是主机上的路由和 flannel.1 来实现的。
通过主机的路由表查看出接口的网关和对应的网卡,而网关的 MAC 地址是通过 节点维护的 fdb 表 获得的。

环境信息

还是在同节点的通信基础上进行试验
pod 1 10.244.1.2 node1
pod2 10.244.2.6 node2

[root@master ~]# kubectl get pod -o wide 
NAME                        READY   STATUS    RESTARTS   AGE    IP           NODE              NOMINATED NODE   READINESS GATES
cni-test-777bbd57c8-5zhjd   1/1     Running   0          109m   10.244.2.6   node2.whale.com   <none>           <none>
cni-test-777bbd57c8-t6xhd   1/1     Running   0          109m   10.244.1.2   node1.whale.com   <none>           <none>
cni-test-777bbd57c8-whwcm   1/1     Running   0          109m   10.244.1.3   node1.whale.com   <none>           <none>

跨节点通信数据流向图

#夏日挑战赛# Flannel Vxlan 跨节点通信-鸿蒙开发者社区

抓包演示跨节点数据流向

pod eth0 和它对应的 veth pair 网卡是点对点直通,两端报文是一样的,所以我们只需要抓一端就可以。

kubectl exec -it cni-test-777bbd57c8-t6xhd  -- ping -c 1 10.244.2.6

pod1.cap

[root@master ~]# kubectl exec -it cni-test-777bbd57c8-t6xhd -- tcpdump -pne -i eth0 -w pod1.cap

通过 pod1 路由表,我们可以发现, 10.244.2.0/24 网段的走 默认路由,需要找网关 10.244.1.1 的地址
#夏日挑战赛# Flannel Vxlan 跨节点通信-鸿蒙开发者社区

通过 node1 路由表和 ip 地址,我们找到了网关的地址,就是 cni0 网口的地址
#夏日挑战赛# Flannel Vxlan 跨节点通信-鸿蒙开发者社区

#夏日挑战赛# Flannel Vxlan 跨节点通信-鸿蒙开发者社区

pod1-flannel.cap

[root@node1 ~]# tcpdump -pne -i flannel.1 -w pod1-flannel.cap

通过 node1 的路由表和 FDB表,我们知道了 flannel 封装的几个要素
#夏日挑战赛# Flannel Vxlan 跨节点通信-鸿蒙开发者社区
#夏日挑战赛# Flannel Vxlan 跨节点通信-鸿蒙开发者社区

node1.cap

[root@node1 ~]# tcpdump -pne -i ens33 -w node1.cap

在node 对应的物理网卡上,我们就可以看到 flannel.1 封装好的 Vxlan 报文
#夏日挑战赛# Flannel Vxlan 跨节点通信-鸿蒙开发者社区

node2.cap

[root@node2 ~]# tcpdump -pne -i flannel.1 -w pod2-flannel.cap

解封装过程就是封装过程的逆过程,所以暂就不过多解释,结合 node1 的封装过程就可以看懂
#夏日挑战赛# Flannel Vxlan 跨节点通信-鸿蒙开发者社区

pod2-flannel.cap

[root@node2 ~]# tcpdump -pne -i flannel.1 -w pod2-flannel.cap

#夏日挑战赛# Flannel Vxlan 跨节点通信-鸿蒙开发者社区

pod2.cap

[root@master ~]# kubectl exec -it cni-test-777bbd57c8-5zhjd -- tcpdump -pne -i eth0 -w pod2.cap

#夏日挑战赛# Flannel Vxlan 跨节点通信-鸿蒙开发者社区

总结

至此,我们验证了 Flannel vxlan 中跨节点的通信过程,对于数据的流向,和calico vxlan 中基本一致,所以不难看出,vxlan 的跨节点通信的本质,其实就是 flannel.1 帮我们封装了vxlan 格式的报文,然后模拟出来一个 大二层,使跨节点也可以用二层的方式正常的通信。

#夏日挑战赛# Flannel Vxlan 跨节点通信-鸿蒙开发者社区

©著作权归作者所有,如需转载,请注明出处,否则将追究法律责任
分类
标签
7
收藏 5
回复
举报
4条回复
按时间正序
/
按时间倒序
archangle
archangle

收藏!

回复
2022-8-1 14:04:24
lazihuman
lazihuman

学习到了

回复
2022-8-1 14:05:29
whale_life
whale_life 回复了 archangle
收藏!

感谢认可

回复
2022-8-3 19:11:42
whale_life
whale_life 回复了 lazihuman
学习到了

共同努力

回复
2022-8-3 19:11:54
回复
    相关推荐