命名空间之间的 OpenVSwitch

命名空间之间的 OpenVSwitch

我正在尝试在 Linux 上配置两个 TAP 接口之间的桥接,每个接口都在其自己的网络命名空间内创建。我使用 OpenVSwitch 作为软件桥接。

我认为这些步骤应该可行:

ip netns add test_ns1
ip netns exec test_ns1 ip tuntap add mode tap testif1
ip netns exec test_ns1 ip addr add 192.168.1.1/24 dev testif1
ip netns exec test_ns1 ip link set testif1 up

ip netns add test_ns2
ip netns exec test_ns2 ip tuntap add mode tap testif2
ip netns exec test_ns2 ip addr add 192.168.1.2/24 dev testif2
ip netns exec test_ns2 ip link set testif2 up

ovs-vsctl add-br test_br
ip netns exec test_ns1 ovs-vsctl add-port test_br testif1
ip netns exec test_ns2 ovs-vsctl add-port test_br testif2

ip netns exec test_ns1 ping -c 2 192.168.1.1
ip netns exec test_ns2 ping -c 2 192.168.1.2
ip netns exec test_ns1 ping -c 2 192.168.1.2
ip netns exec test_ns2 ping -c 2 192.168.1.1

所有四个 ping 命令均不起作用并报告 100% 数据包丢失。

我希望能够从其自己的命名空间内 ping 接口(例如,从 test_ns1 ping testif1)。我可以用 Quantum 接口做到这一点,但不能用我的接口做到这一点,为什么?

然后,我很确定 OpenVSwitch 安装正确,因为我正在运行原始 Ubuntu 版本,并且在同一台机器上运行 OpenStack Quantum。

答案1

OpenStack 不使用 创建 tap 设备ip tuntap add。相反,它使用 命令在 openvswitch 网桥上创建内部端口ovs-vsctl add-port。由于 openvswitch 将内部端口实现为 tap 设备,因此 OpenStack 将这些端口标记为“tapXXXX”。

要在 openvswitch 桥上创建 testif1 接口并将其放入 test_ns1 命名空间,请尝试执行以下操作:

ovs-vsctl add-port test_br testif1 -- set interface testif1 type=internal
ip link set testif1 netns test_ns1
ip netns exec test_ns1 ip addr add 192.168.1.1/24 dev testif1
ip netns exec test_ns1 ip link set testif1 up

答案2

是的,只有 ovs 的内部端口支持 L3 功能,这篇文章对此有很好的介绍:https://arthurchiao.art/blog/ovs-deep-dive-6-internal-port/

相关内容