ovn 集成容器

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

也可参考:ovn 集成容器 - 简书 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值