设为首页 收藏本站
查看: 1282|回复: 0

[经验分享] 网络----虚拟交换机---open vswitch

[复制链接]
YunVN网友  发表于 2019-1-27 12:33:48 |阅读模式
  网络----虚拟交换机---open vswitch
  虚拟交换机:来模拟物理交换机的作用。软件实现
  目前业界应用比较广泛的vSwitch,
  开源的有Open vSwitch
  商用的有VMware的VSS(vSphere Standard vSwitch,vSphere标准虚拟交换机)和VDS(vSphere Distributed vSwitch,vSphere分布式虚拟交换机)、Cisco的Nexus 1000V、微软的Hyper-V虚拟交换机等。
  这里面主要介绍open vswitch
  vswitch广泛应用在基于IaaS(Infrastructure as a Service,基础架构即服务)的Internet服务中。通过运行在虚拟化平台上的虚拟交换机,为本台物理机上的VM(Virtual Machine,虚拟机)提供二层网络接入和部分三层网络功能。VM(虚拟机)通过vSwitch来连接网络,vSwitch则通过物理主机上的物理网卡作为上行链路与外界网络进行连接,如vSwitch示意图所示: vSwitch示意图vSwitch示意图
  跟物理主机一样,每个VM有自己的虚拟网卡(virtual NIC),每个虚拟网卡有自己的MAC地址和IP地址。ABCDE是vSwitch上的虚拟端口vPort(virtual Port),该虚拟交换机连接虚拟网卡和物理网卡,将虚拟机上的数据报文从物理网卡转发出去,并从物理网卡上接收报文转发给对应的虚拟网卡。根据需要,vSwitch还可以支持安全控制、VLAN、网络监控、端口镜像、QoS、自动化网管等功能。
  每个vSwitch与物理交换机一样,包含一定数量的端口,相同特性的虚拟端口vPort集合就是VLAN(或称端口组),不同VLAN内的报文在传输时是相互隔离的,各VLAN内的用户不能和其它VLAN内的用户直接通信。如果不同VLAN要进行通信,则需要通过路由器、三层交换机等三层设备。
  Open vSwitch是一个高质量的、多层虚拟交换机,使用开源Apache2.0许可协议,由
  Nicira Networks开发,主要实现代码为可移植的C代码。它的目的是让大规模网络自动化可以通过编程扩展,同时仍然支持标准的管理接口和协议(例如NetFlow, sFlow, SPAN, RSPAN, CLI, LACP, 802.1ag)。此外,它被设计位支持跨越多个物理服务器的分布式环境,类似于VMware的vNetwork分布式vswitch或Cisco Nexus 1000 V。Open vSwitch支持多种linux 虚拟化技术,包括Xen/XenServer, KVM和VirtualBox。当前最新代码包主要包括以下模块和特性:
  ovs-vswitchd 主要模块,实现switch的daemon,包括一个支持流交换的Linux内核模块;
  ovsdb-server 轻量级数据库服务器,提供ovs-vswitchd获取配置信息;
  ovs-brcompatd 让ovs-vswitch替换Linuxbridge,包括获取bridge ioctls的Linux内核模块;
  ovs-dpctl 用来配置switch内核模块;
  一些Scripts and specs 辅助OVS安装在Citrix XenServer上,作为默认switch;
  ovs-vsctl 查询和更新ovs-vswitchd的配置;
  ovs-appctl 发送命令消息,运行相关daemon;
  ovsdbmonitor GUI工具,可以远程获取OVS数据库和OpenFlow的流表。
  此外,OVS也提供了支持OpenFlow的特性实现,包括
  ovs-openflowd:一个简单的OpenFlow交换机;
  ovs-controller:一个简单的OpenFlow控制器;
  ovs-ofctl 查询和控制OpenFlow交换机和控制器;
  ovs-pki :OpenFlow交换机创建和管理公钥框架;
  ovs-tcpundump:tcpdump的补丁,解析OpenFlow的消息;
  内核模块实现了多个“数据路径”(类似于网桥),每个都可以有多个“vports”(类似于桥内的端口)。每个数据路径也通过关联一下流表(flow table)来设置操作,而这些流表中的流都是用户空间在报文头和元数据的基础上映射的关键信息,一般的操作都是将数据包转发到另一个vport。当一个数据包到达一个vport,内核模块所做的处理是提取其流的关键信息并在流表中查找这些关键信息。当有一个匹配的流时它执行对应的操作。如果没有匹配,它会将数据包送到用户空间的处理队列中(作为处理的一部分,用户空间可能会设置一个流用于以后碰到相同类型的数据包可以在内核中执行操作)。
  二、open vswitch常用操作
  以下操作都需要root权限运行,在所有命令中br0表示网桥名称,eth0为网卡名称。
  添加网桥:
  1
  #ovs-vsctl add-br br0
  列出open vswitch中的所有网桥:
  1
  #ovs-vsctl list-br
  判断网桥是否存在
  1
  #ovs-vsctl br-exists br0
  将物理网卡挂接到网桥:
  1
  #ovs-vsctl add-port br0 eth0
  列出网桥中的所有端口:
  1
  #ovs-vsctl list-ports br0
  列出所有挂接到网卡的网桥:
  1
  #ovs-vsctl port-to-br eth0
  查看open vswitch的网络状态:
  1
  #ovs-vsctl show
  删除网桥上已经挂接的网口:
  1
  #vs-vsctl del-port br0 eth0
  删除网桥:
  1
  #ovs-vsctl del-br br0
  三、使用open vswitch构建虚拟网络
  1、构建物理机和物理机相互连接的网络
  在安装open vswitch的主机上有两块网卡,分别为eth0、eth1,把这两块网卡挂接到open vswitch的网桥上,然后有两台物理机host1、host2分别连接到eth0和eth1上,实现这两台物理机的通信。构建结果图如下:
  执行以下命令:
  1
  2
  3
  4
  5
  #ovs-vsctl add-br br0 //建立一个名为br0的open vswitch网桥
  #ovs-vsctl add-port br0 eth0 //把eth0挂接到br0中
  #ovs-vsctl add-port br0 eth1 //把eth1挂接到br0中
  2、构建虚拟机与虚拟机相连的网络
  在安装open vswitch的主机上安装两个虚拟机,把两个虚拟机的网卡都挂接在open vswitch的网桥上,实现两台虚拟机的通信,构建结果图如下:
  执行以下命令:
ovs-vsctl add-br br0 //建立一个名为br0的open vswitch网桥
如果使用vbox或virt-manager把bridge设置为br0即可,如果使用cli kvm则先创建两个文件,用于虚拟网卡的添加于删除。假设这两个文件分别为/etc/ovs-ifup和/etc/ovs-ifdown,则向这两个文件中写入以下内容
  /etc/ovs-ifup
  1
  2
  3
  4
  5
  6
  7
  8
  9
  #!/bin/sh
  switch='br0'
  /sbin/ifconfig $1 0.0.0.0 up
ovs-vsctl add-port ${switch} $1
/etc/ovs-ifdown
  1
  2
  3
  4
  5
  6
  7
  8
  9
  #!/bin/sh
  switch='br0'
  /sbin/ifconfig $1 0.0.0.0 down
ovs-vsctl del-port ${switch} $1
  使用以下命令建立虚拟机
  1
  2
  3
  4
  5
  6
  7
  8
  9
  10
  11
  kvm -m 512 -net nic,macaddr=00:11:22:33:44:55-net \
  tap,script=/etc/ovs-ifup,downscript=/etc/ovs-ifdown-drive \
  file=/path/to/disk-image,boot=on
  kvm -m 512 -net nic,macaddr=11:22:33:44:55:66-net \
  tap,script=/etc/ovs-ifup,downscript=/etc/ovs-ifdown-drive \
  file=/path/to/disk-image,boot=on
  3、构建虚拟机与物理机相连的网络
  在装有open vswitch的主机上有一个物理网卡eth0,一台主机通过网线和eth0相连,在open vswitch的主机上还装有一台虚拟机,把此虚拟机和连接到eth0的主机挂接到同一个网桥上,实现两者之间的通信,构建结果图如下:
  执行命令:
  1
  2
  3
  4
  5
  6
  7
  8
  9
ovs-vsctl add-br br0 //建立一个名为br0的open vswitch网桥
ovs-vsctl add-port br0 eth0 //把eth0挂接到br0中
kvm -m 512 -net nic,macaddr=00:11:22:33:44:55-net \
  tap,script=/etc/ovs-ifup,downscript=/etc/ovs-ifdown-drive \
  file=/path/to/disk-image,boot=on    //ovs-ifup和ovs-ifdown和上一节中相同
  4、构建网桥和网桥相连的网络
  以上操作都是将多个主机(物理机或虚拟机)连接到同一个网桥上,实现它们之间的通信,但是要构建复杂的网络,就需要多个网桥,在装有open vswitch的主机上建立两个网桥,实现它们之间的连接,构建结果如下:
  执行命令:
  1
  2
  3
  4
  5
  6
  7
  8
  9
  10
  11
  12
  13
  14
  15
  16
  17
  18
  19
  ovs-vsctl add-br br0    //添加一个名为br0的网桥
  ovs-vsctl add-br br1    //添加一个名为br1的网桥
  ovs-vsctl add-port br0 patch-to-br1    //为br0添加一个虚拟端口
  ovs-vsctl set interface patch-to-br1 type=patch      //把patch-to-br1的类型设置为patch
  ovs-vsctl set interface patch-to-br1 options:peer=patch-to-br0     //把对端网桥和此网桥连接的端口名称设置为patch-to-br0
  ovs-vsctl add-port br1 patch-to-br0    //为br1添加一个虚拟端口
  ovs-vsctl set interface patch-to-br0 type=patch      //把patch-to-br0的类型设置为patch
  ovs-vsctl set interface patch-to-br0 options:peer=patch-to-br1     //把对端网桥和此网桥连接的端口名称设置为patch-to-br1
  ovs-vsctl set interface patch-to-br0type=patch 和ovs-vsctl set interface patch-to-br0 options:peer=patch-to-br1是对ovs-database的操作,有有兴趣的同学可以参考ovs-vswitchd.conf.db.5
  5、在不同的主机之间构建网桥之间的连接
  在两台机器上分别安装上open vswitch并创建网桥,分别为两个网桥添加物理网卡,然后通过网线连接两个网桥,实现两个网桥之间的互通。构建结果图如下:
  执行命令:
host1
  1
  2
  3
  #ovs-vsctl add-br br0             //添加名为br0的网桥
  #ovs-vsctl add-port br0 eth0       //把eth0挂接到br0上
host2
  1
  2
  3
  #ovs-vsctl add-br br0             //添加名为br0的网桥
  #ovs-vsctl add-port br0 eth0       //把eth0挂接到br0上
  然后使用网线把host1的eth0和host2的eth0相连即可。
  使用上边五种方法的组合就可以构建出各种复杂的网络,为各种实验提供网络的支持。


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-668240-1-1.html 上篇帖子: OSPF(Open Shortest Path First开放式最短路径优先) 下篇帖子: 详解 Too many open files
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表