Neutron 的设计目标是实现“网络即服务(Networking as a Service)。为了达到这一目标,在设计上遵循了基于 SDN 实现网络虚拟化的原则,在实现上充分利用了 Linux 系统上的各种网络相关的技术
OpenStack 网络服务,现已由之前的 Quantum 改名为 Neutron。Neutron 是 OpenStack 核心项目之一,提供云计算环境下的虚拟网络功能。
-
Multi-Vendor-Support:同时支持多种物理网络类型,支持 Linux Bridge、 Hyper-V 和 OVS bridge 计算节点共存;
-
Neutron-Fwaas:支持防火墙服务;
-
VPNaas:支持节点间 VPN 服务;
-
More-Vendors:更多的网络设备支持和开源 SDN 实现完善和提高,新增 加了 ML2 (The Modular Layer2) 插件
Neutron 网络创建过程
Neutron 网络目的是为 OpenStack 云更灵活地划分物理网络,在多租户环境下 提供给每个租户独立的网络环境。另外,Neutron 提供 API 来实现这种目标。 Neutron 中用户可以创建自己的网络对象,如果要和物理环境下的概念映射的话, 这个网络对象相当于一个巨大的交换机,可以拥有无限多个动态可创建和销毁的 虚拟端口
-
首先管理员拿到一组可以在互联网上寻址的 IP 地址,并且创建一个外部 网络和子网
-
租户创建一个网络和子网
-
租户创建一个路由器并且连接租户子网和外部网络
-
租户创建虚拟机
OpenStack 网络类型
一个标准的 OpenStack 网络设置有 4 个不同的物理数据中心网络:
-
管理网络:用于 OpenStack 各组件之间的内部通信
-
数据网络:用于云部署中虚拟数据之间的通信
-
外部网络:公共网络,外部或 internet 可以访问的网络
-
API 网络:暴露所有的 OpenStack APIs,包括 OpenStack 网络 API 给租户们
Neutron 服务网络管理的三种模式
Flat 模式
-
Flat 模式和 FlatDHCP 模式其实区别不大,都是基于网桥网络,只是 FLat 模式 需要管理员手动配置(包括配置网桥和外部的 DHCP 设备)
FlatDHCP 模式
-
这种部署方式的缺点----单节点故障、无二层隔离(即所有的虚拟机都在一个广播域)
VLAN 模式
-
VLAN(Virtual Local Area Network)的中文名为"虚拟局域网"。VLAN 是一种将局 域网设备从逻辑上划分成一个个网段,从而实现虚拟工作组的新兴数据交换技术
Neutron基本功能
-
提供稳定的负载均衡 API
-
支持端到端的 IPSec VPN
-
面向租户的防火墙服务
-
提供一个新的插件 ML2,
Neutron重要几部分组成
-
Neutron Server : 这 一 部 分 包 含 守 护 进 程 neutron-server 和各种插件 neutron-*-plugin, 它们 既可 以安 装在 控制 节点 也可 以安 装在 网络 节点。 neutron-server 提供 API 接口,并把对 API 的调用请求传给已经配置好的插件进行 后续处理。插件需要访问数据库来维护各种配置数据和对应关系,例如路由器、 网络、子网、端口、浮动 IP、安全组等等
-
插件代理 (Plugin Agent): 虚拟网络上的数据包的处理则是由这些插件代理来 完成的。名字为 neutron-*-agent。在每个计算节点和网络节点上运行。一般来说 你选择了什么插件,就需要选择相应的代理。代理与 Neutron Server 及其插件的 交互就通过消息队列来支持
-
DHCP 代理(DHCP Agent): 名字为 neutron-dhcp-agent,为各个租户网络提供 DHCP 服务,部署在网络节点上,各个插件也是使用这一个代理
-
3 层代理 (L3 Agent): 名字为 neutron-l3-agent, 为客户机访问外部网络提供 3 层转发服务。也部署在网络节点上
但但最重要的是API和插件
API 又分为两个部分
-
API Core:暂且称之为 API 核。它可以看做是插件功能的最小集合,即每个插件 都必须有的功能,也就是对网络、子网和端口的查询、加删和更新操作等
-
API Extensions:暂称之为 API 扩展。它们一般是针对具体插件实现的,这样租户 就可以利用这些插件独特的功能,比方说访问控制(ACL)和 QoS
插件
-
存储当前逻辑网络的配置信息,这就需要一个数据库,比方说 MySQL
-
判断和存储逻辑网络和物理网络的对应关系,比方说为一个逻辑网络选择一个 vlan
-
与一种或多种交换机通信来实现这种对应关系。这一般通过宿主机上的插件代 理来实现这种操作,或者远程登录到交换机上来配置
Neutron 的配置应该说是比 Openstack 的其他组件复杂一点。 常用的配置模型有两种,把 Neutron Server 放在控制节点上,DHCP 和 L3 代理放 在网络节点上
网络管理
查看网络列表和网络详细信息
[root@controller ~]# neutron net-list [root@controller ~]# neutron net-show [root@controller ~]# openstack network list [root@controller ~]# openstack network show
创建外部网络
[root@controller ~]# openstack network create –share –external –provider-physical-network provider –provider-network-type flat Network --provider-physical-network 指定的是物理网段 flat 指定类型 [root@controller ~]# neutron net-create --provider:network_type=flat --provider:physical_network=provider Network
[root@controller ~]# openstack network create insernet
[root@controller ~]# neutron net-create insernet
[root@controller ~]# openstack network delete insernet
[root@controller ~]# neutron net-delete insernet
子网管理
创建子网
[root@controller ~]# openstack subnet create subnet1 --network Network --subnet-range 192.168.100.0/24 --gateway=192.168.100.1 --dns 114.114.114.114 [root@controller ~]#neutron subnet-create --gateway 192.168.100.1 --dns 114.114.114.114 --name subnet1 Network 192.168.100.0/24
更新子网
[root@controller ~]# neutron subnet-update [参数] subnet1
删除子网
[root@controller ~]# openstack subnet delete subnet1
[root@controller ~]# neutron subnet-delete subnet1
路由管理
查看路由列表和详细信息
[root@controller ~]# openstack router list
[root@controller ~]# neutron router-list
创建路由器
[root@controller ~]# openstack router create router1
[root@controller ~]# neutron router-create router1
添加接口
[root@controller ~]#openstack router add subnet router subnet1 #连接内网子网接口 [root@controller ~]#openstack router set router –-external-gateway Network #连接外网接口(不是子网) [root@controller ~]#openstack port list -–router router #查看port端口 ping网关 [root@controller ~]# neutron router-gateway-set router1 Network [root@controller ~]# neutron router-interface-add router1 subnet1
删除网关
[root@controller ~]# neutron router-gateway-clear router1 Network
端口管理
查看端口的列表和详细信息
[root@controller ~]# neutron port-list
[root@controller ~]# neutron port-show <port_id>
创建端口
[root@controller ~]# neutron port-create [--fixed-ip ip_address=IP ] <network>
删除端口
[root@controller ~]#neutron port-delete <port>
浮动IP
创建浮动IP
[root@controller ~]# openstack floating ip create 外网网卡id
查询port
[root@controller ~]# openstack port list
[root@controller ~]# openstack floating ip set –-port 主机ip的端口id –-fixed-ip-address 内网ip 外网ip