Open vSwitch (OVS)配置案例

画图 (3)

1. Open vSwitch 简介

Open vSwitch 是一个开源的虚拟交换机,支持标准交换功能(如 VLAN、STP)和高级功能(如 OpenFlow、VXLAN)。它广泛应用于虚拟化环境和 SDN 场景。


2. OVS 作为普通交换机

场景描述

将 OVS 配置为普通交换机,用于连接虚拟机或物理设备,支持 VLAN 和 STP 等传统交换功能。

配置步骤

  1. 安装 OVS

    sudo apt update
    sudo apt install openvswitch-switch
    
  2. 创建 OVS Bridge

    sudo ovs-vsctl add-br ovs-br0
    
  3. 添加物理网卡到 Bridge

    sudo ovs-vsctl add-port ovs-br0 eth0
    
  4. 配置 VLAN

    • 将端口 eth0 设置为 Trunk 端口,允许 VLAN 10 和 20:
      sudo ovs-vsctl set port eth0 trunks=10,20
      
    • 将虚拟机接口 vnet0 加入 VLAN 10:
      sudo ovs-vsctl add-port ovs-br0 vnet0 tag=10
      
  5. 启用 STP

    sudo ovs-vsctl set bridge ovs-br0 stp_enable=true
    
  6. 验证配置

    sudo ovs-vsctl show
    

3. OVS 作为流表交换机(配合 SDN)

场景描述

将 OVS 配置为流表交换机,通过 OpenFlow 协议与 SDN 控制器(如 Ryu)通信,实现动态流量控制。

配置步骤

  1. 安装 OVS 和 Ryu 控制器

    sudo apt update
    sudo apt install openvswitch-switch
    pip install ryu
    
  2. 创建 OVS Bridge 并连接控制器

    sudo ovs-vsctl add-br ovs-br0
    sudo ovs-vsctl set-controller ovs-br0 tcp:127.0.0.1:6633
    
  3. 启动 Ryu 控制器

    • 编写一个简单的 Ryu 应用(simple_switch.py):
      from ryu.base import app_manager
      from ryu.controller import ofp_event
      from ryu.controller.handler import MAIN_DISPATCHER
      from ryu.controller.handler import set_ev_cls
      from ryu.ofproto import ofproto_v1_3
      
      class SimpleSwitch(app_manager.RyuApp):
          OFP_VERSIONS = [ofproto_v1_3.OFP_VERSION]
      
          def __init__(self, *args, **kwargs):
              super(SimpleSwitch, self).__init__(*args, **kwargs)
      
          @set_ev_cls(ofp_event.EventOFPSwitchFeatures, MAIN_DISPATCHER)
          def switch_features_handler(self, ev):
              datapath = ev.msg.datapath
              ofproto = datapath.ofproto
              parser = datapath.ofproto_parser
      
              # 添加默认流表规则:丢弃所有流量
              match = parser.OFPMatch()
              actions = []
              self.add_flow(datapath, 0, match, actions)
      
          def add_flow(self, datapath, priority, match, actions):
              ofproto = datapath.ofproto
              parser = datapath.ofproto_parser
      
              inst = [parser.OFPInstructionActions(ofproto.OFPIT_APPLY_ACTIONS, actions)]
              mod = parser.OFPFlowMod(
                  datapath=datapath, priority=priority, match=match, instructions=inst
              )
              datapath.send_msg(mod)
      
    • 启动 Ryu 控制器:
      ryu-manager simple_switch.py
      
  4. 添加流表规则

    • 通过 Ryu 控制器动态添加流表规则,例如将来自端口 1 的流量转发到端口 2:
      match = parser.OFPMatch(in_port=1)
      actions = [parser.OFPActionOutput(2)]
      self.add_flow(datapath, 1, match, actions)
      
  5. 验证配置

    • 查看 OVS 流表规则:
      sudo ovs-ofctl dump-flows ovs-br0
      

4. OVS 在 SDN 中的高级功能

场景 1:VXLAN 隧道

  1. 创建 VXLAN 隧道

    sudo ovs-vsctl add-port ovs-br0 vxlan0 -- set interface vxlan0 type=vxlan options:remote_ip=192.168.1.101
    
  2. 验证配置

    sudo ovs-vsctl show
    

场景 2:流量镜像

  1. 配置流量镜像

    • 将端口 1 的流量镜像到端口 2:
      sudo ovs-vsctl -- set Bridge ovs-br0 mirrors=@m \
      -- --id=@p1 get Port vnet0 \
      -- --id=@p2 get Port vnet1 \
      -- --id=@m create Mirror name=mymirror select-dst-port=@p1 select-src-port=@p1 output-port=@p2
      
  2. 验证配置

    sudo ovs-vsctl list mirror
    

5. 总结

  • 作为普通交换机:OVS 支持 VLAN、STP 等传统交换功能,适合简单网络场景。
  • 作为流表交换机:OVS 通过 OpenFlow 协议与 SDN 控制器协同工作,实现动态流量控制和高级功能(如 VXLAN、流量镜像)。
  • 配置工具ovs-vsctl 用于管理 OVS 配置,ovs-ofctl 用于查看和修改流表规则。

通过以上配置案例,您可以根据实际需求灵活使用 OVS,构建高效、可编程的虚拟网络环境。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值