白日放歌须纵酒,青春作伴好还乡。这篇文章主要讲述Flannel Vxlan 跨节点通信相关的知识,希望能为你提供帮助。
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 的地址
通过 node1 路由表和 ip 地址,我们找到了网关的地址,就是 cni0 网口的地址
pod1-flannel.cap
[root@node1 ~]# tcpdump -pne -i flannel.1 -w pod1-flannel.cap
通过 node1 的路由表和 FDB表,我们知道了 flannel 封装的几个要素
node1.cap
[root@node1 ~]# tcpdump -pne -i ens33 -w node1.cap
在node 对应的物理网卡上,我们就可以看到 flannel.1 封装好的 Vxlan 报文
node2.cap
[root@node2 ~]# tcpdump -pne -i flannel.1 -w pod2-flannel.cap
解封装过程就是封装过程的逆过程,所以暂就不过多解释,结合 node1 的封装过程就可以看懂
pod2-flannel.cap
[root@node2 ~]# tcpdump -pne -i flannel.1 -w pod2-flannel.cap
pod2.cap
[root@master ~]# kubectl exec -it cni-test-777bbd57c8-5zhjd -- tcpdump -pne -i eth0 -w pod2.cap
总结
至此,我们验证了 Flannel vxlan 中跨节点的通信过程,对于数据的流向,和calico vxlan 中基本一致,所以不难看出,vxlan 的跨节点通信的本质,其实就是 flannel.1 帮我们封装了vxlan 格式的报文,然后模拟出来一个 大二层,使跨节点也可以用二层的方式正常的通信。
推荐阅读
- 双认证!博睿数据荣获优炫软件产品兼容互认证书和海量数据兼容互认证
- bash: cannot create temp file for here-document: Read-only file system
- 信息安全深透测试与工房操作系统本地提权
- h264,265实时视频流解码及人脸追踪的实现
- Android技术分享| 利用Kotlin协程,多任务并行,测试RTM SDK性能
- electron学习笔记在electron中,npm run dev内存溢出的解决方法
- JVS开源框架系列(??事件集成·自动化帮助?「含软开企服的开源地址」)
- 性能测试人员应该具备的技术知识
- C/C++ 单元自动化测试解决方案实践