由于 host-gw 通过远程机器 IP 使用 IP 路由到子网,它看起来像纯 L3 网络解决方案。
因此,为什么需要主机之间的直接 L2 连接?
由于 host-gw 通过远程机器 IP 使用 IP 路由到子网,它看起来像纯 L3 网络解决方案。
因此,为什么需要主机之间的直接 L2 连接?
host-gw
在主机上添加路由表条目,以便主机知道如何传输容器网络数据包。
这适用于 L2 ,因为它只涉及hosts
和。不关心 IP 和路由,知道存在,以及如何路由到它们,只是发送和接收数据。switches
containers
switches
hosts
containers
containers
如果hosts
在不同的网络,则引入 L3,并routers
参与其中。routers
不知道containers
存在,并且任何容器数据包都会被丢弃,从而无法通信。
当然,您可以在 上添加路由表条目routers
,但这是无法控制的flannel
。
host-gw 在每个主机上添加路由表条目。条目如下:
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
最重要的一项是网关(10.110.110.21)的值。路由表会将目标mac地址更改为节点(10.110.110.21)的mac_address,该节点直接连接L2到10.110.110.22(当前节点)。
如果不是 L2 连接,则数据包无法传递到节点(下一跳)