nova-network
nova-network是openStack的核心组件。功能如下:
1、IP地址分配:虚拟主机分配私有(固定)和浮动IP地址
2、网络模型与管理:虚拟网络使虚拟主机之间以及与外部网络通信。
3、安全控制:通过ebtables和iptables来实现
网络模型分为三种:
1、扁平网络 (Flat Network):在创建虚拟主机时,nova-network会从指定子网中取一个空闲IP并将它写入此虚拟主机的配置文件。在一个子网内的虚拟主机可以通过创建Linux桥实现互通。
2、带DHCP功能的扁平网络 (Flat DHCP Network):在创建虚拟主机时,nova-network会在指定的子网中为此虚拟主机分配IP和物理地址,并将这些信息告知DHCP服务器(默认是dnsmasq)DHCP服务器会监听虚拟主机所在的桥。当有虚拟主机启动时,会自动从DHCP服务器获得IP。可以看到DHCP服务器只是按照nova-network给定的列表(IP和物理地址)分发IP,如何分配还是nova-network说了算。
3、VLAN网络 (VLAN Network):这是nova-network的默认模型。每个项目里的私有IP地址只能在本项目的vlan里访问。与项目对应的vlan需要子网,这个子网是由管理员动态分配给项目的。与带DHCP功能的扁平网络类似,子网内的IP地址也是通过DHCP服务器分发的。所有在一个子网内的虚拟主机都通过网桥互通。
Openstack的设计理念是把所有的组件当做服务来注册的。
Neutron就是网络服务。它将网络、子网、端口和路由器抽象化,之后启动的虚拟主机就可以连接到这个虚拟网络上,最大的好处是这些都可视化的在Horizon里得到了实现,部署或者改变一个SDN变得非常简单
Neutron主要有以下四部分组成。
1)Neutron Server
分包含守护进程neutron-server和各种插件neutron--plugin,它们既可以安装在控制节点也可以安装在网络节点。neutron-server提供API接口,并把对API的调用请求传给已经配置好的插件进行后续处理。插件需要访问数据库来维护各种配置数据和对应关系,例如路由器、网络、子网、端口、浮动IP、安全组等等
2)插件代理 (Plugin Agent):
虚拟网络上的数据包的处理则是由这些插件代理来完成的。名字为neutron--agent。在每个计算节点和网络节点上运行。一般来说你选择了什么插件,就需要选择相应的代理。代理与Neutron Server及其插件的交互就通过消息队列来支持。
3)DHCP代理(DHCP Agent):
名字为neutron-dhcp-agent,为各个租户网络提供DHCP服务,部署在网络节点上,各个插件也是使用这一个代理。
4)3层代理 (L3 Agent): 名字为neutron-l3-agent,
为客户机访问外部网络提供3层转发服务。也部署在网络节点上。
Neutron最重要的就是两部分:API和插件。
API又分为两个部分。
API Core:暂且称之为API核。它可以看做是插件功能的最小集合,即每个插件都必须有的功能,也就是对网络、子网和端口的查询、加删和更新操作等。
API Extensions:暂称之为API扩展。它们一般是针对具体插件实现的,这样租户就可以利用这些插件独特的功能,比方说访问控制(ACL)和QoS。
插件:
- 存储当前逻辑网络的配置信息,这就需要一个数据库,比方说MySQL
- 判断和存储逻辑网络和物理网络的对应关系,比方说为一个逻辑网络选择一个vlan
- 与一种或多种交换机通信来实现这种对应关系。这一般通过宿主机上的插件代理来实现这种操作,或者远程登录到交换机上来配置。