自动将流添加到连接到 docker 主机的 ovs 交换机

Automatic add flow to ovs switch that connected to docker hosts

我正在使用 OVS 和 docker 容器创建 SDN 拓扑作为主机。我的示例拓扑是:一个 ovs 交换机和 2 个主机(docker 容器)连接到它。

HOST1(容器 1)<----> OVS <----> HOST2(容器 2)

首先我启动我的 opendaylight 控制器并通过“ovs-vsctl set-controller s1 tcp:ip:port”将我的 ovs 开关连接到它,然后我 运行 2 docker 容器与“docker 运行 -dit --net=none --name host1 ubuntu:16.04 /bin/bash”然后我使用“ovs-docker”命令将我的容器连接到ovs。我可以看到我的开关出现在 opendaylight dlux 上,但我无法从一个容器 ping 到另一个容器。问题是 odl 不会自动更新流程 table 这是 "ovs-ofctl dump-flows s1" 输出

cookie=0x2b00000000000001, duration=2494.398s, table=0, n_packets=0, n_bytes=0, idle_age=2494, priority=100,dl_type=0x88cc actions=CONTROLLER:65535 cookie=0x2b00000000000001, duration=2494.387s, table=0, n_packets=18, n_bytes=756, idle_age=665, priority=0 actions=drop

但是当我再次 重新启动 控制器时,一切正常,流被添加到我的 ovs 交换机,我可以从一个容器 ping 到另一个容器。

cookie=0x2b00000000000000, duration=3.087s, table=0, n_packets=0, n_bytes=0, idle_age=3, priority=2,in_port=1 actions=output:2,CONTROLLER:65535 cookie=0x2b00000000000001, duration=3.087s, table=0, n_packets=0, n_bytes=0, idle_age=3, priority=2,in_port=2 actions=output:1,CONTROLLER:65535 cookie=0x2b00000000000001, duration=2919.471s, table=0, n_packets=0, n_bytes=0, idle_age=2919, priority=100,dl_type=0x88cc actions=CONTROLLER:65535 cookie=0x2b00000000000001, duration=2919.46s, table=0, n_packets=18, n_bytes=756, idle_age=1090, priority=0 actions=drop

我知道我可以通过 openflow pluing rest api 将流推送到流 table 但假设你有太多端口(主机)连接到交换机,你必须发送流条目一一个。那么有什么方法可以将事件发送到 Opendaylight 控制器以使其自动更新开关流 table 吗?

我怀疑您遇到了 l2switch 项目中的错误。这是一个列表 open issues 个你可以浏览,但一般来说 l2switch 项目 维护得很少,只要您有有效的解决方法,我就会 随它去吧:)

我解决了这个问题,它看起来像 l2switch 功能在其 Address Tracker 上有 timestamp-update-interval,设置为 600000默认情况下,因此在减小此值(设置为 5)后,ODL 控制器将流推送到交换机...这里有完整的文档可以帮助启动... https://wiki.opendaylight.org/view/OpenDaylight_Controller:MD-SAL:L2_Switch