kubernetes中flannal、calico和cannal网络原理的实例分析
更新:HHH   时间:2023-1-7


本篇文章为大家展示了kubernetes中flannal、calico和cannal网络原理的实例分析,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

一、flannel

原理:flannel有host-gw(非overlay网络),host-gw 模式是指直接使用指向目标机器物理ip的路由,不进行任何封装而进行数据包传输

(性能很高,但是如果节点太多,则每台机器的路由表会膨胀到一定境界,必须所有机器都互联,所有的节点必须都在同一个子网中,不能跨网段,二层必须能够互联)

           overlay网络,支持UDP、VxLAN、AWS VPC和GCE路由等数据转发方式 (kubernetes默认使用了vxlan,下面以vxlan为例说明)

首先是ip地址的分配,通过在ip池中划分子网到指定物理机器实现。(flannel在分配ip的时候会挑选可用的子网到各自物理机器上去,而pod的ip从该子网中分配)

主机192.168.0.4上

ip link add dev flannel_vxlan_c type veth peer name flannel_vxlan_h

brctl addif cni flannel_vxlan_h
ip link set flannel_vxlan_h up
ip addr add 10.244.0.1/24 dev cni

ip netns add flannel_vxlan
ip netns exec flannel_vxlan ip link set lo up
ip link set flannel_vxlan_c netns flannel_vxlan
ip netns exec flannel_vxlan ip link set flannel_vxlan_c up
ip netns exec flannel_vxlan ip addr add 10.244.0.3/24 dev flannel_vxlan_c
ip netns exec flannel_vxlan ip route add default via 10.244.0.1

ip nei add 10.244.2.0 dev flannel.1 lladdr 22:3d:4d:c5:65:ff(这个mac地址是对面192.168.0.16上flannel.1的mac地址)
bridge fdb add 22:3d:4d:c5:65:ff dst 192.168.0.16 dev flannel.1
ip route add 10.244.2.0/24 via 10.244.2.0 dev flannel.1 onlink

这样,在另一边做同样的设置,就可以实现在vxlan的基础上的东西向互联了

需要注意的是图中的flanneld这里,我还不太确定他是做什么用的

优势:overlay网络,能适应公有云环境

缺点:udp性能损耗非常高,vxlan相对很好,不能进行网络隔离等等网络策略操作

二、calico网络

calico提供两种模式网络:BGP、ip-in-ip(overlay网络)

工作原理:

calico在每个节点上的内核中创建一个vrouter,这个vrouter做高效的路由转发,vrouter通过bgp向其他节点通报本地的pod相关的路由信息,在小规模部署中,所有的节点都可通过bgp互联,大规模的时候可以通过bgp reflector来完成路由的通报。

ip地址分配:分配策略同flannel类似,也是将整个pool划分为不同的子网,将子网调度到不同的节点上,然后各节点上使用相应的子网内的ip地址创建pod

calico可以使用iptables实现访问控制,可以实现很多网络策略

如图:

pod与物理机通过veth相连接。

felix用来设置路由以及iptables(可以实现网络策略,控制pod的通信情况)

bgp client(bird)通过读取路由信息,向整个网络中进行广播。这样对面就会获知娶一个特定网络的路由信息。

需要注意的是ip-in-ip 与 完全bgp的区别是,pod出来的数据包,通过ip route被发送给一个本地的ipip设备(这个设备做的工作就是使用本地物理机的ip和目的物理机器ip将pod的ip报文封装起来,根据路由发送到相应的机器上去)

具体实现大概是下面这样子的

主机192.168.0.4

ip netns add calico
ip link add dev calico-c type veth peer name calico-h
ip link set calico-c netns calico
ip netns exec calico ip link set lo up
ip netns exec calico ip link set calico-c up
ip netns exec calico ip addr add 10.244.0.3/24 dev calico-c
ip netns exec calico ip route add default via 169.254.1.1
ip netns exec calico ip route add 169.254.1.1 dev calico-c

ip route add 10.244.0.3 dev calico-h
ip link set calico-h up
sysctl -w net.ipv4.conf.calico-h.proxy_arp=1

BGP模式

ip route add 10.244.2.0/24 via 192.168.0.16

IP-IN-IP模式

ip tunnel add tunl0 mode ipip

ip route add 10.244.2.0/24 via 192.168.0.16 dev tunl0

在另一边是相反的。当然这些操作都是felix以及confd 和bird完成的

calico的性能:比flannel强太多,即便overlay网络ip-in-ip也比flannel的overlay网络性能强很多

优点:性能强、快、有网络策略、有overlay、基于三层路由的

缺点:据说是不能VRF,当然目前我还不知道什么是VRF

三、canal

canal是flannel与calico的结合版,在这里去除了calico的confd bird部分,也就意味着不使用bgp,不使用ipip隧道,保留的只有felix部分,这部分提供路由以及iptables的设置,也就是一般的网络策略。flannel在这里保留的是vxlan的隧道部分

canal创建的pod的网络结构就是这样的

其本质是:

主机192.168.0.4

ip link add dev canal-c type veth peer name canal-h
ip link set canal-c netns canal
ip netns exec canal ip link set lo up
ip netns exec canal ip link set canal-c up
ip netns exec canal ip addr add 10.244.0.3/24 dev canal-c
ip netns exec calico ip route add default via 169.254.1.1
ip netns exec canal ip route add 169.254.1.1 dev canal-c

ip route add 10.244.0.3 dev canal-h
ip link set canal-h up
sysctl -w net.ipv4.conf.canal-h.proxy_arp=1

ip nei add 10.5.47.0 dev flannel.1 lladdr 22:3d:4d:c5:65:ff (192.168.0.16上flannel.1的mac)
bridge fdb add 22:3d:4d:c5:65:ff  dst 192.168.0.16 dev flannel.1
ip route add 10.244.1.0/24 via 10.244.1.0 dev flannel.1 onlink

主机192.168.0.16

ip link add dev canal-c type veth peer name canal-h
ip link set canal-c netns canal
ip netns exec canal ip link set lo up
ip netns exec canal ip link set canal-c up
ip netns exec canal ip addr add 10.244.1.3/24 dev canal-c
ip netns exec calico ip route add default via 169.254.1.1
ip netns exec canal ip route add 169.254.1.1 dev canal-c

ip route add 10.244.1.3 dev canal-h
ip link set canal-h up
sysctl -w net.ipv4.conf.canal-h.proxy_arp=1

ip nei add 10.244.0.0 dev flannel.1 lladdr  56:ad:b6:5f:16:d7 (192.168.0.4上flannel.1的mac)
bridge fdb add 56:ad:b6:5f:16:d7 dst 192.168.0.4 dev flannel.1
ip route add 10.244.0.0/24 via 10.244.1.0 dev flannel.1 onlink

优势:网络策略、overlay网络

缺点:性能下降的很快,但是貌似没有calico的不能vrf的缺点

上述内容就是kubernetes中flannal、calico和cannal网络原理的实例分析,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注天达云行业资讯频道。

返回云计算教程...