我又思考了一下,二层网络可能无法连通。因为flannel网络中,node上的fdb是靠配置而非学习得到。当node1上的容器1想要通过mac地址直连node2上的容器2时,由于node1中的fdb中没有配置容器2的mac地址相关记录,所以flannel.1无法找到VTEP出口的ip。故而二层网络没有连通性。
如果想要有连通性,需要配置VTEP为学习模式,并且把所有的VTEP加入一个分组中。这样在fdb表中查询不到mac地址时,vxlan在VTEP组中发起广播(或者组播?这个概念我有点混淆)。VTEP也可作为一个网桥设备,继续向docker0,进而目的node上的所有容器广播。正确的目的地址会响应请求,而且刚才途经的设备fdb都学习到了源容器的mac 地址映射,所以响应数据可以顺利返回源容器。这样就完成了二层网络的连通。
展开