本文将讲述一个问题:kvm guest使用libvirt xml定义如何使用virtual network?
1)nat, route ,isolated, open类型
在host中定义virtual network会创建一个虚拟的bridge,相当于一个交换机。guest只需要连接到这个交换机上就可以了。
在guest的xml中添加:
# virsh edit vm ... <interface type='network'/> <source network='net1'/> ====>net1是已经定义好的一个虚拟网络 </interface> ...
上述是最简单的xml,保存后会自动添加一些必要信息,如mac,pci address, model type等信息。当然也可以手动指定。
2)user(Userspace SLIRP stack),vhost-user,Multicast tunnel, TCP tunnel,UDP unicast tunnel等类型
只能在guest中以interface来引用。如user是qemu提供的非特权用户可以使用的类型,可以这样引用:
<interface type='user'/>(mac,pci地址,model type如果哦不指定,会自动生成)
3)bridge(use an exsiting host linux bridge)
本身存在一个linux bridge,可以定义成网络给guest用(不会再创建bridge),也可以直接给guest用。两种方式本质是一样的。
# virsh net-dumpxml birdge-net <network> <name>bridge-net</name> <forward mode='birdge'/> <bridge name='br0'/> </network> # virsh edit vm ... <interface type='network'> <source network='bridge-net'> </interface> ...
直接给guest用( 1)中由libvirt创建的bridge也可以这样引用 ):
<interface type='bridge'> <source bridge='br0'/> </interface>
4)macvtap(包括bridge,vepa,private,passthrough四种), hostdev
可以定义一个network作为interface pool, 以network的形式引用,也可以直接引用。同 3),两种方式本质是一样的。
定义interface pool
<network> <name>direct-macvtap</name> <forward mode="bridge"> <interface dev="eth30"/> <interface dev="eth31"/> <interface dev="eth32"/> <interface dev="eth33"/> <interface dev="eth34"/> </forward> </network>
<network> <name>hostdev-net</name> <forward mode='hostdev' managed='yes'> <driver name='vfio'/> <address type='pci' domain='0' bus='4' slot='0' function='1'/> <address type='pci' domain='0' bus='4' slot='0' function='2'/> <address type='pci' domain='0' bus='4' slot='0' function='3'/> </forward> </network>
guest中直接引用
# virsh edit vm ... <interface type='direct'> <source dev='enp0s25' mode='vepa'/> </interface> ...
# virsh edit vm ... <interface type='hostdev' managed='yes'> <source> <address type='pci' domain='0x0000' bus='0x00' slot='0x19' function='0x0'/> </source> </interface> ...
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。