如果 IP 地址被分配给多个节点上的虚拟接口,Linux 如何从可路由子网路由到 IP 地址

如果 IP 地址被分配给多个节点上的虚拟接口,Linux 如何从可路由子网路由到 IP 地址

我看到了一种我无法理解的场景(我知道,这是坏运气)。

我有一个由 3 个节点组成的集群,每个节点都有一个 NIC(ens4),并分配了单独的 IP 地址,例如 10.10.20.210。所有节点的 IP 地址都属于同一子网,例如 10.10.20.0/24。

在所有 3 个节点上,我都有一个虚拟 NIC(kube-ipvs0),其分配了一个地址(例如 10.10.20.205),该地址属于同一个可路由子网 10.10.20.0/24。

3: ens4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc fq_codel state UP group default qlen 1000
    link/ether fa:16:3e:7b:f8:9c brd ff:ff:ff:ff:ff:ff
    inet 10.10.20.210/24 brd 10.10.20.255 scope global dynamic ens4
       valid_lft 86112sec preferred_lft 86112sec
    inet6 fe80::f816:3eff:fe7b:f89c/64 scope link
       valid_lft forever preferred_lft forever

6: kube-ipvs0: <BROADCAST,NOARP> mtu 1500 qdisc noop state DOWN group default
    link/ether 7e:49:81:e2:bb:f7 brd ff:ff:ff:ff:ff:ff
        inet 10.10.20.205/32 scope global kube-ipvs0
           valid_lft forever preferred_lft forever   

没有通过 BGP 为虚拟 IP 地址/子网进行路由通告(因为它属于可路由子网)。

我可以访问虚拟 IP 地址,而无需知道通过哪个节点(每个节点都运行 kube-proxy/IPVS,将虚拟 IP DNAT 到目标/pod IP),也无需知道基于什么路由机制/信息(虚拟 NIC 上设置了 NOARP)。我正在使用 Ubuntu 20.04。

我有几个问题:路由如何工作?(这里有任何表格可以检查和分享吗?)这是一个有效的路由场景吗?

背景:这个想法是为了避免使用真实的虚拟子网和相关的路由通告,例如使用 BGP。

最好的,理查德

相关内容