由于host-gw使用通过远程机器IP到子网的IP路由,它看起来像纯粹的L3网络解决方案。
因此,为什么需要主机之间的直接L2连接?
答案 0 :(得分:2)
host-gw
在主机上添加路由表条目,以便主机知道如何传输容器网络数据包。
这适用于L2,因为它只涉及hosts
,switches
和containers
。 switches
不关心IP和路由,hosts
知道containers
存在,以及如何路由到它们,containers
只是发送和接收数据。
如果hosts
位于不同的网络,则引入L3,并涉及routers
。 routers
不知道containers
存在,任何容器数据包都将丢弃,无法进行通信。
当然,您可以在routers
上添加路由表条目,但这已失控flannel
。
答案 1 :(得分:0)
host-gw在每台主机上添加路由表entires。条目如下:
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 10.110.110.1 0.0.0.0 UG 100 0 0 eth0
10.100.14.0 10.110.110.21 255.255.255.0 UG 0 0 0 eth0
10.100.38.0 0.0.0.0 255.255.255.0 U 0 0 0 docker0
10.110.110.0 0.0.0.0 255.255.255.0 U 100 0 0 eth0
169.254.169.254 10.110.110.1 255.255.255.255 UGH 100 0 0 eth0
最重要的项目是Gateway(10.110.110.21)的值。路由表将目标mac地址更改为节点(10.110.110.21)的mac_address,该节点将L2直接连接到10.110.110.22(当前节点)。
如果未连接L2,则无法将数据包传递到节点(下一跳)