首页 文章

kvm / libvirt和linux-namespaces的问题

提问于
浏览
0

我的Ubuntu 16.04 LTS上存在kvm / libvirt虚拟化和网络命名空间的问题 . 我想要做的是以下围栏设置:

  • 一个网络命名空间(围栏)

  • 命名空间中有两个Linux桥 .

  • 每个桥都有自己的ip网络 .

  • 允许这两个网桥之间的IP转发 .

  • 两个虚拟机 . VM1连接到bridge1,VM2连接到bridge2 .

  • 将VM1 Ping到VM2 .

我的目的是在我的笔记本电脑上安装一个小实验室,它完全独立于主机与外界通信的剩余网络设置,在我看来,网络命名空间是实现这一目标的方法,但我遇到了一些障碍 .

到目前为止,我已经设置了以下内容:

ip netns add internalSpielwiese
ip netns exec internalSpielwiese bash
    ip addr add 127.0.0.1/8 dev lo
    ip link set lo up
    ip link add name iBr0 type bridge
    ip addr add 172.0.0.1/24 dev iBr0
    ip link set iBr0 up
    ip link add name iBr1 type bridge
    ip addr add 172.0.1.1/24 dev iBr1
    ip link set iBr1 up

在命名空间内ping ips是成功的 . 启用IP转发 . 在命名空间之外,桥梁不可见/不存在 . 现在是时候让libvirt的桥梁知道了 . 但它不起作用 . 我用这个xml试了一下

<network>
  <name>internalBr0</name>
  <uuid>3f4647d9-0c19-509f-b512-9cac91c7149b</uuid>
  <forward mode='bridge'/>
  <bridge name='iBr0'/>
</network>

和适当的virsh net-define和net-start命令 . 我编辑了一个VM的xml文件并启动了VM但结果如下:

virsh # start kirke2
error: Failed to start domain kirke2
error: Cannot get interface MTU on 'iBr0': No such device

显然,libvirt没有在命名空间internalSpielwiese中找到iBr0,经过一些谷歌搜索后,我得到的结论是libvirt无法处理网络命名空间 . 或者有办法吗?怎么样?

1 回答

  • 0

    Libvirt只能看到位于运行libvirtd的相同名称空间中的资源 . 因此,私有名称空间中的设备对libvirtd是不可见的 . 除了让libvirtd在这个自定义网络命名空间中运行之外,目前还没有好办法解决这个问题 . 然后主机NIC对libvirtd是不可见的 - 这是否是一个问题取决于你尝试todo .

相关问题