共计 3731 个字符,预计需要花费 10 分钟才能阅读完成。
OVS 简介
Open vSwitch 是什么?
Open vSwitch(以下简称 OVS)是一个用 C 语言开发的多层虚构交换机,应用 Apcahe 2 开源许可证,现如今基本上曾经成为了开源 SDN(软件定义网络)基础设施层的事实标准。
OVS 反对哪些性能?
- 反对 NetFlow、sFlow(R)、IPFIX、SPAN、RSPAN 和 GRE 隧道镜像等多种流量监控协定
- 反对 LACP (IEEE 802.1AX-2008)
- 反对规范 802.1Q VLAN 协定,容许端口配置 trunk 模式
- 反对组播
- 反对 BFD 和 802.1ag 链路监控
- 反对 STP(IEEE 802.1D-1998)和 RSTP(IEEE 802.1D-2004)
- 反对细粒度的 QoS(服务质量)配置
- 反对 HFSC qdisc
- 反对接管每一个虚拟机的流量
- 反对基于源 MAC 的负载平衡、主备模式和 L4 哈希的端口绑带
- 反对 OpenFlow 协定(蕴含了很多对虚拟化的扩大)
- 反对 IPv6
- 反对多种隧道协定(GRE、VXLAN、STT、Geneve 和 IPsec)
- 反对 C 和 Python 的近程配置协定
- 反对内核和用户空间的转发引擎选项
- 具备流缓存引擎的多表转发管道
- 转发层形象以简化向新软件和硬件平台的移植
OVS 的术语解释
Bridge
中文名称 网桥,一个 Bridge 代表一个以太网交换机(Switch),一台主机中能够创立一个或多个 Bridge,Bridge 能够依据肯定的规定,把某一个端口接管到的数据报文转发到另一个或多个端口上,也能够批改或者抛弃数据报文。
Port
中文名称 端口,须要留神的是它和 TCP 外面的端口不是同样的概念,它更像是物理交换机下面的插口,能够接水晶头的那种。Port 隶属于 Bridge,必须先增加了 Bridge 能力在 Bridge 上增加 Port。Port 有以下几种类型:
-
Normal
用户能够把操作系统中已有的网卡增加到 Open vSwicth 上,Open vSwitct 会主动生成一个同名的 Port 开解决这张网卡进和出的数据报文。
不过须要留神的是这种形式增加的 Port 不反对调配 IP 地址,如果之前网卡上配置的有 IP,挂载到 OVS 下面之后将不可拜访。此类型的 Port 罕用于 VLAN 模式的多台物理主机相连的那个口,交换机一端属于 Trunk 模式。
- Internal
当 Port 的类型是 Internal 时,OVS 会主动创立一个虚构网卡(Interface),此端口收到的数据报文都会转发给这块网卡,从这块网卡收回的数据报文也会通过 Port 交给 OVS 解决。当 OVS 创立一个新的网桥时,会主动创立一个与网桥同名的 Internal Port,同时也会创立一个与网桥同名的 Interface,因而能够通过 ip 命令在操作系统中查看到这张虚构网卡,然而状态是 down 的。
- Patch
Patch Port 和 veth pair 性能雷同,总是成双成对的呈现,在其中一端收到的数据报文会被转发到另一个 Patch Port 上,就像是一根网线一样。Patch Port 罕用于连贯两个 Bridge,这样两个网桥就和一个网桥一样了。
- Tunnel
OVS 反对 GRE、VXLAN、STT、Geneve 和 IPsec 隧道协定,这些隧道协定就是 overlay 网络的根底协定,通过对物理网络做的一层封装和扩大,解决了二层网络数量有余的问题,最大限度的缩小对底层物理网络拓扑的依赖性,同时也最大限度的减少了对网络的管制。
Interface
(iface/ 接口)接口是 OVS 与操作系统替换数据报文的组件,一个接口即是操作系统上的一块网卡,这个网卡可能是 OVS 生成的虚构网卡,也有可能是挂载在 OVS 上的物理网卡,操作系统上的虚构网卡(TUN/TAP)也能够被挂载在 OVS 上。
Controller
OpenFlow 控制器,OVS 能够接管一个或者多个 OpenFlow 控制器的治理,性能次要是下发流表,管制转发规定。
Flow
流表是 OVS 进行数据转发的外围性能,定义了端口之间转发数据报文的规定,一条流表规定次要分为匹配和动作两局部,匹配局部决定哪些数据报文须要被解决,动作决定了匹配到的数据报文该如何解决。
OVS 罕用操作
装置
yum install openvswitch
systemctl enable openvswitch
systemctl start openvswitch
如果以后软件源中没有 openvswitch,能够通过阿里云官网镜像站下载和操作系统版本对应的 rpm 包到本地再装置。示例命令:
yum localinstall openvswitch-2.9.0-3.el7.x86_64.rpm
Bridge 操作
增加网桥
ovs-vsctl add-br br-int
查问网桥列表
ovs-vsctl list-br
删除网桥
ovs-vsctl del-br br-int
Port 操作
- Normal Port
# 将物理网卡 eth0 增加到网桥 br-int 上
ovs-vsctl add-port br-int eth0
# 移除网桥 br-int 上的 Port
ovs-vsctl del-port br-int eth0
- Internal Port
# 增加 Internal Port
ovs-vsctl add-port br-int vnet0 -- set Interface vnet0 type=internal
# 把网卡 vnet0 启动并配置 IP
ip link set vnet0 up
ip addr add 192.168.0.1/24 dev vnet0
# 设置 VLAN tag
ovs-vsctl set Port vnet0 tag=100
# 移除 vnet0 下面的 VLAN tag 配置
ovs-vsctl remove Port vnet0 tag 100
# 设置 vnet0 容许通过的 VLAN tag
ovs-vsctl set Port vnet0 trunks=100,200
# 移除 vnet0 容许通过的的 VLAN tag 配置
ovs-vsctl remove Port vnet0 trunks 100,200
- Patch Port
ovs-vsctl add-br br0
ovs-vsctl add-br br1
ovs-vsctl \
-- add-port br0 patch0 -- set interface patch0 type=patch options:peer=patch1 \
-- add-port br1 patch1 -- set interface patch1 type=patch options:peer=patch0
- Tunnel Port
# 主机 10.1.7.21 上
ovs-vsctl add-br br-tun
ovs-vsctl add-port br-tun vxlan-vx01 -- set Interface vxlan-vx01 type=vxlan options:remote_ip=10.1.7.22 options:key=flow
ovs-vsctl add-port br-tun vxlan-vx02 -- set Interface vxlan-vx02 type=vxlan options:remote_ip=10.1.7.23 options:key=flow
#主机 10.1.7.22 上
ovs-vsctl add-br br-tun
ovs-vsctl add-port br-tun vxlan-vx01 -- set Interface vxlan-vx01 type=vxlan options:remote_ip=10.1.7.21 options:key=flow
ovs-vsctl add-port br-tun vxlan-vx02 -- set Interface vxlan-vx02 type=vxlan options:remote_ip=10.1.7.23 options:key=flow
#主机 10.1.7.23 上
ovs-vsctl add-br br-tun
ovs-vsctl add-port br-tun vxlan-vx01 -- set Interface vxlan-vx01 type=vxlan options:remote_ip=10.1.7.21 options:key=flow
ovs-vsctl add-port br-tun vxlan-vx02 -- set Interface vxlan-vx02 type=vxlan options:remote_ip=10.1.7.22 options:key=flow
- 其余基本操作
# 设置 VLAN mode
ovs-vsctl set port <port name> VLAN_mode=trunk|access|native-tagged|native-untagged
# 设置 VLAN tag
ovs-vsctl set port <port name> tag=<1-4095>
# 设置 VLAN trunk
ovs-vsctl set port <port name> trunk=100,200
# 移除 Port 的属性
ovs-vsctl remove port <port name> <property name> <property value>
# 查看 Port 的属性
ovs-vsctl list interface <port name>
接下来咱们将应用 OVS 来实现单机和多台物理服务器下的虚构 VLAN 网络。
本文首发我的微信公众号:我在对面的角落
欢送关注,接管第一工夫更新告诉。