KVM/libvirt 上 ESXi 的 IP 别名/虚拟接口

KVM/libvirt 上 ESXi 的 IP 别名/虚拟接口

我需要在 KVM 上运行两个 ESXi 主机,并为它们分配外部网络可见的不同外部 IP。所需拓扑:

  ESXI     ESXI
   ↓        ↓       
  KVM      KVM
   ↓        ↓
  vIF      vIF
(own ip)  (own ip)
   ↓        ↓
 Physical NIC 
 External Net

对于其他主机来说,这很容易做到,因为两个桥接虚拟接口将 vNIC 模型设置为 Virtio 设备即可解决问题。但 ESXi 不支持 Virtio 作为 NIC 模型,因此它无法启动并抱怨未检测到网络适配器。

有没有办法让虚拟接口与 KVM 上的 ESXi 一起工作?我尝试使用 E1000 作为 NIC,但无法将 ESXi 连接到外部网络。

这是我尝试过的配置。没有任何工作:

<interface type='bridged'>
  <source bridge='br0'/>
  <model type='virtio'/>  #ESXi won't boot due to no adapter detected
</interface>

<interface type='bridged'>
  <source source='br0'  />
  <model type='e1000'/>  #ESXi boots but no network connectivity
</interface>

<interface type='direct'>
  <source dev='br0' mode='bridged' />
  <model type='e1000'/> #ESXi boots but no network connectivity
</interface>

<interface type='direct'>
  <source dev='br0' mode='passthrough' />
  <model type='e1000'/>  #ESXi boots but no network connectivity
</interface>

#Not applicable to my requirements as physical NIC would be passed to KVM
<interface type='direct'>
  <source dev='enp2s0:0' mode='passthrough' />
  <model type='e1000'/>  
</interface>

<interface type='direct'>
  <source dev='br0' mode='bridged' />
  <model type='e1000'/>  #ESXi boots but no network connectivity
</interface>

这是我的界面:

 br0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
    inet 192.168.1.10  netmask 255.255.255.0  broadcast 192.168.1.255
    inet6 fe80::b8ca:7bff:fe23:e847  prefixlen 64  scopeid 0x20<link>
    ether ba:ca:7b:23:e8:47  txqueuelen 1000  (Ethernet)
    RX packets 0  bytes 0 (0.0 B)
    RX errors 0  dropped 0  overruns 0  frame 0
    TX packets 4  bytes 300 (300.0 B)
    TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

 enp0s26u1u6: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
    inet 192.168.1.9  netmask 255.255.255.0  broadcast 192.168.1.255
    inet6 fe80::3be6:18f3:cdd7:d837  prefixlen 64  scopeid 0x20<link>
    ether a0:ce:c8:01:75:ef  txqueuelen 1000  (Ethernet)
    RX packets 25284  bytes 1737100 (1.6 MiB)
    RX errors 0  dropped 6860  overruns 0  frame 0
    TX packets 25208  bytes 29421441 (28.0 MiB)
    TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

  enp2s0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
    inet 192.168.1.6  netmask 255.255.255.0  broadcast 192.168.1.255
    inet6 fe80::ca2d:afad:d824:1205  prefixlen 64  scopeid 0x20<link>
    ether 90:2b:34:9a:bf:67  txqueuelen 1000  (Ethernet)
    RX packets 3375628  bytes 4511208522 (4.2 GiB)
    RX errors 0  dropped 3301  overruns 0  frame 0
    TX packets 1832807  bytes 847946426 (808.6 MiB)
    TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
    device interrupt 18  

  enp2s0:0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
    inet 192.168.1.10  netmask 255.255.255.0  broadcast 192.168.1.255
    ether 90:2b:34:9a:bf:67  txqueuelen 1000  (Ethernet)
    device interrupt 18 

答案1

virtio-net 无法与 ESXi 配合使用是可以理解的,因为他们不太可能关心为仅在 nested-virt 中相关的 NIC 提供驱动程序。不过,e1000 是一种标准 NIC 类型,所以我完全相信它能够正常工作。QEMU 仿真中的某些错误始终有可能使其与 ESXi 不兼容。

以下博客文章建议尝试使用 QEMU 的“vmxnet3”NIC 模型

https://xrsa.net/2014/08/25/running-vmware-esxi-under-ovirt/

这是 vmware 半虚拟化网卡模型,QEMU 也支持该模型。

答案2

您开始使用这种配置,它是正确的,但 ESXi 不能使用 virtio NIC:

<interface type='bridged'>
  <source bridge='br0'/>
  <model type='virtio'/>  #ESXi won't boot due to no adapter detected
</interface>

但无论出于什么原因,你似乎从来没有简单地将 NIC 型号类型更改为 e1000并且没有做其他改变。您尝试过的所有其他设置都有正确的 NIC 型号,但其他破碎的或不适当的设置。

当然,您也可以(也可能应该)只使用 vmxnet3 NIC 类型,该类型多年来一直在 libvirt 和 qemu 中得到良好支持。

因此,仅更改模型类型,不要更改任何其他内容。

相关内容