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

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

测试容器
con4:10.10.2.4

con5:10.10.2.5

con6:10.10.1.6

主机一配置:

创建容器

docker run -itd --name con2 --net=none ubuntu:14.04 /bin/bash
docker run -itd --name con3 --net=none ubuntu:14.04 /bin/bash

创建网桥
ovs-vsctl add-br br0

给容器添加网卡,并挂载到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

创建网桥
ovs-vsctl add-br br1

给容器添加网卡,并挂载到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 "31f988622c094_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权限进入容器。

主机一

docker exec -it --privileged con2 sh
route -n 

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值