openstack——理解中子服务的命名空间和安全组


Neutron 的设计目标是实现“网络即服务”,为了达到这一目标,在设计上遵循了基于“软件定义网络”实现网络虚拟化的原则,在实现上充分利用了 Linux 系统上的各种网络相关的技术

涉及的linux网络技术如下:

bridge:网桥,Linux中用于表示一个能连接不同网络设备的虚拟设备,linux中传统实现的网桥类似一个hub设备,而ovs管理的网桥一般类似交换机。

br-int:bridge-integration,综合网桥,常用于表示实现主要内部网络功能的网桥。

br-ex:bridge-external,外部网桥,通常表示负责跟外部网络通信的网桥。

GRE:General Routing Encapsulation,一种通过封装来实现隧道的方式。在openstack中一般是基于L3的gre,即original pkt/GRE/IP/Ethernet

VETH:虚拟ethernet接口,通常以pair的方式出现,一端发出的网包,会被另一端接收,可以形成两个网桥之间的通道。

qvb:neutron veth, Linux Bridge-side

qvo:neutron veth, OVS-side

TAP设备:模拟一个二层的网络设备,可以接受和发送二层网包。

TUN设备:模拟一个三层的网络设备,可以接受和发送三层网包。

iptables:Linux 上常见的实现安全策略的防火墙软件。

Vlan:虚拟 Lan,同一个物理 Lan 下用标签实现隔离,可用标号为1-4094。

VXLAN:一套利用 UDP 协议作为底层传输协议的 Overlay 实现。一般认为作为 VLan 技术的延伸或替代者。

namespace:用来实现隔离的一套机制,不同 namespace 中的资源之间彼此不可


以neutron的gre模式为例,简化示意如下

openstack-理解neutron服务的命名空间和安全组

一、命名空间


在 Linux 中,命名空间(namespace)可以被认为是隔离的拥有单独网络栈(网卡、路由转发表、iptables)的环境。网络名字空间经常用来隔离网络设备和服务,只有拥有同样网络名字空间的设备,才能看到彼此。

可以用ip netns list命令来查看已经存在的名字空间。

ip net list

openstack-理解neutron服务的命名空间和安全组


qdhcp开头的名字空间是dhcp服务器使用的,qrouter开头的则是router服务使用的。 可以通过 ip netns exec namespaceid command 来在指定的网络名字空

间中执行网络命令,例如

ip netns exec qdhcp-3bb9ca55-d2e5-45eb-b782-e4de1f60014a ip addr

openstack-理解neutron服务的命名空间和安全组

可以看到,dhcp服务的网络命名空间只有有一个网络接口"aa08fc00-39",它通过"tapa08fc00-39"连接到br-int上。


1.1DHCP服务

    

dhcp服务是通过dnsmasq进程(轻量级服务器,可以提供dns、dhcp、tftp等服务)来实现的,该进程绑定到dhcp名字空间中的br-int的接口上。可以查看相关的进程

例如查询”qdhcp-3bb9ca55-d2e5-45eb-b782-e4de1f60014a“的服务进程

ps -ef |grep 3bb9ca55-d2e5-45eb-b782-e4de1f60014a

openstack-理解neutron服务的命名空间和安全组

此dhcp服务,主要是给租户私有网络提供dhcp服务,在openstack的dashboard显示如下:

openstack-理解neutron服务的命名空间和安全组



2.1 路由服务

router是提供跨 subnet 的互联功能的。比如用户的内部网络中主机想要访问外部互联网的地址,就需要router来转发(因此,所有跟外部网络的流量都必须经过router)。目前router的实现是通过iptables进行的。

同样的,router服务也运行在自己的名字空间中,可以通过如下命令查看:

ip netns exec qrouter-014e0e10-47fc-469f-9883-3a5130fc79e6  ip addr

openstack-理解neutron服务的命名空间和安全组

可以看出,该名字空间中包括两个网络接口。

第一个接口 qr-d1a40252-8b(192.168.1.1/24)跟 br-int 上的接口相连。即任何从 br-int 来的找 192.168.1.0/24 (租户的私有网段)的网包都会到达这个接口。

openstack——理解中子服务的命名空间和安全组