前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >KVM+OpenvSwitch虚拟交换机

KVM+OpenvSwitch虚拟交换机

作者头像
Kevin song
发布2023-12-12 17:18:06
5350
发布2023-12-12 17:18:06
举报

虚拟机网络

为了使虚拟机与外部进行网络通信,需要为虚拟机配置网络环境。KVM虚拟化支持Linux网桥、Open vSwitch网桥等多种类型的网桥。如图所示,数据传输路径为"虚拟机 -> 虚拟网卡设备 -> Linux网桥或Open vSwitch网桥 -> 物理网卡"。

虚拟网络结构图

Open vSwitch虚拟交换机

Open vSwitch(OVS)是一个开源的多层虚拟交换机,用于连接虚拟机(VMs)和物理网络。在虚拟化环境中起到关键作用,允许管理员在数据中心网络中创建、配置和管理虚拟网络。OVS 可以在多种虚拟化平台上运行,包括常见的虚拟化技术如 KVM、Xen、VMware 和 Hyper-V 等。

Open vSwitch软件定义的网络 (SDN) 解决方案提供了高度灵活性和可编程性,使管理员能够通过 OpenFlow 协议对网络流量进行动态控制。支持多种功能,包括 VLAN、GRE、VXLAN、QoS、流量镜像和流表编辑等,使网络管理员能够根据需要对网络进行自定义配置。Open vSwitch 还支持一些高级功能,如端口镜像、流量过滤和负载均衡等,使其成为了一个功能强大且灵活的网络交换机解决方案。

Open vSwitch核心概念

  • Bridge :网桥,对应一个以太网交换机(Switch),一个主机中可以创建一个或者多个 Bridge 设备。
  • Port :Port 与物理交换机的端口概念类似, 每个 Port 都属于一个特定的 Bridge 。端口类型:Normal、Internal、Patch、Tunnel。
  • Interface:接口,对应网卡,即可以是 ovs 生成的虚拟网卡,也可能是挂载在 ovs 的物理网卡。在通常情况下,Port 和 Interface 是一对一的关系, 只有在配置 Port 为 bond 模式后,Port 和 Interface 是一对多的关系。

一、安装Open vSwitch组件

安装Open vSwitch组件

代码语言:javascript
复制
dnf  install openvswitch

启动Open vSwitch服务

代码语言:javascript
复制
systemctl start openvswitch

二、验证Open vSwitch组件

查询openvswitch相关信息

代码语言:javascript
复制
rpm -qi openvswitch

查询Open vSwitch版本

代码语言:javascript
复制
rpm -qa openvswitch
openvswitch-2.12.4-5.oe2203sp1.x86_64

查看Open vSwitch服务状态

代码语言:javascript
复制
systemctl status openvswitch

三、搭建Open vSwitch网桥

创建Open vSwitch网桥br0

代码语言:javascript
复制
ovs-vsctl add-br ovs-br0

将物理网卡eth0添加网桥br0

代码语言:javascript
复制
ovs-vsctl add-port ovs-br0 ens192

查看ovsdb配置内容

sudo ovs-vsctl show

代码语言:javascript
复制
7f998583-4004-4114-8816-427f7ddba69a
    Bridge "ovs-br0"
        Port "ovs-br0"
            Interface "ovs-br0"
                type: internal
        Port "ens192"
            Interface "ens192"
    ovs_version: "2.12.4"

方式一:命令配置(临时生效)

代码语言:javascript
复制
ip addr flush dev ens192
ip addr add 192.168.100.234/24 dev ovs-br0
ip link set dev ovs-br0 up
ip route add default via 192.168.100.1

方式二:网卡配置文件(永久生效)

OVS网桥ovs-br0

代码语言:javascript
复制
cat > /etc/sysconfig/network-scripts/ifcfg-ovs-br0 <<EOF
TYPE=OVSBridge
BOOTPROTO=none
NAME=ovs-br0
DEVICE=ovs-br0
DEVICETYPE=ovs
ONBOOT=yes
NM_CONTROLLED=no
IPADDR=192.168.100.234
NETMASK=255.255.255.0
GATEWAY=192.168.100.1
DNS1=114.114.114.114
EOF

物理网卡

代码语言:javascript
复制
cat > /etc/sysconfig/network-scripts/ifcfg-ens192 <<EOF
TYPE=OVSPort
NAME=ens192
DEVICE=ens192
ONBOOT=yes
OVS_BRIDGE=ovs-br0
DEVICETYPE=ovs
EOF

重启网卡

代码语言:javascript
复制
systemctl  restart  network

注意:OVS类型网桥不支持NetworkManager管理,nmcli内部使用device和connection的类型匹配判断,所有当前ovs-bridge的配置 NetworkManager暂不支持,需要使用network-scripts管理,在OVS网桥配置文件中使用"NM_CONTROLLED=no"参数指定不使用 NetworkManager管理。

安装network-scripts

代码语言:javascript
复制
dnf   install  network-scripts

ovs-vsctl常用命令

  • show: 查看ovsdb配置内容;
  • add-br NAME: 添加桥设备;
  • list-br: 显示所有已定义的BRIDGE;
  • del-br BRIDGE: 删除
  • add-port BRIDGE PORT: 将PORT添加至指定的桥;
  • del-port [BRIDGE] PORT: 从指定BRIDGE移除指定的PORT;
  • list-ports BRIDGE: 显示指定BRIDEG上已添加的所有端口;
  • list TBL [REC]: 列出某个表(如Interface,port)的信息;
  • ovs-vsctl find Port name=”NAME”: 查找名称为NAME的Port信息;

方式一:创建虚拟机,指定openvswitch虚拟交换机网桥

virt-install --name openeuler22.03-temp --memory 1024,maxmemory=2048 --vcpus 1,maxvcpus=5 --disk /data/openeuler22.03-temp.qcow2,format=qcow2,bus=virtio --boot=hd --import --network bridge=ovs-br0,virtualport_type=openvswitch,model=virtio --boot loader=/usr/share/edk2/ovmf/OVMF.fd --graphics vnc,password='123@123',listen=0.0.0.0 --accelerate --noautoconsole --video=cirrus

方式二:编辑XML文件,指定openvswitch虚拟交换机网桥

virsh edit

代码语言:javascript
复制
<interface type='bridge'>
      <source bridge='ovs-br0'/>
      <virtualport type='openvswitch'>
      </virtualport>
      <model type='virtio'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
    </interface>

查询虚拟机网卡列表信息

virsh domiflist openeuler22.03-temp

代码语言:javascript
复制
 Interface   Type     Source    Model    MAC
------------------------------------------------------------
 vnet0       bridge   ovs-br0   virtio   52:54:00:d5:67:2b

查看mac地址对应IP

代码语言:javascript
复制
arp -a |grep 52:54:00:d5:67:2b
? (192.168.100.92) at 52:54:00:d5:67:2b [ether] on ovs-br0
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2023-12-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 开源搬运工宋师傅 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
负载均衡
负载均衡(Cloud Load Balancer,CLB)提供安全快捷的流量分发服务,访问流量经由 CLB 可以自动分配到云中的多台后端服务器上,扩展系统的服务能力并消除单点故障。负载均衡支持亿级连接和千万级并发,可轻松应对大流量访问,满足业务需求。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档