可以看到,flannel的udp模式在一次跨主机的pod与pod通信的过程中,需要两次切换用户态与内核态,所以性能其实远低于vxlan模式,虽然vxlan模式用的也是udp协议,但因为是在内核态完成数据包的处理,所以性能要远高于udp模式。
为什么flannel还要无端实现一个udp模式?
据说是因为作者实现UDP模式时,linux的内核还不支持vxlan,但我去网上查了一下,linux内核从3.7开始支持vxlan,到3.12开始对vxlan已经完备:
https://kernelnewbies.org/Linux_3.7#Virtual_extensible_LAN_tunneling_protocol
https://kernelnewbies.org/Linux_3.12#Networking
而3.7是2012年底发布的,3.12是2013年2月发布的,flannel代码的初次提交是2014年,应该不是这个原因,而且从实现上来说,明显是vxlan更容易实现。
参考
flannel原理之udp模式解析
https://blog.csdn.net/Deepexi_Date/article/details/110936010
网友评论