OVS使用记录(一)

基于lxd容器搭建简单网络

  1. 创建三个容器,一个安装ovs作交换机VAP,另外两个普通容器作host

  2. 宿主机为ubuntu18.04,执行lxc network create b1 创建桥

  3. 执行 lxc network attach b1 host1 eth0将桥绑定host1的eth0端口

  4. 同理执行 lxc network attach b1 VAP eth0将桥绑定VAP的eth0端口

  5. 同样操作,创建桥b2,再分别绑定到host2的eth0以及VAP的eth1端口

  6. 分别进入host1、host2,在/etc/network/interfaces中设置静态ip,网关可以先不设(或者直接采用ip addr add给端口设置临时的ip地址也可以,只不过重启机器或者服务后,地址可能会变),修改完配置文件是需要重启服务才能生效的哈,我的ubuntu命令是service networking restart

  7. 进入交换机VAP,创网桥ovs-vsctl add-br br0

  8. 将VAP的eth0网卡挂载到网桥下ovs-vsctl add-port br0 eth0,同理挂载eth1
    在这里插入图片描述

  9. OpenFlow 控制器(可以不设)
    添加控制器命令ovs-vsctl set-controller <bridge> <target...>
    例如:
    添加一个控制器ovs-vsctl set-controller br0 tcp:1.2.3.4:6633
    设置多个controllerovs-vsctl set-controller br0 tcp:1.2.3.4:6633 tcp:4.3.2.1:6633
    添加使用unix socket通信的controllerovs-vsctl set-controller br0 unix:/var/run/xx/xx.sock
    移除控制器命令ovs-vsctl del-controller br0
    查询 brige 上已配置的控制器命令ovs-vsctl get-controller br0

  10. 设置网桥工作模式:
    ovs 交换机在连接不上控制器时(前提是设置了控制器)有一个fail_mode的标志,所谓fail_mode就是故障模式,意思是SDN控制器故障时,交换机未连接控制器时的模式。
    fail_mode 故障模式有两种状态,一种是standalone,一种是secure状态。
    (1)如果是配置了standalone mode,在三次探测控制器连接不成功后,此时ovs-vswitchd将会接管转发逻辑(后台仍然尝试连接到控制器,一旦连接则退出fail状态),OpenvSwitch将作为一个正常的mac学习的二层交换机。
    (2)如果是配置了secure mode,则ovs-vswitchd将不会自动配置新的转发流表,OpenvSwitch将按照原先有的流表转发。
    简单来说
    standalone(default):清除所有控制器下发的流表,ovs自己接管
    secure:按照原来流表继续转发
    但第一次创建ovs网桥,还没有添加控制器,应该是没有故障模式的,本文实验只是初学者用ovs作为正常的交换机使用,所以先设置故障模式,采用ovs-vsctl get-fail-mode br0命令可以查看当前网桥br0的故障模式,未设置前应该会返回空值。采用ovs-vsctl set-fail-mode br0 standalone 就配置了standalone工作模式。可以再次查看当前网桥br0的故障模式,应该会输出standalone,如下图所示表示设置成功。
    在这里插入图片描述

  11. 配置规则:
    需要有流规则,两个host才能通。先讲知识:
    1)添加普通流表命令ovs-ofctl add-flow br0 in_port=1,actions=output:2意思是对网桥br0,从1进从2出。
    其中的1、2均为OpenFlow的端口 id ,可以通过命令ovs-ofctl show br0来查看 br0 中各端口的 OpenFlow 端口 id,该 id 并不一定是按顺序的。如图所示,每个端口前标有数字即其端口🆔
    在这里插入图片描述
    也可以手动设置端口id:
    比如将已在ovs中的端口veth1的OpenFlow端口设置成100:
    ovs-vsctl set interface veth1 ofport_request=100
    或将端口veth1添加到bridge br0中,并将veth1的OpenFlow端口设置成200:
    ovs-vsctl add-port br0 veth1 -- set interface veth1 ofport_request=200
    2)删除所有流表命令
    ovs-ofctl del-flows br0
    3)按匹配项设置流表
    ovs-ofctl del-flows br0 "in_port=1",<匹配项>,actions=<动作>
    匹配项包括匹配ip、mac、vlan等等诸多选项,动作有设置转出接口、改变vlan id等
    此篇文章介绍的比较详细,这里不再一一赘述
    本文实验仅用最简单的普通流表,由于需要两端互通才行,故添加两条流表:
    ovs-ofctl add-flow br0 in_port=1,actions=output:2
    表示从1进的从2出,以及下面的从2进的从1出:
    ovs-ofctl add-flow br0 in_port=2,actions=output:1

  12. 启动网卡
    此时测试两个host还没有通,发现上面命令ovs-ofctl show br0列出各端口状态中,均为PORT_DOWN,说明端口还没有启动,采用命令ip link set eth0 up启动端口eth0,同理也启动eth1后查看状态发现已启动。
    在这里插入图片描述

  13. ping测试
    host1 ip:192.168.10.11
    host2 ip:192.168.10.12
    进入host1中执行命令ping 192.168.10.12,连通!
    在这里插入图片描述

  14. 补充
    1)OVS的internal port 可以配置IP地址,普通 port 上配置的IP地址是不起作用的。
    在创建 br0 时会自动创建一个同名internal port br0,配置地址可以用于与controller等联系
    可以通过ip addr add 192.168.10.88/24 dev br0为它配置ip地址
    #也可以手动创建internal port,同时将其设置为VLAN 10的access port
    ovs-vsctl add-br br0 intbr tag=10 -- set interface intbr type=internal
    然后添加地址
    ip addr add 20.20.20.20/24 dev intbr
    2)端口主要用到access端口以及trunk端口
    配置端口为Access口
    设置br0中的端口eth0为VLAN 10的access口ovs-vsctl set port eth0 tag=10
    添加eth1到指定bridge br0中,同时将其配置成指定VLAN 10的access端口
    ovs-svctl add-port br0 eth1 tag=10
    配置端口为Trunk口
    在br0上添加port eth1为VLAN 9,10,11的trunk
    ovs-vsctl add-port br0 eth1 trunk=9,10,11
    暂时补充这些,后面随着学习会继续添加。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

FlowerMin

还是一枚学生,希望多多鼓励~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值