ovn 集成容器
2026/4/20 18:26:27 网站建设 项目流程

本文实验如何和容器集成,这里的场景指的是容器运行在vm中,而ovn运行在hypervisor上,可参考ovn-architecture的Life Cycle of a Container Interface Inside a VM部分。容器和ovn同时运行在hypervisor上的场景,和vm运行在hypervisor上流程相同,可参考ovn-architecture的Life Cycle of a VIF部分。

本次实验逻辑拓扑如下

image.png

前面实验中使用namespace模拟vm,但是运行在vm中的容器就不能直接使用namespace模拟了。首先使用br-vm3模拟vm,通过patch口连接到ls1上,br-vm3上的vm3模拟的是vm接口,而c1-10和c2-12模拟的是容器接口,vlan分别为10和12。

开始配置基础组件

###创建两个交换机和一个路由器 //创建两个虚拟交换机 ls1 和 ls2 ovn-nbctl ls-add ls1 ovn-nbctl ls-add ls2 //创建一个虚拟路由器 lr1 ovn-nbctl lr-add lr1 //在虚拟路由器 lr1 上添加端口,用来连接虚拟交换机 ls1 ovn-nbctl lrp-add lr1 lr1-ls1 00:00:00:00:00:01 10.10.10.1/24 //在虚拟交换机 ls1 上添加端口,用来连接虚拟路由器 lr1 ovn-nbctl lsp-add ls1 ls1-lr1 //端口类型必须为 router ovn-nbctl lsp-set-type ls1-lr1 router //设置地址,必须和 lr1-ls1 的一致 ovn-nbctl lsp-set-addresses ls1-lr1 00:00:00:00:00:01 //指定 router-port ovn-nbctl lsp-set-options ls1-lr1 router-port=lr1-ls1 //在虚拟路由器 lr1 上添加端口,用来连接虚拟交换机 ls2 ovn-nbctl lrp-add lr1 lr1-ls2 00:00:00:00:00:02 10.10.20.1/24 //在虚拟交换机 ls2 上添加端口,用来连接虚拟路由器 lr1 ovn-nbctl lsp-add ls2 ls2-lr1 //端口类型必须为 router ovn-nbctl lsp-set-type ls2-lr1 router //设置地址,必须和 lr1-ls2 的一致 ovn-nbctl lsp-set-addresses ls2-lr1 00:00:00:00:00:02 //指定 router-port ovn-nbctl lsp-set-options ls2-lr1 router-port=lr1-ls2 ###在交换机上添加vm接口 //在虚拟交换机 ls1 上添加两个端口,指定 mac 和 ip(10.10.10.0/24网段),用来连接vm ovn-nbctl lsp-add ls1 ls1-vm1 ovn-nbctl lsp-set-addresses ls1-vm1 "00:00:00:00:00:03 10.10.10.2" ovn-nbctl lsp-set-port-security ls1-vm1 "00:00:00:00:00:03 10.10.10.2" ovn-nbctl lsp-add ls1 ls1-vm2 ovn-nbctl lsp-set-addresses ls1-vm2 "00:00:00:00:00:04 10.10.10.3" ovn-nbctl lsp-set-port-security ls1-vm2 "00:00:00:00:00:04 10.10.10.3" //在虚拟交换机 ls2 上添加两个端口,指定 mac 和 ip(10.10.20.0/24网段),用来连接vm ovn-nbctl lsp-add ls2 ls2-vm1 ovn-nbctl lsp-set-addresses ls2-vm1 "00:00:00:00:00:03 10.10.20.2" ovn-nbctl lsp-set-port-security ls2-vm1 "00:00:00:00:00:03 10.10.20.2" ovn-nbctl lsp-add ls2 ls2-vm2 ovn-nbctl lsp-set-addresses ls2-vm2 "00:00:00:00:00:04 10.10.20.3" ovn-nbctl lsp-set-port-security ls2-vm2 "00:00:00:00:00:04 10.10.20.3" ###创建四个vm //在 master 节点上,创建两个namespace,用来模拟两个vm,使用 "iface-id" 指定 //这两个vm属于 ls1 ip netns add vm1 ovs-vsctl add-port br-int vm1 -- set interface vm1 type=internal ip link set vm1 netns vm1 ip netns exec vm1 ip link set vm1 address 00:00:00:00:00:03 ip netns exec vm1 ip addr add 10.10.10.2/24 dev vm1 ip netns exec vm1 ip link set vm1 up ip netns exec vm1 ip route add default via 10.10.10.1 dev vm1 ovs-vsctl set Interface vm1 external_ids:iface-id=ls1-vm1 ip netns add vm2 ovs-vsctl add-port br-int vm2 -- set interface vm2 type=internal ip link set vm2 netns vm2 ip netns exec vm2 ip link set vm2 address 00:00:00:00:00:04 ip netns exec vm2 ip addr add 10.10.10.3/24 dev vm2 ip netns exec vm2 ip link set vm2 up ip netns exec vm2 ip route add default via 10.10.10.1 dev vm2 ovs-vsctl set Interface vm2 external_ids:iface-id=ls1-vm2 //在 node1 节点上,创建两个namespace,用来模拟两个vm,使用 "iface-id" 指定这两个vm属于 ls2 ip netns add vm1 ovs-vsctl add-port br-int vm1 -- set interface vm1 type=internal ip link set vm1 netns vm1 ip netns exec vm1 ip link set vm1 address 00:00:00:00:00:03 ip netns exec vm1 ip addr add 10.10.20.2/24 dev vm1 ip netns exec vm1 ip link set vm1 up ip netns exec vm1 ip route add default via 10.10.20.1 dev vm1 ovs-vsctl set Interface vm1 external_ids:iface-id=ls2-vm1 ip netns add vm2 ovs-vsctl add-port br-int vm2 -- set interface vm2 type=internal ip link set vm2 netns vm2 ip netns exec vm2 ip link set vm2 address 00:00:00:00:00:04 ip netns exec vm2 ip addr add 10.10.20.3/24 dev vm2 ip netns exec vm2 ip link set vm2 up ip netns exec vm2 ip route add default via 10.10.20.1 dev vm2 ovs-vsctl set Interface vm2 external_ids:iface-id=ls2-vm2

在ls1上添加三个逻辑端口,其中ls1-vm3是vm端口,c1-10和c2-12是容器接口,容器接口需要配置父接口为ls1-vm3,并配置vlan tag。

ovn-nbctl lsp-add ls1 ls1-vm3 ovn-nbctl lsp-set-addresses ls1-vm3 "00:00:00:00:00:05 10.10.10.4" ovn-nbctl lsp-set-port-security ls1-vm3 "00:00:00:00:00:05 10.10.10.4" ovn-nbctl lsp-add ls1 c1-10 ovn-nbctl lsp-set-addresses c1-10 "00:00:00:00:00:06 10.10.10.5" ovn-nbctl lsp-set-port-security c1-10 "00:00:00:00:00:06 10.10.10.5" ovn-nbctl set Logical_Switch_Port c1-10 parent_name=ls1-vm3 ovn-nbctl set Logical_Switch_Port c1-10 tag=10 ovn-nbctl lsp-add ls1 c2-12 ovn-nbctl lsp-set-addresses c2-12 "00:00:00:00:00:07 10.10.10.6" ovn-nbctl lsp-set-port-security c2-12 "00:00:00:00:00:07 10.10.10.6" ovn-nbctl set Logical_Switch_Port c2-12 parent_name=ls1-vm3 ovn-nbctl set Logical_Switch_Port c2-12 tag=12

在master节点上配置br-vm3,vm3,c1-10和c2-12等物理实体

ovs-vsctl add-br br-vm3 ovs-vsctl add-port br-vm3 brvm3-brint -- set Interface brvm3-brint type=patch options:peer=brint-brvm3 ovs-vsctl add-port br-int brint-brvm3 -- set Interface brint-brvm3 type=patch options:peer=brvm3-brint ovs-vsctl set Interface brint-brvm3 external_ids:iface-id=ls1-vm3 ovs-vsctl add-port br-vm3 vm3 -- set interface vm3 type=internal ip netns add vm3 ip link set vm3 netns vm3 ip netns exec vm3 ip link set vm3 address 00:00:00:00:00:05 ip netns exec vm3 ip addr add dev vm3 10.10.10.4/24 ip netns exec vm3 ip link set dev vm3 up ip netns exec vm3 ip route add default via 10.10.10.1 dev vm3 ip netns add c1-10 ovs-vsctl add-port br-vm3 c1-10 tag=10 -- set interface c1-10 type=internal ip link set c1-10 netns c1-10 ip netns exec c1-10 ip link set c1-10 address 00:00:00:00:00:06 ip netns exec c1-10 ip addr add dev c1-10 10.10.10.5/24 ip netns exec c1-10 ip link set dev c1-10 up ip netns exec c1-10 ip route add default via 10.10.10.1 dev c1-10 ip netns add c2-12 ovs-vsctl add-port br-vm3 c2-12 tag=12 -- set interface c2-12 type=internal ip link set c2-12 netns c2-12 ip netns exec c2-12 ip link set c2-12 address 00:00:00:00:00:07 ip netns exec c2-12 ip addr add dev c2-12 10.10.10.6/24 ip netns exec c2-12 ip link set dev c2-12 up ip netns exec c2-12 ip route add default via 10.10.10.1 dev c2-12

查看nbdb中logical_switch_port新添加的三个虚拟端口

root@master:~# ovn-nbctl list logical_switch_port ... _uuid : e89f49f2-9db1-4995-b401-b9f9928694fc addresses : ["00:00:00:00:00:07 10.10.10.6"] dhcpv4_options : [] dhcpv6_options : [] dynamic_addresses : [] enabled : [] external_ids : {} ha_chassis_group : [] name : c2-12 options : {} parent_name : ls1-vm3 port_security : ["00:00:00:00:00:07 10.10.10.6"] tag : 12 tag_request : [] type : "" up : true _uuid : 4fbfff3c-060b-416c-965d-abf4b695f63a addresses : ["00:00:00:00:00:06 10.10.10.5"] dhcpv4_options : [] dhcpv6_options : [] dynamic_addresses : [] enabled : [] external_ids : {} ha_chassis_group : [] name : c1-10 options : {} parent_name : ls1-vm3 port_security : ["00:00:00:00:00:06 10.10.10.5"] tag : 10 tag_request : [] type : "" up : true _uuid : 8ad7280f-187d-414d-a4d9-6274469dd0ad addresses : ["00:00:00:00:00:05 10.10.10.4"] dhcpv4_options : [] dhcpv6_options : [] dynamic_addresses : [] enabled : [] external_ids : {} ha_chassis_group : [] name : ls1-vm3 options : {} parent_name : [] port_security : ["00:00:00:00:00:05 10.10.10.4"] tag : [] tag_request : [] type : "" up : true

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询