目录
[1.CentOS 7 安装 OpenVSwitch(构建RPM安装包)](#1.CentOS 7 安装 OpenVSwitch(构建RPM安装包))
一、实验
1.CentOS 7 安装 OpenVSwitch(构建RPM安装包)
(1)关闭Selinux或设置为Permissive
①查看配置文件的命令 cat /etc/selinux/config 来查看状态
            
            
              bash
              
              
            
          
          cat /etc/selinux/config  发现SELinux共有3个状态enforcing (执行中)、permissive (不执行但产生警告)、disabled(关闭)。
发现SELinux共有3个状态enforcing (执行中)、permissive (不执行但产生警告)、disabled(关闭)。
②也可以用这个命令检查:getenforce
            
            
              bash
              
              
            
          
          getenforce
③也可以用下述命令;如果SELinux status参数为enabled即为开启状态
            
            
              bash
              
              
            
          
          /usr/sbin/sestatus -v
④临时关闭(重启机器后失效)
            
            
              bash
              
              
            
          
          #setenforce 0设置为permissive模式;setenforce 1 设置为enforcing模式;
setenforce 0   
⑤永久关闭(需要重启机器)
            
            
              bash
              
              
            
          
          #重启机器即可
sed -i s#SELINUX=enforcing#SELINUX=disabled# /etc/selinux/config
(2)安装依赖包
            
            
              bash
              
              
            
          
          yum -y install wget openssl-devel gcc make python-devel openssl-devel kernel-devel graphviz kernel-debug-devel autoconf automake rpm-build redhat-rpm-config libtool python-twisted-core python-zope-interface PyQt4 desktop-file-utils libcap-ng-devel groff checkpolicy selinux-policy-devel(3)下载OpenVSwitch软件包到本地
官网下载:
            
            
              bash
              
              
            
          
          wget https://www.openvswitch.org/releases/openvswitch-2.5.10.tar.gz(4)预处理
            
            
              bash
              
              
            
          
          mkdir -p ~/rpmbuild/SOURCES
cp openvswitch-2.5.10.tar.gz ~/rpmbuild/SOURCES/
cd ~/rpmbuild/SOURCES
tar -zxvf openvswitch-2.5.10.tar.gz


(6)构建RPM包
            
            
              bash
              
              
            
          
          cd ~/rpmbuild/SOURCES
rpmbuild -bb --nocheck openvswitch-2.5.10/rhel/openvswitch-fedora.spec
(7)安装
            
            
              bash
              
              
            
          
          yum -y localinstall ~/rpmbuild/RPMS/x86_64/openvswitch-2.5.10-1.el7.centos.x86_64.rpm 
(8)查看OVS工具版本状态
            
            
              bash
              
              
            
          
          ovs-vsctl -V
(9)手动创建目录
            
            
              bash
              
              
            
          
          mkdir /var/run/openvswitch
(10)开启Open VSwitch服务并设置开机自启动
            
            
              bash
              
              
            
          
          systemctl enable openvswitch
systemctl start openvswitch
(11)检查服务是否启动
            
            
              bash
              
              
            
          
          systemctl is-active openvswitch
2.KVM虚拟机通过OVS端口组实现网络连接
(1)查看KVM存储磁盘文件
            
            
              bash
              
              
            
          
          # cd  /var/lib/libvirt/images/
# ls
如果没有需要创建:
            
            
              bash
              
              
            
          
          qemu-img create -f qcow2  /var/lib/libvirt/images/vm01.qcow2 10G
qemu-img create -f qcow2  /var/lib/libvirt/images/vm02.qcow2 10G(2)查看KVM网络配置文件
            
            
              bash
              
              
            
          
          # cd /etc/libvirt/qemu/networks/
# ls(3)启动管理,查看当前虚拟机状况
            
            
              bash
              
              
            
          
          # virt-manager

(4)强制关闭vm01,查看当前虚拟机状况
            
            
              bash
              
              
            
          
          # virsh destroy vm01

(5)删除vm01,查看当前虚拟机状况
            
            
              bash
              
              
            
          
          # virsh undefine vm01

(6)强制关闭vm02,查看当前虚拟机状况
            
            
              bash
              
              
            
          
          # virsh destroy vm02

(7)删除vm02,查看当前虚拟机状况
            
            
              bash
              
              
            
          
          # virsh undefine vm01

(8) 声明网络OVS端口组配置文件
            
            
              bash
              
              
            
          
          echo "
  <network>
    <name>ovs01_network</name>
    <forward mode='bridge'/>
    <bridge name='ovs01'/>
    <virtualport type='openvswitch' />
    <portgroup name='default_vlan' default='yes'>
      <vlan>
        <tag id='0'/>
      </vlan>
    </portgroup>
    <portgroup name='vlan10'>
      <vlan>
        <tag id='10'/>
      </vlan>
    </portgroup>
    <portgroup name='vlan20'>
      <vlan>
        <tag id='20'/>
      </vlan>
    </portgroup>
  </network>
  " >> /etc/libvirt/qemu/networks/ovs01_network.xml
(5)查看配置文件

(6) 定义并启动网络
            
            
              bash
              
              
            
          
          # virsh net-define /etc/libvirt/qemu/networks/ovs01_network.xml
# virsh net-start ovs01_network
# virsh net-autostart ovs01_network
(7)列出当前虚拟化中定义的网络
            
            
              bash
              
              
            
          
          # virsh net-list
(8)上传镜像:TinyCore-11.0.iso
 (9)创建
(9)创建
(9)创建OVS 虚拟交换机
            
            
              bash
              
              
            
          
          # ovs-vsctl add-br ovs01
# ovs-vsctl show
(10)创建vm01
            
            
              bash
              
              
            
          
          #创建VM01
virt-install \
--name=vm01 \
--cdrom=/var/lib/libvirt/images/TinyCore-11.0.iso \
--os-type=linux \
--os-variant=fedora18 \
--cpu host \
--vcpus 2,maxvcpus=4 \
--memory 512 \
--disk=/var/lib/libvirt/images/vm01.qcow2 \
--network network=ovs01_network,target=if01,mac=02:01:01:01:01:01
(11)查看OVS 虚拟交换机
            
            
              bash
              
              
            
          
          # ovs-vsctl show

(12)创建vm02
            
            
              bash
              
              
            
          
          #创建VM02
virt-install \
--name=vm02 \
--cdrom=/var/lib/libvirt/images/TinyCore-11.0.iso \
--os-type=linux \
--os-variant=fedora18 \
--cpu host \
--vcpus 2,maxvcpus=4 \
--memory 512 \
--disk=/var/lib/libvirt/images/vm02.qcow2 \
--network network=ovs01_network,target=if02,mac=02:01:01:01:01:02

(13)查看OVS 虚拟交换机
            
            
              bash
              
              
            
          
          # ovs-vsctl show
(14)查看虚拟机vm01
            
            
              bash
              
              
            
          
          # virsh edit vm01
......
 <interface type='network'>
      <mac address='02:01:01:01:01:01'/>
      <source network='ovs01_network'/>
      <target dev='if01'/>
      <model type='virtio'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
 </interface>
......

(15) 查看虚拟机vm02
            
            
              bash
              
              
            
          
          # virsh edit vm01
......
 <interface type='network'>
      <mac address='02:01:01:01:01:02'/>
      <source network='ovs01_network'/>
      <target dev='if02'/>
      <model type='virtio'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
 </interface>
......

(16)手动给端口if01添加10网段并查看
            
            
              bash
              
              
            
          
          # ovs-vsctl set port if01 tag=10
# ovs-vsctl show
(17) 修改vm02添加20段网络
            
            
              bash
              
              
            
          
          # virsh edit vm02
......
  <interface type='network'>
      <mac address='02:01:01:01:01:02'/>
      <source network='ovs01_network' portgroup='vlan20'/>
      <target dev='if02'/>
      <model type='virtio'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
   </interface>
......

(18)强制关机vm02并查看
            
            
              bash
              
              
            
          
          # virsh destroy vm02
# ovs-vsctl show
(19)启动虚拟机vm02并查看,网段20自动添加
            
            
              bash
              
              
            
          
          # virsh start vm02
# ovs-vsctl show
(20)强制关机vm01并查看
            
            
              bash
              
              
            
          
          # virsh destroy vm01
# ovs-vsctl show
(21)启动虚拟机vm01并查看,网段10没有自动添加,恢复为0网段,说明手动给端口添加网段在关机重启后会失效
            
            
              bash
              
              
            
          
          # virsh start vm01
# ovs-vsctl show
(22)修改vm01添加10段网络
            
            
              bash
              
              
            
          
          # virsh edit vm01
......
 <interface type='network'>
      <mac address='02:01:01:01:01:01'/>
      <source network='ovs01_network' portgroup='vlan10'/>
      <target dev='if01'/>
      <model type='virtio'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
 </interface>
......
(23)强制关机vm01并查看
            
            
              bash
              
              
            
          
          # virsh destroy vm01
# ovs-vsctl show
(24)启动虚拟机vm01并查看,网段10自动添加
            
            
              bash
              
              
            
          
          # virsh start vm01
# ovs-vsctl show
二、问题
1.安装openvswitch-2.5.10报错
(1)报错
            
            
              bash
              
              
            
          
          In file included from lib/netlink-conntrack.c:26:0:
/usr/include/linux/netfilter/nf_conntrack_sctp.h:25:2: error: unknown type name 'u8'
  u8 last_dir;
  ^
/usr/include/linux/netfilter/nf_conntrack_sctp.h:26:2: error: unknown type name 'u8'
  u8 flags;
  ^(2)原因分析
            
            
              bash
              
              
            
          
          CentOS7内核升级到kernel-3.10.0-1160.2.2.el7.x86_64后,OVS2.5.10构建RPM安装包时可能会出错。
linux内核版本kernel-3.10.0-1127.19.1.el7.x86_64 成功构建
linux内核版本kernel-3.10.0-1160.2.2.el7.x86_64 构建失败 报错(3)解决方法
安装较新的OVS版本 如2.12.0。
安装依赖包:
            
            
              bash
              
              
            
          
          rpmbuild -bb --without check ~/rpmbuild/SOURCES/openvswitch-2.12.0/rhel/openvswitch_no_kmod.spec安装:
            
            
              bash
              
              
            
          
          yum -y localinstall ~/rpmbuild/RPMS/x86_64/openvswitch-2.12.0-1.x86_64.rpm
systemctl enable openvswitch
systemctl start openvswitch检查服务是否启动:
            
            
              bash
              
              
            
          
          systemctl is-active openvswitch在已经安装低版本OVS后,如2.5.10。
可以直接安装高版本如2.12.0
安装完成需重启OpenVSwitch后 OVS服务替换为2.12.0 版本
            
            
              bash
              
              
            
          
          systemctl restart openvswitch原数据都会得到保留。
OVS 卸载:
卸载前保证 OVS上设置的网桥全部删除。
可直接使用命令 卸载。使用ssh连接,最好保证卸载OVS后ssh 还能连上,不然网络会中途断掉,连接失败,卸载也会终止。
            
            
              bash
              
              
            
          
          yum -y remove openvswitch2.virt-install未找到命令
(1)报错

(2)原因分析
软件未安装
(3)解决方法
安装软件。
            
            
              bash
              
              
            
          
          yum install libguestfs-tools
yum install virt-install.noarch

3.如何删除自定义网络
(1)取消定义
            
            
              bash
              
              
            
          
          # virsh net-undefine ovs01
(2)删除
            
            
              bash
              
              
            
          
          # virsh net-destroy ovs01
