频道栏目
首页 > 网络 > 其他 > 正文

无需申请自动送

2019-08-07 20:45:26           
收藏   我要投稿

相关概念:

无需申请自动送udp工作模式用到的

TUN设备:是一种工作在三层(网络层)的虚拟网络设备;主要作用是,在内核和应用程序间传递IP包;

flannel0:是由flanneld创建的TUN设备;

无需申请自动送vxlan工作模式用到的

VTEP设备:它是在二层进行封装和解封装操作

flannel.1:是由flanneld创建的VTEP设备,.1(VNI)的作用是让VTEP设备识别数据帧是不是由自己处理的标识

无需申请自动送flannel进程

subnet:子网(flannel会为每个节点分配一个子网,保存在etcd中)

flanneld:负责子网的路由信息,在每台node上生成路由信息

flannel的工作模式:overlay(叠加)网络

1.UDP(最早出现的工作模式,效率最低的一种)

2.VxLAN(Virtual Extensible LAN,虚拟可扩展局域网,Linux内核本身支持的网络虚拟化技术)

3.host-gw(效率最高,不能跨网段)

flannel工作示例:以下2个container需要跨主机通信

    Node1的容器container-1的IP:100.96.1.2

    Node2的容器container-2的IP:100.96.2.3

    UDP工作模式:需要在2018注册送菜金白菜态和内核态之间切换

    查看node1上的路由;

    无需申请自动送?在?Node?1?上
    $?ip?route
    default?via?10.168.0.1?dev?eth0
    100.96.0.0/16?dev?flannel0??proto?kernel??scope?link??src?100.96.1.0
    100.96.1.0/24?dev?docker0??proto?kernel??scope?link??src?100.96.1.1
    10.168.0.0/24?dev?eth0??proto?kernel??scope?link??src?10.168.0.2

    可以看到container-1需要访问container-2时,需要通过第一条路由规则(通过flannel0),然后交给flanneld处理;

    数据包在经过flanneld处理完成之后,交由第三条路由规则(通过eth0)发出;

    数据包走向过程:可以看到有3次的2018注册送菜金白菜态和内核态的数据拷贝

    ????84caa6dc3f9dcdf8b88b56bd2e22138d.png

      第一次:2018注册送菜金白菜态的容器进程发出的 IP 包经过 docker0 网桥进入内核态;

      第二次:IP 包根据路由表进入 TUN(flannel0)设备,从而回到2018注册送菜金白菜态的 flanneld 进程;

      第三次:flanneld 进行 UDP 封包之后重新进入内核态,将 UDP 包通过宿主机的 eth0 发出去。

      ? 注:由于多次发生了2018注册送菜金白菜态到内核态的切换,这是造成效率低的原因,也是优化的重点;

      VxLAN工作模式:直接在内核态完成数据包的封装

      注:当新node加入flannel网络后,会在已有的node上增加一条路由(从已有node的VTEP设备到新加入node的VTEP设备的路由)

      在vxlan模式下,会创建一个名字为flannel.1的VTEP设备;

      此设备的作用是在内核中将收到的IP包进行封装,发送给目的VTEP设备;

      问:要发送给目的VTEP设备就需要知道目的VTEP设备的MAC地址,如何知道呢?

      答:在新node上,当flanneld启动时,会自动通过ARP在已有的node上记录新node的flannel.1的MAC地址(通过ip neigh查看)

      flannel.1知道了目的VTEP设备的路由和MAC地址,就可以在内核态进行封包工作了;

      问:知道了目的VTEP设备的MAC后,数据包最终要发给哪台物理机呢?

      答:flannel.1转发的依据,来自于一个叫作FDB的转发数据库(由flanneld进程维护),可以通过bridge fdb命令查看;

      ? ? ? ?此转换数据库记录了要访问目标VTEP设备的MAC地址,需要转发到的真实IP的机器;

      在目标node收到数据包解封后,根据VNI=1的值,来决定是不是由flannel.1进行处理(拆包操作),并最终交由docker0处理;

      特别注意:docker0网桥的地址范围必须是Flannel为宿主机分配的子网;这样在通过flannel0或者flannel.1设备后,才会交给docker0处理;

      总结:

      1.vxlan模式通过创建的flannel.1设备,在内核态完成数据封装和解封,提高转发效率;

      2.新节点加入flannel网络时,会在老的flannel节点增加到新节点的flannel.1设备的路由信息、mac地址信息、所在物理节点的ip(由flanneld进程维护)

      3.通过知道路由信息、mac地址信息、物理ip(通过bridge fdb查看)后就可以开始数据包的封装操作;

相关TAG标签
上一篇:NFS服务搭建(linux和windows)-mb5ce6a8349c2c8的博客-51CTO博客
下一篇:Zabbix自动发现监控磁盘IO-实践哥-51CTO博客
相关文章
图文推荐

关于我们 | 联系我们 | 服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑--致力于做实用的IT技术学习网站