• Open vSwitch + libvirt 搭建vlan网络


    网络拓扑结构

    创建一个限制VM流量的网络,使用的是Open vSiwitch来实现VM之间的流量隔离。

    要实现的网络拓扑如下图。

    配置环境

      如网络拓扑图所示,我们需要两台物理主机,4台虚拟机。每台物理主机上运行两台虚拟机。

    先在host1上进行配置。

    创建镜像

      

    1 qemu-img create -f qcow2 -o size=20g 镜像名字

    配置镜像的xml文件

      这是一份比较完整的xml文件,可以根据自己的需求进行更改。

     1 <domain type='kvm'>  //如果是Xen,则type=‘xen’
     2   <name>vm0</name> //虚拟机名称,同一物理机唯一
     3   <uuid>fd3535db-2558-43e9-b067-314f48211343</uuid>  //同一物理机唯一,可用uuidgen生成
     4   <memory>524288</memory>
     5   <currentMemory>524288</currentMemory>  //memory这两个值最好设成一样
     6   <vcpu>2</vcpu>            //虚拟机可使用的cpu个数,查看物理机可用CPU个数:cat /proc/cpuinfo |grep processor | wc -l 
     7   <os>
     8    <type arch='x86_64' machine='pc-i440fx-vivid'>hvm</type> //arch指出系统架构类型,machine 则是机器类型,查看机器类型:qemu-system-x86_64 -M ?
     9    <boot dev='hd'/>  //启动介质,第一次需要装系统可以选择cdrom光盘启动
    10    <bootmenu enable='yes'/>  //表示启动按F12进入启动菜单
    11   </os>
    12   <features>
    13    <acpi/>  //Advanced Configuration and Power Interface,高级配置与电源接口
    14    <apic/>  //Advanced Programmable Interrupt Controller,高级可编程中断控制器
    15    <pae/>   //Physical Address Extension,物理地址扩展
    16   </features>
    17   <clock offset='localtime'/>  //虚拟机时钟设置,这里表示本地本机时间
    18   <on_poweroff>destroy</on_poweroff>  //突发事件动作
    19   <on_reboot>restart</on_reboot>
    20   <on_crash>restart</on_crash>
    21   <devices>   //设备配置
    22    <emulator>/usr/bin/kvm</emulator> //如果是Xen则是/usr/lib/xen/binqemu-dm
    23    <disk type='file' device='disk'> //硬盘
    24       <driver name='qemu' type='raw'/>
    25       <source file='/opt/vm/vmdev/fdisk.img'/>
    26       <target dev='vda' bus='virtio'/>
    27       <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/> //域、总线、槽、功能号,slot值同一虚拟机上唯一
    28    </disk>
    29    <disk type='file' device='disk'>  
    30       <driver name='qemu' type='raw'/> 
    31       <source file='/opt/vm/vmdev/fdisk2.img'/>
    32       <target dev='vdb' bus='virtio'/>  
    33    </disk>
    34    <disk type='file' device='cdrom'>//光盘
    35       <driver name='qemu' type='raw'/>
    36       <source file='/opt/vm/vmiso/ubuntu-15.10-server-amd64.iso'/>
    37       <target dev='hdc' bus='ide'/>
    38       <readonly/>
    39    </disk>
    40 
    41    /* 利用Linux网桥连接网络 */
    42    <interface type='bridge'>   
    43       <mac address='fa:92:01:33:d4:fa'/> 
    44       <source bridge='br100'/>  //配置的网桥网卡名称
    45       <target dev='vnet0'/>     //同一网桥下相同
    46       <alias name='net0'/>      //别名,同一网桥下相同
    47       <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>  //注意slot值唯一
    48    </interface>
    49 
    50    /* 利用ovs网桥连接网络 */
    51    <interface type='bridge'>  
    52       <source bridge='br-ovs0'/>  
    53       <virtualport type='openvswitch'/>
    54       <target dev='tap0'/>     
    55       <model type='virtio'/>  
    56    </interface>
    57 
    58     /* 配置成pci直通虚拟机连接网络,SR-IOV网卡的VF场景 */
    59    <hostdev mode='subsystem' type='pci' managed='yes'>
    60      <source>
    61        <address domain='0x0000' bus='0x03' slot='0x00' function='0x0'/>
    62      </source>
    63    </hostdev>
    64 
    65    /* 利用vhostuser连接ovs端口 */
    66    <interface type='vhostuser'>   
    67       <mac address='fa:92:01:33:d4:fa'/> 
    68       <source type='unix' path='/var/run/vhost-user/tap0' mode='client'/>  
    69       <model type='virtio'/>     
    70       <driver vringbuf='2048'/>     
    71       <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>  
    72    </interface>
    73 
    74    <interface type='network'>   //基于虚拟局域网的网络
    75      <mac address='52:54:4a:e1:1c:84'/>  //可用命令生成,见下面的补充
    76      <source network='default'/> //默认
    77      <target dev='vnet1'/>  //同一虚拟局域网的值相同
    78      <alias name='net1'/>
    79      <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>  //注意slot值
    80    </interface>
    81   <graphics type='vnc' port='5900' autoport='yes' listen='0.0.0.0' keymap='en-us'/>  //配置vnc,windows下可以使用vncviewer登录,获取vnc端口号:virsh vncdisplay vm0
    82    <listen type='address' address='0.0.0.0'/>
    83   </graphics>
    84   </devices>
    85 </domain>

    启动虚拟机

      

    1 virsh create filename.xml 

    建立OVS网桥

      

    [root@localhost ~]#ovs-vsctl add-br br0

    将网卡加入网桥

      

    [root@localhost ~]#ovs-vsctl add-port  br0 eth0 

      注:当eth0挂在网桥上时,之前分配给eth0的所有IP地址都将消失,所以需要重新配置IP地址。

    为虚拟机建立access端口并打上tag标记

      

    [root@localhost ~]#ovs-vsctl add-port  tap0
    
    [root@localhost ~]#ovs-vsctl add-port  tap1

    此时两台host都经过上面的配置流程后是可以互相ping通的。

    为了隔离VM之间的流量我们需要tag标记,相同的标记之间可以互相通信。

    [root@localhost ~]#ovs-vsctl set port  tap0  tag=100
    
    [root@localhost ~]#ovs-vsctl set port  tap1  tag=200

    也可以这样:

    [root@localhost ~]#ovs-vsctl add-port br0 tap0 tag=100

    使用VNC运行虚拟机&进行配置IP

    在为vm1 vm2配置IP

    ifconfig  eth0(网卡名) ip (同一子网的ip地址

    host2上进行相同配置即可。

    最后

      可以按照自己的喜好进行tag标记,最后的结果就是相同tag可以通信,不同tag不能通信。

  • 相关阅读:
    第39周星期日中秋节杂记
    php array_multisort
    php统计近一周和近30天的用户数据
    什么是CGI、FastCGI、PHPCGI、PHPFPM、SpawnFCGI?
    PHP array_multisort()函数超详细理解
    微博第三方登陆请求授权出现错误码:21322(重定向地址不匹配)的解决方法
    艾伟_转载:C# 反射技术应用 狼人:
    艾伟_转载:HttpApplication的认识与加深理解 狼人:
    艾伟_转载:C# .NET学习经验总结 狼人:
    艾伟_转载:C# 委托的同步调用和异步调用 狼人:
  • 原文地址:https://www.cnblogs.com/sometingintheway/p/9449368.html
Copyright © 2020-2023  润新知