文章目录
  1. 1. Flannel 是否需要在 Master 节点上安装
  2. 2. Flannel 是否控制了容器的 IP 分配
  3. 3. 多节点 Flannel 网络路由

Flannel是CoreOS团队针对Kubernetes设计的一个网络规划服务,简单来说,它的功能是让集群中的不同节点主机创建的Docker容器都具有全集群唯一的虚拟IP地址。其设计目的就是为集群中的所有节点重新规划IP地址的使用规则,从而使得不同节点上的容器能够获得“同属一个内网”且”不重复的”IP地址,并让属于不同节点上的容器能够直接通过内网IP通信。

Flannel实质上是一种“覆盖网络(overlay network)”,也就是将TCP数据包装在另一种网络包里面进行路由转发和通信,目前已经支持UDP、VxLAN、AWS VPC和GCE路由等数据转发方式。

Flannel 是否需要在 Master 节点上安装

Flannel 为每个节点分配不同的 IP,在每个几点上的 Docker 使用了不同的地址段,因为Flannel通过Etcd分配了每个节点可用的IP地址段后,偷偷的修改了Docker的启动参数,增加了 -bip 参数,从而,不同节点上的容器被限制在了不同的网段。除了 Flannel 需要一个中央的 Etcd 来记录分配了的 IP 地址段,并不需要其他的中央配置,因此,Master 节点上是不需要安装 Flannel 的。

Flannel 是否控制了容器的 IP 分配

由于 Flannel 是在 Docker 的启动参数中控制了节点的 IP 地址段,但是并没有控制每一个容器的 IP 的分配。容器的 IP 是由节点上的 Docker Daemon 自动分配的。

多节点 Flannel 网络路由

在有3个或3个以上节点的网络中,Flannel 网络的优势相比直接路由方式要简洁很多。

直接路由方式一般会借助 Quagga 来进行配置,Quagga 也是安装在每个节点上,启动之后,会根据本机的 docker0 网卡地址,将这个地址的路由规则加到其他节点的路由表中。也就是说,如果网络中有 N 个节点,那么每个节点上就需要有 N-1 条路由规则,在节点较多的时候,这个路由规则的规模比较庞大。

而 Flannel 网络路由就不同了,它采用了子网的概念。每个节点 docker0 所在的网络都是 flannel0 网络的子网,因此,当子网的 docker0 有数据发出的时候,数据会自然被发生到 flannel0 网卡上。由于 Flannel 统一分配了节点的子网段,数据被路由到指定的子网 docker0 即可。相对于直接路由方式,Flannel 网络少了很多路由规则的配置,而是由中央的 flannel0 来统一路由。

文章目录
  1. 1. Flannel 是否需要在 Master 节点上安装
  2. 2. Flannel 是否控制了容器的 IP 分配
  3. 3. 多节点 Flannel 网络路由

欢迎来到Valleylord的博客!

本博的文章尽量原创。