网络组件flannel总结

介绍

       官网:

       https://coreos.com/flannel/docs/latest

 

       Github地址:

       https://github.com/flannel-io/flannel

 

kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml

      

   Network为Pod子网网段地址

  由coreos开源的针对kubernetes网络服务,目的为解决kubernetes急群众各主机节点pod的相互通信。并借助etcd维护网络ip地址分配,并为每一个node服务器分配不同的ip地址段。

       如Pod网络:10.200.0.0/16,node1:10.200.1.0/24、node2:10.200.2.0/24

flannel网络模式

       Flannel网络模型(后端模型),Flannel目前有三种方式实现UDP/VXLAN/host-gw:

       1、UDP:早起版本的Flannel使用UDP封装完成报文跨主机转发,安全性及性能略有不足。Flannel会在k8s节点服务器上监听udp端口8472,这个socket监听是由内核进行创建。

root@node1:~/ netstat -lntup|grep 8472
udp        0      0 0.0.0.0:8472            0.0.0.0:*         -

 

       2、VXLAN:Linux内核在2012年底的v3.7.0之后加入了VXLAN协议支持,因此新版本Flannel也有UDP转换为VXLAN,VXLAN本质是一种tunnel(隧道)协议,用来基于三层网络实现虚拟的2层网络。

 

       3、Host-gw:也就是Host GateWay,通过在node节点上创建到达各目标容器地址的路由表而完成报文的转发,因此这种方式要求node节点本身必须处于同一个局域网(二层网络)中,因此不适用与网络变动频繁或比较大型的网络环境,但是其性能较好。

 

Flannel组件解释:

       Cni0:网桥设备,每创建一个pod都会创建一对veth pair,其中一端是pod中的eth0,另一端是Cni网桥中的端口(网卡),Pod中从网卡eth0发出的流量都会发送到Cni0网桥设备的端口(网卡)上,Cni0设备获得的ip地址是该节点分配到的网段的第一个地址。

       Flannel.1:overlay网络的设备,用来进行vxlan报文的处理(封包和解包),不同node之间的pod数据流量都从overlay设备以隧道的形式发送到对端。

  同一个子网之间的pod,可以查看到apr地址表获取对端mac地址

root@tomcat-6c88775bb7-48sl4:/ ping 10.200.2.7
PING 10.200.2.7 (10.200.2.7) 56(84) bytes of data.
64 bytes from 10.200.2.7: icmp_seq=1 ttl=64 time=0.084 ms
64 bytes from 10.200.2.7: icmp_seq=2 ttl=64 time=0.067 ms
64 bytes from 10.200.2.7: icmp_seq=3 ttl=64 time=0.069 ms
^C
--- 10.200.2.7 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2041ms
rtt min/avg/max/mdev = 0.067/0.073/0.084/0.007 ms
root@tomcat-6c88775bb7-48sl4:/# arp -a
? (10.200.2.7) at 06:ba:29:22:d3:b2 [ether] on eth0
? (10.200.2.1) at 8e:b4:8a:e4:c4:f7 [ether] on eth0

 

Flannel文件目录

 

  查看flannel运行目录

root@node1:~/ find / -name flannel
/run/flannel
/run/containerd/io.containerd.runtime.v2.task/k8s.io/bb50f7a934b05892d073422fa53860e0489e374a6f55b96c97835b73ef75bd4e/rootfs/run/flannel
/usr/local/bin/flannel
/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/13/fs/run/flannel
/var/lib/cni/flannel

 

  查看flannel网络子网信息

root@node1:~/ cat /run/flannel/subnet.env
FLANNEL_NETWORK=10.200.0.0/16   #POD子网
FLANNEL_SUBNET=10.200.2.1/24		#当前node节点flannel pod子网
FLANNEL_MTU=1450					#MTU最大传输单元
FLANNEL_IPMASQ=true				#masquerade nat地址伪装

 

  查看flannel CNI信息和系统路由表

root@node1:~ cat /var/lib/cni/flannel/d642d96de3d5fb9e51771930f88359f78ff3e8fe3046ba1d4a262e39f00cea37 
{"cniVersion":"0.3.1","hairpinMode":true,"ipMasq":false,"ipam":{"ranges":[[{"subnet":"10.200.2.0/24"}]],"routes":[{"dst":"10.200.0.0/16"}],"type":"host-local"},"isDefaultGateway":true,"isGateway":true,"mtu":1450,"name":"cbr0","type":"bridge"}

 

root@node1:~/ route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.0.254   0.0.0.0         UG    0      0        0 ens33
10.200.0.0      10.200.0.0      255.255.255.0   UG    0      0        0 flannel.1
10.200.1.0      10.200.1.0      255.255.255.0   UG    0      0        0 flannel.1
10.200.2.0      0.0.0.0         255.255.255.0   U     0      0        0 cni0
192.168.0.0     0.0.0.0         255.255.0.0     U     0      0        0 ens33

 

Flannel vxlan配置

验证当前backend类型

root@master:~/ kubectl edit configmaps -n kube-system kube-flannel-cfg

Flannel VxLAN架构图

 

posted @ 2022-09-10 17:34  PunchLinux  阅读(263)  评论(0编辑  收藏  举报