目录

一、实验

1.CentOS 7 安装 OpenVSwitch(构建RPM安装包)

2.KVM虚拟机通过OVS端口组实现网络连接

二、问题

1.安装openvswitch-2.5.10报错

2.virt-install未找到命令

3.如何删除自定义网络

4.开机如何自动启动自定义网络


一、实验

1.CentOS 7 安装 OpenVSwitch(构建RPM安装包)

(1)关闭Selinux或设置为Permissive

①查看配置文件的命令 cat /etc/selinux/config 来查看状态

cat /etc/selinux/config

centos8 配置kvm虚拟机 端口映射 虚拟机端口组_ci

发现SELinux共有3个状态enforcing (执行中)、permissive (不执行但产生警告)、disabled(关闭)。

②也可以用这个命令检查:getenforce

getenforce

centos8 配置kvm虚拟机 端口映射 虚拟机端口组_云计算_02

③也可以用下述命令;如果SELinux status参数为enabled即为开启状态

/usr/sbin/sestatus -v

centos8 配置kvm虚拟机 端口映射 虚拟机端口组_运维_03

④临时关闭(重启机器后失效)

#setenforce 0设置为permissive模式;setenforce 1 设置为enforcing模式;
setenforce 0

centos8 配置kvm虚拟机 端口映射 虚拟机端口组_架构_04

⑤永久关闭(需要重启机器)

#重启机器即可
sed -i s#SELINUX=enforcing#SELINUX=disabled# /etc/selinux/config

centos8 配置kvm虚拟机 端口映射 虚拟机端口组_架构_05

(2)安装依赖包

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软件包到本地

官网下载:

Download (openvswitch.org)

wget https://www.openvswitch.org/releases/openvswitch-2.5.10.tar.gz

(4)预处理

mkdir -p ~/rpmbuild/SOURCES

cp openvswitch-2.5.10.tar.gz ~/rpmbuild/SOURCES/

cd ~/rpmbuild/SOURCES
tar -zxvf openvswitch-2.5.10.tar.gz

centos8 配置kvm虚拟机 端口映射 虚拟机端口组_云计算_06

centos8 配置kvm虚拟机 端口映射 虚拟机端口组_运维_07

centos8 配置kvm虚拟机 端口映射 虚拟机端口组_云计算_08

(6)构建RPM包

cd ~/rpmbuild/SOURCES
rpmbuild -bb --nocheck openvswitch-2.5.10/rhel/openvswitch-fedora.spec

centos8 配置kvm虚拟机 端口映射 虚拟机端口组_云计算_09

(7)安装

yum -y localinstall ~/rpmbuild/RPMS/x86_64/openvswitch-2.5.10-1.el7.centos.x86_64.rpm

centos8 配置kvm虚拟机 端口映射 虚拟机端口组_云计算_10

(8)查看OVS工具版本状态

ovs-vsctl -V

centos8 配置kvm虚拟机 端口映射 虚拟机端口组_架构_11

(9)手动创建目录

mkdir /var/run/openvswitch

centos8 配置kvm虚拟机 端口映射 虚拟机端口组_ci_12

(10)开启Open VSwitch服务并设置开机自启动

systemctl enable openvswitch
systemctl start openvswitch

centos8 配置kvm虚拟机 端口映射 虚拟机端口组_运维_13

(11)检查服务是否启动

systemctl is-active openvswitch

centos8 配置kvm虚拟机 端口映射 虚拟机端口组_ci_14

2.KVM虚拟机通过OVS端口组实现网络连接

(1)查看KVM存储磁盘文件

# cd  /var/lib/libvirt/images/
# ls

centos8 配置kvm虚拟机 端口映射 虚拟机端口组_ci_15

如果没有需要创建:

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网络配置文件

# cd /etc/libvirt/qemu/networks/
# ls

(3)启动管理,查看当前虚拟机状况

# virt-manager

centos8 配置kvm虚拟机 端口映射 虚拟机端口组_ci_16

centos8 配置kvm虚拟机 端口映射 虚拟机端口组_架构_17

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

# virsh destroy vm01

centos8 配置kvm虚拟机 端口映射 虚拟机端口组_ci_18

centos8 配置kvm虚拟机 端口映射 虚拟机端口组_架构_19

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

# virsh undefine vm01

centos8 配置kvm虚拟机 端口映射 虚拟机端口组_架构_20

centos8 配置kvm虚拟机 端口映射 虚拟机端口组_运维_21

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

# virsh destroy vm02

centos8 配置kvm虚拟机 端口映射 虚拟机端口组_云计算_22

centos8 配置kvm虚拟机 端口映射 虚拟机端口组_云计算_23

(7)删除vm02,查看当前虚拟机状况

# virsh undefine vm01

centos8 配置kvm虚拟机 端口映射 虚拟机端口组_云计算_24

centos8 配置kvm虚拟机 端口映射 虚拟机端口组_云计算_25

(8) 声明网络OVS端口组配置文件

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

centos8 配置kvm虚拟机 端口映射 虚拟机端口组_运维_26

(5)查看配置文件

centos8 配置kvm虚拟机 端口映射 虚拟机端口组_运维_27

centos8 配置kvm虚拟机 端口映射 虚拟机端口组_ci_28

(6) 定义并启动网络

# virsh net-define /etc/libvirt/qemu/networks/ovs01_network.xml

# virsh net-start ovs01_network

# virsh net-autostart ovs01_network

centos8 配置kvm虚拟机 端口映射 虚拟机端口组_linux_29

(7)列出当前虚拟化中定义的网络

# virsh net-list

centos8 配置kvm虚拟机 端口映射 虚拟机端口组_架构_30

(8)上传镜像:TinyCore-11.0.iso 

centos8 配置kvm虚拟机 端口映射 虚拟机端口组_云计算_31

(9)创建

(9)创建OVS 虚拟交换机

# ovs-vsctl add-br ovs01
# ovs-vsctl show

centos8 配置kvm虚拟机 端口映射 虚拟机端口组_运维_32

(10)创建vm01

#创建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

centos8 配置kvm虚拟机 端口映射 虚拟机端口组_架构_33

(11)查看OVS 虚拟交换机

# ovs-vsctl show

centos8 配置kvm虚拟机 端口映射 虚拟机端口组_运维_34

centos8 配置kvm虚拟机 端口映射 虚拟机端口组_架构_35

(12)创建vm02

#创建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

centos8 配置kvm虚拟机 端口映射 虚拟机端口组_ci_36

centos8 配置kvm虚拟机 端口映射 虚拟机端口组_ci_37

(13)查看OVS 虚拟交换机

# ovs-vsctl show

centos8 配置kvm虚拟机 端口映射 虚拟机端口组_云计算_38

(14)查看虚拟机vm01

# 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>
……

centos8 配置kvm虚拟机 端口映射 虚拟机端口组_linux_39

centos8 配置kvm虚拟机 端口映射 虚拟机端口组_linux_40

(15) 查看虚拟机vm02

# 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>
……

centos8 配置kvm虚拟机 端口映射 虚拟机端口组_运维_41

centos8 配置kvm虚拟机 端口映射 虚拟机端口组_linux_42

(16)手动给端口if01添加10网段并查看

# ovs-vsctl set port if01 tag=10
# ovs-vsctl show

centos8 配置kvm虚拟机 端口映射 虚拟机端口组_ci_43

(17) 修改vm02添加20段网络

# 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>
……

centos8 配置kvm虚拟机 端口映射 虚拟机端口组_ci_44

centos8 配置kvm虚拟机 端口映射 虚拟机端口组_ci_45

(18)强制关机vm02并查看

# virsh destroy vm02


# ovs-vsctl show

centos8 配置kvm虚拟机 端口映射 虚拟机端口组_ci_46

(19)启动虚拟机vm02并查看,网段20自动添加

# virsh start vm02

# ovs-vsctl show

centos8 配置kvm虚拟机 端口映射 虚拟机端口组_linux_47

(20)强制关机vm01并查看

# virsh destroy vm01


# ovs-vsctl show

centos8 配置kvm虚拟机 端口映射 虚拟机端口组_ci_48

(21)启动虚拟机vm01并查看,网段10没有自动添加,恢复为0网段,说明手动给端口添加网段在关机重启后会失效

# virsh start vm01

# ovs-vsctl show

centos8 配置kvm虚拟机 端口映射 虚拟机端口组_ci_49

(22)修改vm01添加10段网络

# 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>
……

centos8 配置kvm虚拟机 端口映射 虚拟机端口组_ci_50

(23)强制关机vm01并查看

# virsh destroy vm01


# ovs-vsctl show

centos8 配置kvm虚拟机 端口映射 虚拟机端口组_架构_51

(24)启动虚拟机vm01并查看,网段10自动添加

# virsh start vm01

# ovs-vsctl show

centos8 配置kvm虚拟机 端口映射 虚拟机端口组_ci_52

二、问题

1.安装openvswitch-2.5.10报错

(1)报错

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)原因分析

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。

安装依赖包:

rpmbuild -bb --without check ~/rpmbuild/SOURCES/openvswitch-2.12.0/rhel/openvswitch_no_kmod.spec

安装:

yum -y localinstall ~/rpmbuild/RPMS/x86_64/openvswitch-2.12.0-1.x86_64.rpm

systemctl enable openvswitch
systemctl start openvswitch

检查服务是否启动:

systemctl is-active openvswitch

在已经安装低版本OVS后,如2.5.10。
可以直接安装高版本如2.12.0
安装完成需重启OpenVSwitch后 OVS服务替换为2.12.0 版本

systemctl restart openvswitch

原数据都会得到保留。

OVS 卸载:

卸载前保证 OVS上设置的网桥全部删除。

可直接使用命令 卸载。使用ssh连接,最好保证卸载OVS后ssh 还能连上,不然网络会中途断掉,连接失败,卸载也会终止。

yum -y remove openvswitch

2.virt-install未找到命令

(1)报错

centos8 配置kvm虚拟机 端口映射 虚拟机端口组_运维_53

(2)原因分析

软件未安装

(3)解决方法

安装软件。

yum install libguestfs-tools

yum install virt-install.noarch

centos8 配置kvm虚拟机 端口映射 虚拟机端口组_运维_54

centos8 配置kvm虚拟机 端口映射 虚拟机端口组_云计算_55

3.如何删除自定义网络

(1)取消定义

# virsh net-undefine ovs01

centos8 配置kvm虚拟机 端口映射 虚拟机端口组_linux_56

(2)删除

# virsh net-destroy ovs01

centos8 配置kvm虚拟机 端口映射 虚拟机端口组_云计算_57

4.开机如何自动启动自定义网络

(1)自定义网络

echo "
  <network>
    <name>ovs01</name>
    <uuid></uuid>
    <forward mode='bridge' />
    <bridge name='ovs01' />
    <virtualport type='openvswitch' />
  </network>
  " > /etc/libvirt/qemu/networks/ovs01.xml

(2)开启网络自动启动

# virsh net-define /etc/libvirt/qemu/networks/ovs01.xml

# virsh net-start /etc/libvirt/qemu/networks/ovs01.xml

# virsh net-list

# cd /autostart/
# virsh net-autostart ovs01