V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
FreeEx
V2EX  ›  推广

Open vSwitch 入门实践(1)简介

  •  
  •   FreeEx · 2020-12-12 21:40:39 +08:00 · 1206 次点击
    这是一个创建于 1445 天前的主题,其中的信息可能已经有所发展或是发生改变。

    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 网络。

    本文首发我的微信公众号:我在对面的角落 欢迎关注,接收第一时间更新通知。

    image

    目前尚无回复
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3629 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 04:32 · PVG 12:32 · LAX 20:32 · JFK 23:32
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.