就上下文而言,我正在设置一个 3 节点 Proxmox 集群供个人使用,并在 4 个接口上设置 2 个不同的网状网络(每个网状网络每个节点 2 个接口)。这样,每个节点都可以直接连接到其他每个节点。为了使网络正常工作,我依赖于每个接口上的静态路由,配置如下:
auto lo
iface lo inet loopback
iface enp5s0f0 inet manual
iface enp5s0f1 inet manual
auto eno1
iface eno1 inet static
address 10.83.86.10/24
up ip route add 10.83.86.11/32 dev eno1
down ip route del 10.83.86.11/32
auto eno2
iface eno2 inet static
address 10.83.86.10/24
up ip route add 10.83.86.12/32 dev eno2
down ip route del 10.83.86.12/32
auto eno3
iface eno3 inet static
address 10.83.67.10/24
up ip route add 10.83.67.11/32 dev eno3
down ip route del 10.83.67.11/32
auto eno4
iface eno4 inet static
address 10.83.67.10/24
up ip route add 10.83.67.12/32 dev eno4
down ip route del 10.83.67.12/32
auto vmbr0
iface vmbr0 inet static
address 192.168.0.20/24
gateway 192.168.0.1
bridge-ports enp5s0f0
bridge-stp off
bridge-fd 0
source /etc/network/interfaces.d/*
节点之间的 IP 地址不同,但其他配置相同。接口eno1
和eno2
是网络的一部分10.83.86.0
,而eno3
和eno4
是10.83.67.0
。
问题是我不知道如何将这些网络公开给在 Proxmox 上运行的虚拟机和容器。例如,我希望能够对 Proxmox 的 Web 界面进行负载平衡和代理隧道,我计划仅在网状网络上公开该界面。另一个例子是,我需要某些工作负载能够访问 Ceph 公共网络,例如 Ceph Kubernetes CSI 驱动程序。
据我了解,Proxmox 需要 Linux 桥接器来实现虚拟网卡虚拟化。我尝试将我的接口配置重写为:
auto eno1
iface eno1 inet manual
up ip route add 10.83.86.11/32 dev eno1
down ip route del 10.83.86.11/32
auto eno2
iface eno2 inet manual
up ip route add 10.83.86.12/32 dev eno2
down ip route del 10.83.86.12/32
auto vmbr1
iface vmbr1 inet static
address 10.83.86.10/24
bridge-ports eno1 eno2
bridge-stp off
bridge-fd 0
但是这个配置只是……当我重新加载时,节点之间的网络连接就会中断ifreload -a
。我不完全明白为什么。
答案1
路由属于 IP 接口,而不是桥接端口。您的桥接端口实际上不应包含任何内容。所有路由都与具有 IP 地址的接口相关联。
想象一下如果你有这样的情况:
auto eno1
iface eno1 inet static
address 10.83.86.10/24
up ip route add 10.83.86.11/32 dev eno1
down ip route del 10.83.86.11/32
那么它就变成了这样:
iface eno1 inet manual
auto vmbr1
iface vmbr1 inet static
address 10.83.86.10/24
up ip route add 10.83.86.11/32 dev vmbr1
down ip route del 10.83.86.11/32
bridge-ports eno1
bridge-stp off
bridge-fd 0
请注意,所有与 IP 相关的内容都只是从物理 NIC 移到了桥接中。NIC 变为仅 L2 接口,可将其视为交换机端口。交换机的每个接口上都没有 IP 地址,桥接接口也不应该有。
您可以像之前一样通过在 中指定所有物理网卡来桥接多个物理网卡bridge-ports
。所有端口都不会有 IP 配置。只有桥接器可以有。
我不明白你通过为每个接口设置单独的 /32 地址和单独的路由要实现什么目的。我不知道你为什么要这样做,但这个网络设置看起来相当奇怪。
但是,如果您想保留问题中的网络(第 3 层)结构,则需要为每个 IP 地址创建一个专用网桥,并将相应的 VM 放入该网桥中。
如果这一切只是为了主机到虚拟机的通信,则无需将任何物理网卡带入这些网桥。vmbrX
如果这一切只是为了主机到虚拟任何桥接端口,但配置 IP 地址。您可以将虚拟机放入该“空”桥接中,它们将相互通信并与主机通信。如果您需要将此虚拟网段与第 2 层上的物理网络连接(例如以太网),则物理 NIC 只需成为桥接的一部分。