首页 > 编程知识 正文

k3s快速搭建k8s集群环境,k8s集群搭建图

时间:2023-05-03 22:45:45 阅读:178321 作者:2023

上一篇文章介绍了基于flannel的underlay网络和overlay网络,包括host-gw模式的underlay网络、基于vxlan的overlay网络和基于udp的overlay网络现在我们来做一下回顾总结和比较。 相关文章可作为以下参考。

flannel underlay网络

flannel vxlan overlay网络设置

flannel VX局域网复盖网络

flannel udp overlay网络设置

flannel udp overlay网络

对于flannel underlay网络:

数据包从源pod的网络名称发送到主机网络名称的docker0 linux bridge。

在源pod的主机上进行路由,将下一跳地址作为目标pod的主机。

在目标pod的主机上路由,通过本地直连路由到目标pod。

必须为所有工作器节点打开路由转发功能。 (net.ipv4.ip_forward=1)。

要求所有workernode在同一个双层网络中,并完成目标pod的下一跳路由。

host内的根在flannel启动时写入。 因为主机连接到etcd群集,所以您可以看到哪些子网属于哪个主机。

对于flannel vxlan overlay网络:

每台主机都有一个名为flannel.x的vxlan网络设备,用于完成vxlan数据的udp数据包和解包。 upd数据在主机的8472端口上处理。 端口值可配置。

数据从pod的网络名称进入主机的网络名称空间。

根据host network namespace路由表,下一跳ip是目标vxlan设备的ip,由当前host上的flannel.x设备发送。

根据主机网络名称的apr表找到下一跳ip的mac地址。

从主机网络名称的fbd转发表中找到与下一跳ip的mac地址对应的传输ip。

当前host的flannel.x设备根据与下一跳ip的mac地址相对应的转发ip和本地路由表创建upd包。 此时,如下所示。

外部udp包:源ip是当前主机ip,目标ip是与mac转发表中的ip匹配的ip,源mac是上一个主机ip的mac,目标mac是与fdb匹配的ip的mac。 目标端口可配置为8472个(可配置),vxlan id为1个。

内层双以太网数据包:源ip为源pod ip,目标ip为目标pod ip,源mac为源pod mac,目标mac为主机网络名称路由表中下一跳ip的mmac

数据包将从当前主机路由到目标节点上的主机。

目标节点host的8472端口接收到udp数据包后,发现数据包中有vxlan id标识。 然后,基于linux vxlan协议,在目的主机上找到数据消息中的vxlan id对应的vxlan设备,传递数据进行处理。

VX局域网设备收到数据后,开始打包VX局域网UDP消息,删除upd消息的ip、port、mac消息后,得到内部的payload,发现是双层消息。 然后,继续对该双层消息进行打包,得到其中的源pod ip和目标pod ip。

根据目标节点主机上的路由表,将数据从linux bridge docker0本地传输。

linux bridge docker0使用veth pair将数据传输到目标pod。

在每个主机上的flannel服务启动时读取etcd中的vxlan配置信息,并将相应数据写入主机路由表和mac传输接口表fdb。

对于flannel udp overlay网络:

每个主机都有一个名为flannel0的TUN网络设备,用于完成原始ip数据包的udp数据包和解包。 upd数据位于主机的8285端口上,并且可以设置端口值。

数据从pod的网络名称进入主机的网络名称空间。

根据主机网络名称路由表,下一跳ip以直接连接为目标,从当前主机的精简设备flannel0发送。

当前主机上的TUN设备flannel0将数据从内核空间传递到用户空间APP应用程序flannel。

用户空间APP应用程序flannel根据目标ip属于哪个子网,在etcd中查找此子网所在的目标主机,最后完成upd包。 此时:

对于原始ip数据包:源ip是源pod

ip,目标ip为目标pod ip。

对于外层udp包:源ip为当前host的ip,目标ip为flannel在etcd中查询的匹配ip,目标port为8285(可以配置),源端口为随机端口。

flannel将upd包发送给TUN设备flannel0,数据由用户空间进入内核空间。

数据在内核空间根据路由策略发送到目标宿主的8285端口。

目标宿主的8285端口为flannel进程,数据由内核空间进入用户空间。

flannel进程对udp数据拆包,去掉ip和port信息,得到内层的原始ip包。然后把这个包发送给TUN device flannel0,数据由程序用户空间进入内核空间。

根据目标节点host上路由表,将数据由linux bridge docker0做本地转发。

数据由linux bridge docker0利用veth pair转发到目标pod。

对于以上三种方式:

都要求host宿主开启网络转发功能(net.ipv4.ip_forward = 1)。

flannel underlay网络没有数据包的额外封包与拆包,效率会更高一些。

对于flannel underlay网络要求所有的worker node都在同一个二层网络里,从而完成目标pod的下一跳路由。换句话说,underlay网络worker node不能跨子网。

flannel vxlan overlay网络和flannel udp overlay网络的worker node只要三层路由可达就好,支持worker node能跨子网。

对于flannel vxlan overlay网络和flannel udp overlay网络都有封包与拆包,并且外层包都是udp包。

flannel vxlan overlay网络内层包是二层以太包,flannel udp overlay网络内层包是三层ip包。

flannel vxlan overlay网络基于linux vxlan设备,flannel udp overlay网络基于linux TUN设备。

flannel underlay网络和flannel vxlan overlay网络所有数据包都由操作系统内核空间处理,没有用户空间的应用程序参与。

flannel udp overlay网络数据包既有操作系统内核空间处理,也有用户空间的应用程序flannel参与,所以udp overlay网络效率最低,基本不会在生产上使用。

以上回顾了flannel underlay网络,vxlan overlay网络,udp overlay网络,做了一些总结和对比。但是在生产环境中具体选用那种网络请根据实际需求来,对于flannel underlay网络和flannel vxlan overlay网络并没有明显偏好。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。