**
flannel网络概述
**
flannel 是 CoreOS 开发的容器网络解决方案。flannel 为每个 host 分配一个 subnet(子网),容器从此 subnet 中分配 IP,这些 IP 可以在主机间路由,容器间无需 NAT 和 port mapping(端口映射) 就可以跨主机通信。
flannel的作用
因为flannel实现跨主机的子网通信是通过主机中的dr0网卡进行通信的,由flannel分配的子网都是从手动指定的一个大的子网中划分出来分配的。
flannel 会在每个主机上运行一个叫 flanneld 的代理。其职责就是从池子中分配 subnet。为了在各个主机间共享信息,flannel 用 etcd(与 consul 类似的 key-value 分布式数据库)存放网络配置、已分配的 subnet、host 的 IP 等信息。
数据包转发原理
数据包如何在主机间转发是由 backend 实现的。flannel 提供了多种 backend,最常用的有 vxlan 和 host-gw
其他 backend 请参考 https://github.com/coreos/flannel
跨主机容器网络通信实现工具
Docker跨主机容器间网络通信实现的工具有pipework、flannel、weave、open vswitch(虚拟交换机)、calico
其中flannel和weave的区别是:
weave的思路
在每个宿主机上布置一个特殊的route的容器,不同宿主机的route容器连接起来。 route拦截所有普通容器的ip请求,并通过udp包发送到其他