Flannel配置详解
-
简介
Flannel是一种基于overlay网络的跨主机容器网络解决方案,也就是将TCP数据包封装在另一种网络包里面进行路由转发和通信,Flannel是CoreOS开发,专门用于docker多机互联的一个工具,让集群中的不同节点主机创建的容器都具有全集群唯一的虚拟ip地址Flannel使用go语言编写 -
Flannel实现原理
Flannel为每个host分配一个subnet,容器从这个subnet中分配IP,这些IP可以在host间路由,容器间无需使用nat和端口映射即可实现跨主机通信每个subnet都是从一个更大的IP池中划分的,flannel会在每个主机上运行一个叫 flanneld的agent,其职责就是从池子中分配subnetFlannel使用etcd存放网络配置、已分配 的subnet、host的IP等信息 Flannel数据包在主机间转发是由backend实现的,目前已经支持UDP、VxLAN、host-gw、AWS VPC和GCE路由等多种backend
数据转发流程
容器直接使用目标容器的ip访问,默认通过容器内部的eth0发送出去。报文通过veth pair被发送到vethXXX。
vethXXX是直接连接到虚拟交换机docker0的,报文通过虚拟bridge docker0发送出去。
查找路由表,外部容器ip的报文都会转发到flannel0虚拟网卡,这是一个P2P的虚拟网卡,然后报文就被转发到监听在另一端的flanneld。
flanneld通过etcd维护了各个节点之间的路由表&