本文详解之flannel-host-gw模式

本文详解之flannel-host-gw模式

host-gw

host-gw即Host Gateway,从名字中就可以想到这种方式是通过把主机当作网关来实现跨节点网络通信的。那么具体如何实现跨节点通信呢?

同理UDP模式和VXLAN模式,首先将Backend中的type改为host-gw,这里就不再赘述,只讲一下网络通信的实现流程。

采用host-gw模式后flanneld的唯一作用就是负责主机上路由表的动态更新, 想一下这样会不会有什么问题?

使用host-gw Backend的Flannel网络的网络包传输过程如下图所示:

本文详解之flannel-host-gw模式

  1. 同UDP、VXLAN模式一致,通过容器A的路由表IP包到达cni0
  1. 到达cni0的IP包匹配到host A当中的路由规则(10.244.2.0),并且网关为172.16.130.164,即host B,所以内核将IP包发送给host B(172.16.130.164)
  1. IP包通过物理网络到达host B的eth1
  1. 到达host B eth1的IP包匹配到host B当中的路由表(10.244.2.0),IP包被转发给cni0
  1. cni0将IP包转发给连接在cni0上的容器B

host-gw模式其中一个局限性就是,由于是通过节点上的路由表来实现各个节点之间的跨节点网络通信,那么就得保证两个节点是可以直接路由过去的。按照内核当中的路由规则,网关必须在跟主机当中至少一个IP处于同一网段,故造成的结果就是采用host-gw这种Backend方式时则集群中所有的节点必须处于同一个网络当中,这对于集群规模比较大时需要对节点进行网段划分的话会存在一定的局限性。另外一个则是随着集群当中节点规模的增大,flanneld需要维护主机上成千上万条路由表的动态更新也是一个不小的压力。


分享到:


相關文章: