flannel使用host-gw模式
- flannel
- 2024-08-12
- 95热度
- 0评论
Flannel 的 host-gw 模式,它的工作原理非常简单,为了方便叙述,我用这张图为“host-gw 示意图”:
Node 1 上的 Infra-container-1,要访问 Node 2 上的 Infra-container-2。
当你设置 Flannel 使用 host-gw 模式之后,flanneld 会在宿主机上创建这样一条route路由规则。
以 Node 1 为例:
# ip route
...
10.244.1.0/24 via 10.168.0.3 dev eth0
这条路由规则的含义是:
目的 IP 地址属于 10.244.1.0/24 网段的 IP 包,应该经过本机的 eth0 设备发出去(即:dev eth0);并且,它下一跳地址是 10.168.0.3。
而从 host-gw 示意图中我们可以看到,这个下一跳地址对应的,正是我们的目的宿主机 Node 2。
一旦配置了下一跳地址,那么接下来,当 IP 包从网络层进入链路层封装成帧的时候,eth0 设备就会使用下一跳地址对应的 MAC 地址,作为该数据帧的目的 MAC 地址。显然,这个 MAC 地址,正是 Node 2 的 MAC 地址。
host-gw 模式能够正常工作的核心,就在于 IP 包在封装成帧发送出去的时候,会使用路由表里的“下一跳”来设置目的 MAC 地址。这样,它就会经过二层网络到达目的宿主机。
这样,这个数据帧就会从 Node 1 通过宿主机的二层网络顺利到达 Node 2 上。
所以说,Flannel host-gw 模式必须要求集群宿主机之间是二层连通的。
可以看到,host-gw 模式的工作原理,其实就是将每个 Flannel 子网(Flannel Subnet,比如:10.244.1.0/24)的“下一跳”,设置成了该子网对应的宿主机的 IP 地址。
也就是说,这台“主机”(Host)会充当这条容器通信路径里的“网关”(Gateway)。这也正是“host-gw”的含义。