网络组件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架构图
本文来自博客园,作者:PunchLinux,转载请注明原文链接:https://www.cnblogs.com/punchlinux/p/16677925.html