传统的网络管理方式很大程度上依赖于管理员手工配置和维护各种网络硬件设备;而云环境下的网络已经变得非常复杂,特别是在多租户场景里,用户随时都可能需要创建、修改和删除网络,网络的连通性和隔离已经不太可能通过手工配置来保证了。
如何快速响应业务的需求对网络管理提出了更高的要求。传统的网络管理方式已经很难胜任这项工作,而“软件定义网络(software-defined networking, SDN)”所具有的灵活性和自动化优势使其成为云时代网络管理的主流。
Neutron的设计目的是实现“网路即服务(Networking as a Service)”。为了达到这一目标,在设计上遵循了基于SDN实现网络虚拟化的原则,在实现上充分利用了Linux系统上的各种网络相关的技术。
SDN模式服务 -- NeutronSDN(软件定义网络),通过使用它,网络管理员和云计算操作员可以通过程序来动态定义虚拟网络设备。Openstack网络中的SDN组件就是Quantum。但因为版权问题而改名为Neutron。v'vv
network是一个隔离的二层广播域。Neutron支持多种类型的network,包括local,flat,VLAN,VxLAN和GRE。
local
local网络与其他网络和节点隔离,local网络中的instance只能在位于同一节点上同一网络的instance通信,local网络主要用于单机测试。
如果openstack使用local类型的网络,那么也就是说同一个宿主机上的虚机可以通信,不能跨宿主机。
flat
flat网络是无vlan tagging的网络。flat网络中的instance能与位于同一网络的instance通信,并且可以跨多个节点。
使用flat类型的网络,不同宿主机上的虚机可以通信。两台宿主机的虚机必须在同一个网络段。如果想在不同vlan可以通信,就得用vlan类型了。
vlan
vlan网络是具有802.1q tagging的网络。vlan是一个二层的广播域,同一vlan中的instance可以通信,不同vlan只能通过router通信。vlan网络可跨节点,是应用最广泛的网络类型。
如果两台虚机在同一个主机上,或者在不同主机但是在同一个网络端,我们不想让他们相同,就要打一个vlan标记。
vxlan
vxlan是基于隧道技术的overlay网络。vxlan网络通过唯一的segmentation ID(也叫VNI)与其他vxlan网路区分。vxlan中数据包会通过VNI封装成UDP包进行传输。因为二层包通过封装在三层传输,能够克服vlan和物理网路基础设置的限制。
gre
gre是与vxlan类似的一种overlay网络。主要区别在于使用IP包而非UDP进行封装。
不同network之间在二层上是隔离的。
subnet是一个IPv4或者IPv6地址段。instance的IP从subnet中分配。每个subnet需要定义IP地址的范围和掩码。
network与subnet是1对多关系。一个subnet只能属于某个network;一个network可以有多个subnet,这些subnet可以是不同的IP段,但不能重叠。下面的配置是有效的:
network A subnet A-a: 10.10.1.0/24 {"start":"10.10.1.1", "end":"10.10.1.50"}
subnet A-a: 10.10.2.0/24 {"start":"10.10.2.1", "end":"10.10.2.50"}
但下面的配置则无效,因为subnet有重叠
network A subnet A-a: 10.10.1.0/24 {"start":"10.10.1.1", "end":"10.10.1.50"}
subnet A-a: 10.10.1.0/24 {"start":"10.10.1.51", "end":"10.10.1.100"}
这里不是判断IP是否有重叠,而是subnet的CIDR重叠(都是10.10.1.0/24)。但是,如果subnet在不同的network中,CIDR和IP都是可以重叠的,比如
network A subnet A-a: 10.10.1.0/24 {"start":"10.10.1.1", "end":"10.10.1.50"}
network B subnet B-a: 10.10.1.0/24 {"start":"10.10.1.1", "end":"10.10.1.50"}
这里大家不免会疑惑:如果上面的IP地址是可以重叠的,那么就可能存在具有相同IP的两个instance,这样会不会冲突?简单的回答是:不会!
具体原因: 因为Neutron的router是通过linux network namespace实现的。network namespace是一种网络的隔离机制。通过它,每个router有自己独立的路由表。上面的配置有两种结果:
1、如果两个subnet是通过同一个router路由,根据router的配置,只有指定的一个subnet可被路由。
2、如果上面的两个subnet是通过不同router路由,因为router的路由表是独立的,所以两个subnet都可以被路由。
Neutron为整个OpenStack环境提供网络支持,包括二层交换,三层路由,负载均衡,防火墙和VPN等。Neutron提供了一个灵活的框架,通过配置,无论是开源还是商业软件都可以被用来实现这些功能。
二层交换Switching
Nova的Instance是通过虚拟交换机连接到虚拟二层网络的。Neutron支持多种虚拟交换机,包括linux原生的Linux Bridge和Open vSwitch。Open vSwitch(OVS)是一个开源的虚拟交换机,它支持标准的管理接口和协议。
利用Linux Bridge 和 OVS,Neutron除了可以创建传统的VLAN网络,还可以创建基于隧道技术的Overlay网络,比如VxLAN和GRE(Linux Bridge目前只支持VxLAN)。
三层路由Routing
Instance可以配置不同网段的IP,Neutron的router(虚拟路由器)实现instance跨网段通信。router通过IP forwarding,iptables等技术来实现路由和NAT。我们将在后面章节讨论如何在Neutron中配置router来实现instance之间,以及与外部网络的通信。
负载均衡Load Balancing
Openstack在Grizzly版本第一次引入了Load-Balancing-as-a-Service(LBaas),提供了将负载分发到多个instance的能力。LBaaS支持多种负载均衡产品和方案,不同的实现以Plugin的形式集成到Neutron,目前默认的Plugin是HAProxy。
防火墙 Firewalling
Neutron通过下面两种方式来保障instance和网络的安全性。
Security Group: 通过iptables限制进出instance的网络包。
Firewall-as-a-Service:FWaaS,限制进出虚拟路由器的网络包,也是通过iptables实现。
Neutron优点:
Openstack中的SDN组件架构也属于可插拔类型。通过各种插件可以管控不同种类的交换机、路由器、防火墙、负载均衡器并实现firewall as a service等许多功能。通过软件来定义的网络,可以对整个云计算设施进行更为精细的掌控。
控制节点: 部署的服务包括:neutron server,core plugin的agent和service plugin的agent。
计算节点:部署core plugin的agent,负责提供二层网络功能。
说明:
1、core plugin和service plugin已经集成到neutron server,不需要独立的plugin服务。
2、控制节点和计算节点都需要部署core plugin的agent,因为通过该agent控制节点与计算节点才能建立二层连接。
3、可以部署多个控制节点和计算节点。
OpenStack至少包含下面几类网络流量
Management网络
API网络
一般把management和api合到一起,都用一个网络端的ip,即一块网卡。
VM网络
External网络
这几类网络只是逻辑上的划分,物理实现上有非常大的自由度。
我们可以为每种网络分配单独的网卡;也可以多种网络共同使用一个网卡;为提高带宽和硬件冗余,可以使用bonding技术将多个网卡绑定成一个逻辑网卡。
1、控制节点3网卡(eth0,eth1,eth2),计算节点2网卡(eth0,eth1)。
2、合并Management 和 API网络,使用eth0.
3、VM网络使用eth1.
4、控制节点的eth2与External网络连接。
计算节点可以不需要第三块网卡,它要访问外网,把流量送回到控制节点,再有控制节点的第三块网卡访问外网。
也有在计算节点安装第三块网卡的,叫“分布式路由”。
分割线上方的网络由网络管理员配置,主要涉及Management, API 和 external网络。配置的内容包括节点上的物理网卡,物理交换机和外部路由器,防火墙以及物理连线等。
分割线下方是VM网络,由Neutron管理。我们只需要通过Web GUI或者CLI操作,Neutron会负责实现。
与OpenStack的其他服务的设计思路一样,Neutron也是采用分布式架构,由多个组件(子服务)共同对外提供网络服务。
Neutron由如下组件构成:
登陆mysql命令行,创建数据库 neutron, 创建用户neutron并授权。
openstack中创建neutron用户,设置为管理严。
openstack创建 neutron服务,创建其三个endpoint,私网、管理网、外网,端口9696.
yum安装软件包。
修改配置文件。
配置nova的neutron内容