ITPub博客

首页 > 数据库 > 数据库开发技术 > OpenStack 不同租户(项目)如何实现同网段

OpenStack 不同租户(项目)如何实现同网段

原创 数据库开发技术 作者:步步运维步步坑 时间:2024-04-10 11:30:00 0 删除 编辑

在OpenStack中,通过使用命名空间(namespace),可以实现对不同项目(也称为租户)的网络进行隔离。每个项目的管理员都需要对其项目的网络进行规划和建设。然而,由于管理员习惯使用的网络地址范围可能会重叠,例如192.168.X.X,因此不同项目之间可能会出现对同一网段的重复使用

如果出现这种情况,那是如何实现 的呢,例如v1 he v2  再不同的VXLAN网络xnet1 和 vnet2,他们的网络接口没有直接分配ip地址,但是可以通过router实现三层通讯,没有gateway ip 此时route 是如何完成路由的?


答案就是重叠使用网络


即使没有为虚拟机分配IP地址,路由器仍然可以完成路由功能。这是因为路由器可以根据数据包的目标MAC地址和VLAN标记来进行转发,而不一定需要知道目标IP地址。因此,即使虚拟机没有分配IP地址,路由器也可以根据MAC地址来进行路由转发。

在OpenStack中,路由器可以通过将不同VXLAN网络的信息封装在命名空间(namespace)中来实现跨网络通信。这样做的目的是为了确保不同项目(或租户)之间的网络可以重叠使用,而不会发生冲突。通过使用命名空间,每个项目都可以在相同的IP地址范围内使用自己的网络,而不会相互干扰。

因此,虽然在理论上可以直接通过路由器进行不同VXLAN网络之间的通信,但使用命名空间可以更好地管理不同项目之间的网络,确保安全性和隔离性

[root@localhost ~(keystone_admin)]# nova list+--------------------------------------+------------+---------+------------+-------------+--------------------------+| ID                                   | Name       | Status  | Task State | Power State | Networks                 |+--------------------------------------+------------+---------+------------+-------------+--------------------------+| 791556ab-6231-4370-8a81-972862da200f | cirros-v1 | SHUTOFF | -          | Shutdown    | vxlan1_vnet=172.16.10.11 || 6173f9bf-bbed-4d71-96d3-f7ae660dc21c | cirros-v2 | SHUTOFF | -          | Shutdown    | vxlan1_vnet=172.16.10.9  || ea42b670-c084-4e76-ae84-23d6617eb420 | cirros-v3 | SHUTOFF | -          | Shutdown    | vxlan2_vnet=172.16.11.4  |+--------------------------------------+------------+---------+------------+-------------+--------------------------+

查看网络设备

[root@localhost ~(keystone_admin)]# virsh dumpxml 791556ab-6231-4370-8a81-972862da200f | grep tap      <target dev='tap2c798bf4-8e'/>[root@localhost ~(keystone_admin)]# virsh dumpxml ea42b670-c084-4e76-ae84-23d6617eb420 | grep tap      <target dev='tap00515be6-9e'/>


查看tap设备的网卡信息

[root@localhost ~(keystone_admin)]# ifconfig tap2c798bf4-8etap2c798bf4-8e: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1450        inet6 fe80::fc16:3eff:feee:1305  prefixlen 64  scopeid 0x20<link>        ether fe:16:3e:ee:13:05  txqueuelen 1000  (Ethernet)        RX packets 0  bytes 0 (0.0 B)        RX errors 0  dropped 0  overruns 0  frame 0        TX packets 1  bytes 90 (90.0 B)        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
[root@localhost ~(keystone_admin)]# ifconfig tap00515be6-9etap00515be6-9e: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1450 inet6 fe80::fc16:3eff:febf:c0eb prefixlen 64 scopeid 0x20<link> ether fe:16:3e:bf:c0:eb txqueuelen 1000 (Ethernet) RX packets 14 bytes 1368 (1.3 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 10 bytes 1382 (1.3 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0


L3代理(L3 agent)通常会为每个路由器(router)创建一个命名空间(namespace)。在这个命名空间中,L3代理会同步路由器下的接口信息,并使用veth pair(虚拟以太网对)与TAP(虚拟网桥接口)相连,这样就能提供路由了。

具体步骤如下:

  1. Namespace创建:当创建一个路由器时,L3代理会为该路由器创建一个命名空间,用于隔离路由器的网络环境。

  2. 接口信息同步:L3代理会将路由器下的接口信息同步到命名空间中。

  3. Veth pair连接:L3代理会创建一个veth pair,其中一个端口连接到命名空间内部,另一个端口连接到宿主机的网络栈。

  4. Gateway IP配置:L3代理会将路由器的网关IP配置在命名空间内的veth接口上。

查看路由(namespace)列表

[root@localhost ~(keystone_admin)]# neutron router-listneutron CLI is deprecated and will be removed in the future. Use openstack CLI instead.+--------------------------------------+--------------+----------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-------------+-------+| id                                   | name         | tenant_id                        | external_gateway_info                                                                                                                                                                  | distributed | ha    |+--------------------------------------+--------------+----------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-------------+-------+| 30bba1f4-96bb-459c-9760-dba01bde3a01 | router_10_11 | 26f0265d7ca347239ea13ed32279ff7a | {"network_id": "463adb80-e2f3-4a18-9629-cf966fc0b360", "enable_snat": true, "external_fixed_ips": [{"subnet_id": "00897e13-a522-4b8a-943e-7943b652af5a", "ip_address": "172.24.4.4"}]} | False       | False || 341a7e57-463d-411b-af0a-8cddc56777d1 | router1      | e035103daab74f818fcb4a8a7dbcfda6 | {"network_id": "463adb80-e2f3-4a18-9629-cf966fc0b360", "enable_snat": true, "external_fixed_ips": [{"subnet_id": "00897e13-a522-4b8a-943e-7943b652af5a", "ip_address": "172.24.4.2"}]} | False       | False |+--------------------------------------+--------------+----------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------+--------------+----------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------

查看具体路由(namespace)的接口信息

[root@localhost ~(keystone_admin)]# ip netnsqrouter-30bba1f4-96bb-459c-9760-dba01bde3a01 (id: 5)qdhcp-53c25734-40ea-421e-8744-31d3e14819d0 (id: 4)qdhcp-e64a94b3-3256-4a3d-9833-cc3c9f421e70 (id: 3)qdhcp-d6c09c69-8bb0-476d-9c71-457251af87b9 (id: 1)qdhcp-fcf7d046-0937-43af-8b94-32cc1edb24e1 (id: 2)qrouter-341a7e57-463d-411b-af0a-8cddc56777d1 (id: 0)

id为5的路由(namespace)就是router_10_11的具体id,通过ip netns exec ID 可查看详细信息。

查看路由(namespaceID:qrouter-30bba1f4-96bb-459c-9760-dba01bde3a01)详细信息

[root@localhost ~(keystone_admin)]# ip netns exec qrouter-30bba1f4-96bb-459c-9760-dba01bde3a01 ip a1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00    inet 127.0.0.1/8 scope host lo       valid_lft forever preferred_lft forever    inet6 ::1/128 scope host        valid_lft forever preferred_lft forever33: qg-f86168a4-fc: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default qlen 1000    link/ether fa:16:3e:b9:54:91 brd ff:ff:ff:ff:ff:ff    inet 172.24.4.4/24 brd 172.24.4.255 scope global qg-f86168a4-fc       valid_lft forever preferred_lft forever    inet6 fe80::f816:3eff:feb9:5491/64 scope link        valid_lft forever preferred_lft forever34: qr-03ede9be-8d: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc noqueue state UNKNOWN group default qlen 1000    link/ether fa:16:3e:5f:04:7f brd ff:ff:ff:ff:ff:ff    inet 172.16.10.1/24 brd 172.16.10.255 scope global qr-03ede9be-8d       valid_lft forever preferred_lft forever    inet6 fe80::f816:3eff:fe5f:47f/64 scope link        valid_lft forever preferred_lft forever35: qr-3b2b1f99-dc: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc noqueue state UNKNOWN group default qlen 1000    link/ether fa:16:3e:9a:3f:f7 brd ff:ff:ff:ff:ff:ff    inet 172.16.11.1/24 brd 172.16.11.255 scope global qr-3b2b1f99-dc       valid_lft forever preferred_lft forever    inet6 fe80::f816:3eff:fe9a:3ff7/64 scope link        valid_lft forever preferred_lft forever

从上面可以看到,OpenStack在默认情况下,创建一个网络时,如果您没有指定网关,系统会将该网络的第一个可用IP地址作为网关地址。对于路由器来说,它可以连接到多个网络,并在每个网络上有一个接口。

路由器有三个接口,分别对应着外部网关(33号接口)以及两个VXLAN网络(34号和35号接口)。假设您创建了一个网络,比如172.16.10.0/24(vxlan10),如果您没有为这个网络指定网关,OpenStack会自动将该网络的第一个可用IP地址,也就是172.16.10.1,作为默认网关地址。

这样配置的目的是为了方便网络通信的设置和管理。默认情况下,路由器的接口会自动关联到相应的网络,并且系统会自动为每个网络配置默认的网关地址,以便网络通信的顺利进行

1. qr-03ede9be-8d 上设置了 Gateway IP 172.16.10.1,与 root namespace 中的 tap03ede9be-8d 组成 veth pair。
2. qr-3b2b1f99-dc 上设置了 Gateway IP 172.16.11.1,与 root namespace 中的 tap3b2b1f99-dc 组成 veth pair。
这里将路由信息封装在namespace中,在外部理解可以直接把namespace当做是路由,并不需要管理员去管什么是namespace,项目管理员只需要配置好vxlan网络和路由就可以实现三层通信,但在openstack的管理员视角,却巧妙地解决了网络重么是namespace,项目管理员只需要配置好vxla

拓扑图如下

不使用namespace

使用namespace


添加博主

微信号|yfq940-

原文作者:步步运维步步坑;如有侵权,请联系管理员删除。

请登录后发表评论 登录
全部评论

注册时间:2022-10-08

  • 博文量
    100
  • 访问量
    51706