虚拟化逻辑架构:KVM虚拟机通过OVS端口组实现网络连接

目录

一、实验

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

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

二、问题

1.安装openvswitch-2.5.10报错

2.virt-install未找到命令

3.如何删除自定义网络


一、实验

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

(1)关闭Selinux或设置为Permissive

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

bash 复制代码
cat /etc/selinux/config 

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

官网下载:

Download (openvswitch.org)

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)创建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 openvswitch

2.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
相关推荐
高松燈3 小时前
若伊项目学习 后端分页源码分析
后端·架构
容器魔方4 小时前
Volcano v1.12 正式发布!驱动云原生AI与批量计算向智能高效新阶段演进
云原生·容器·云计算
维基框架5 小时前
Spring Boot 项目整合Spring Security 进行身份验证
java·架构
Johny_Zhao5 小时前
CentOS Stream 8 高可用 Kuboard 部署方案
linux·网络·python·网络安全·docker·信息安全·kubernetes·云计算·shell·yum源·系统运维·kuboard
水泥工boss6 小时前
🚀微前端与模块联邦的深度结合(基于vue+vite)
前端·架构
哲讯智能科技7 小时前
苏州SAP代理商:哲讯科技助力企业数字化转型
大数据·运维·人工智能
十五年专注C++开发7 小时前
Qt .pro配置gcc相关命令(三):-W1、-L、-rpath和-rpath-link
linux·运维·c++·qt·cmake·跨平台编译
zfj3217 小时前
什么时候使用微服务,什么时候不用
微服务·架构
qq_628515768 小时前
Centos与RockLinux设置静态ip
linux·运维·centos
程序员老乔8 小时前
【Dify系列】【一】【安装与部署】【ubuntu22.04安装docker部署dify1.4.2】
运维·docker·容器