2025年ovs网络实践-基于flow table跨跃主机连通性测试

ovs网络实践-基于flow table跨跃主机连通性测试flow table 在支持 OpenFlow 的交换机中包含了若干个 Flow table Flow table 可以用来控制数据包的处理 交换机会执行与 flow 相匹配的表项中所罗列的动作 OpenFlow controller 通过使用 OpenFlow 协议来管理交换机 并且 controller 也能通过使用 OpenFlow 协议来获取交换机上的端口

大家好,我是讯享网,很高兴认识大家。

flow table

在支持OpenFlow的交换机中包含了若干个Flow table,Flow table可以用来控制数据包的处理,交换机会执行与flow相匹配的表项中所罗列的动作。

OpenFlow controller通过使用OpenFlow协议来管理交换机,并且controller也能通过使用OpenFlow协议来获取交换机上的端口、流量的统计信息或其他情报,并可以根据这些信息来调整各端口的流量。

交换机中维护的每个flow table都包含有很多个条目,这些条目会根据自身的一个优先级从高到底进行排序,优先级最高的条目位于flow table的顶部。

当一个数据包进入到交换机时,先和优先级最高的条目进行匹配,如果匹配成功,那么就停止继续匹配动作,去执行该条目中的一组action。如果匹配失败,则按照优先级高低,继续匹配下一条。如果flow table中所有的条目都不匹配,每张表会有默认的动作,一般为drop或者转给下一张表。

1. 测试环境

主机一:192.168.3.200

网桥:br0

测试容器:

con2:10.10.1.2

con3:10.10.1.3

主机二:92.168.3.248

网桥:br1

con5:10.10.2.5

con6:10.10.1.6

主机一配置:

创建容器

给容器添加网卡,并挂载到br0上
ovs-docker add-port br0 eth0 con2 --ipaddress=10.10.1.2/24
ovs-docker add-port br0 eth0 con3 --ipaddress=10.10.1.3/24

主机二配置:

创建容器

docker run -itd --name con4 --net=none ubuntu:14.04 /bin/bash
docker run -itd --name con5 --net=none ubuntu:14.04 /bin/bash
docker run -itd --name con6 --net=none ubuntu:14.04 /bin/bash

给容器添加网卡,并挂载到br1上
ovs-docker add-port br1 eth0 con4 --ipaddress=10.10.2.4/24
ovs-docker add-port br1 eth0 con5 --ipaddress=10.10.2.5/24
ovs-docker add-port br1 eth0 con6 --ipaddress=10.10.1.6/24

查看默认流表

主机一:

ovs-ofctl dump-flows br0

主机二:

ovs-ofctl dump-flows br1

2. 主机内连通性测试

在容器con2中ping con3,

docker exec -it con2 sh

删除主机一默认流表,测试con2和con3的连通性,发现网络已经不通

ovs-ofctl dump-flows br0
ovs-ofctl del-flows br0
ovs-ofctl dump-flows br0

docker exec -it con2 sh

添加流表

如果要con2和con3能够进行通信,需要建立规则,让ovs转发对应的数据

查看con2和con3在ovs上的网络端口

ovs-vsctl show

ovs-vsctl list interface "31fc094_l" | grep ofport

ovs-vsctl list interface "94bcddea7e614_l" | grep ofport

添加规则

ovs-ofctl add-flow br0 "priority=1, in_port=1, actions=output:2"
ovs-ofctl add-flow br0 "priority=2, in_port=2, actions=output:1"
ovs-ofctl dump-flows br0

测试主机一con2和con3的连通性

docker exec -it con2 sh

3. 测试优先级,设备一条优先级高的规则

流表中的规则是有优先级的,priority数值越大,优先级越高。流表中,优先级高的优先匹配,并执行匹配规则的actions。如果不匹配,继续匹配优先级低的下一条。

ovs-ofctl add-flow br0 "priority=3, in_port=2, actions=drop"

docker exec -it con2 sh

4. 跨网段连通性测试

在ip为10.10.2.4的con4上ping另一台主机上的con2 10.10.1.2

docker exec -it con4 sh

创建vxlan

主机一

ovs-vsctl add-port br0 vxlan1 -- set interface vxlan1 type=vxlan options:remote_ip=192.168.3.248 options:key=flow

ovs-vsctl show

主机二

ovs-vsctl add-port br1 vxlan1 -- set interface vxlan1 type=vxlan options:remote_ip=192.168.3.200 options:key=flow

ovs-vsctl show

添加流表规则

主机一

ovs-vsctl list interface "vxlan1"

ovs-ofctl add-flow br0 "priority=6, in_port=1, actions=output:3"
ovs-ofctl add-flow br0 "priority=6, in_port=3, actions=output:1"
ovs-ofctl dump-flows br0

主机二

ovs-vsctl list interface "vxlan1"

ovs-ofctl add-flow br1 "priority=4, in_port=5, actions=output:6"
ovs-ofctl add-flow br1 "priority=4, in_port=6, actions=output:5"
ovs-ofctl dump-flows br1

主机二 con4 上测试到主机一 con2的连通性

docker exec -it con4 sh

发现网络并不通,查看发现路由规则有问题,在主机二con4和主机一con2上添加默认路由规则,注意这里需要加选项privileged权限进入容器。

主机一

route add default dev eth0

主机二

docker exec -it --privileged con4 sh

route -n 

route add default dev eth0

再次从主机二 con4上测试到主机一 con2的连通性

docker exec -it --privileged con4 sh

小讯
上一篇 2025-02-25 23:03
下一篇 2025-03-29 18:27

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/12074.html