Openstack Neutron
- 前言
- linux 虚拟网络
- openstack 网络基础服务
- Neutron 插件、代理与服务
- OpenStack-neutron组件部署
- 创建数据库neutron,并进行授权
- 创建neutron用户
- 添加到service项目
- 创建network服务
- 注册API到neutron服务
- 安装提供者网络(桥接)
- 更改主配置文件neutron.conf
- 修改 ML2 plugin 配置文件 ml2_conf.ini
- 修改 linux bridge network provider 配置文件
- 修改内核参数
- 配置Linuxbridge接口驱动和外部网络网桥
- 修改dhcp_agent 配置文件
- 配置元数据代理、用于配置桥接与自服务网络的通用配置
- 修改nova配置文件,用于neutron交互
- 创建ML2插件文件符号连接
- 初始化数据库
- 重启计算节点nova-api服务
- 开启neutron服务、设置开机自启动
- 启动第三层服务
- c1-c2 节点操作
- 验证服务组件【ct节点】
- 小结
前言
网络是openstack最重要的资源之一,没有网络,虚拟机将被隔离。Openstack的网络服务最
主要的功能就是为虚拟机实例提供网络连接
,最初由nova的一个单独榜块nova-compute实现,但是nova-compute支持的网络服务有限,无法适应大规模、高密度和多项目的云计算,现已被专门的网络服务项目Neutron所取代。
Neutron为整个openstack环境提供软件定义网络支持,主要功能包括二层交换、三层路由、防火墙、VPN,以及负载均衡等。Neutror在由其他openstack服务(如nova)管理的网络接口设备(如虚拟网卡)之间提供网络连接即服务。
linux 虚拟网络
openstack网络服务
最核心的任务就是对二层网络进行抽象和管理
linux 虚拟网桥
与物理机不同,虚拟机并没有硬件设备,但是也要与物理机和其他虚拟机进行通信
。Linux KVM的解决方案是提供虚拟网桥设备,像物理交换机具有若干网络接口(网卡)一样,在网桥上创建多个虚拟的网络接口,每个网络接口再与KVM虚拟机的网卡相连。
在Linux的KVM虚拟系统中,为支持虚拟机的网络通信,网桥接口的名称通常以vnet开头
,加上从0开始顺序编号,如vnet0, vnet1,在创建虚拟机时会自动创建这些接口。虚拟网桥br1和br2分别连接到物理主机的物理网卡1和物理网卡2。
虚拟局域网
一个网桥可以桥接若干虚拟机,当多个虚拟机连接在同一网桥时,每个虚拟机发出的广播包会引发广播风暴,影响虚拟机的网络性能。通常使用虚拟局域网(VLAN)将部分虚拟机的广播包限制在特定范围内,不影响其他虚拟机的网络通信。
通常使用VLAN将部分虚拟机的广播包限制在特定范围内,不影响其他虚拟机的网络通信。
将多个虚拟机划分到不同的VLAN中,同一VLAN的虚拟机相当于连接同一网桥上。
在Linux虚拟化环境中,通常会将网桥与VLAN对应起来,也就是将网桥划分到不同的VLAN中
VLAN协议为802.1Q, VLAN是具有802.1Q标签的网络。
linux网路虚拟化
实现虚拟化后,多个物理服务器可以被虚拟机取代,部署在同一台物理服务器上。虚拟机由虚拟机管理器(Hypervisor)实现,
在Linux系统中Hypervisor通常采用kvm
。在对服务器进行虚拟化的同时,也对网络进行虚拟化。
Hypervisor为虚拟机创建一个或多个虚拟网卡(vNIC)
,虚拟网卡等同于虚拟机的物理网卡。物理交换机在虚拟网络中被虚拟为虚拟交换机(vSwitch),虚拟机的虚拟网卡连接到虚拟交换机上,虚拟机交换机再通过物理主机的物理网卡连接到外部网络。
对于物理网络来说,虚拟化的主要工作是对网卡和交换设备的虚拟化。
开放虚拟交换机
开放虚拟交换机(Open vSwitch)是与硬件交换机具备相同特性,可在不同虚拟平台之间移植,
具有产品级质量的虚拟交换机,适合在生产环境中部署。
交换设备的虚拟化对虚拟网络来说至关重要。在传统的数据中心,管理员可以对物理交换机进行配置,控制服务器的网络接入,实现网络隔离、流量监控、QoS配置、流量优化等目标。
在云环境中,采用Open vSwitch技术的虚拟交换机可使虚拟网络的管理、网络状态和流量的监控得以轻松实现。
Open Switch在云环境中的虚拟化平台上实现分布式虚拟交换机,可以将不同主机上的OpenvSwitch交换机连接起来,
形成一个大规模的虚拟网络
什么是 QOS?
服务质量,指一个网络能够利用各种基础技术,
为指定的网络通信提供更好的服务能力,
是网络的一种安全机制,用来解决网络延迟和阻塞等问题的一种技术
功能:
尽力避免网络拥塞
在不能避免拥塞时对带宽进行有效管理
降低报文丢包率
调控IP网络流量
为 特定用户 或特定业务提供专用带宽
支撑网络上的实事业务
Qos不能创造带宽,只能是带宽的 分配更加合理
openstack 网络基础服务
OpenStack网络服务提供一个APl让用户在云中建立和定义网络连接。该网络服务的项目名称是Neutron.
OpenStack网络负责创建和管理虚拟网络基础架构,包括网络、交换机、子网和路由器,这些设备由OpenStack计算服务Nova管理。同时,网络服务还提供防火墙和VPN这样的高级服务。可以将网络服案部署到特定主机上。OpenStack网络组件与身份服务、计算服务和仪表板等多个OpenStack组件进行整合
1.openstack 中提供网络连接、相关网络技术、拓扑结构的服务是neutron 2.neutron 可以提高基础网络服务和高级网络服务,单都是由nova进行管理 3.neutron 会为其他组件、服务、设备提供服务(集成)
neutron 网络结构
一个简化的典型的Neutron网络结构如图所示,包括一个外部网络、一个内部网络和一个路由器。
外部网络负责连接OpenStack项目之外的网络环境,又称公共网络。与其他网络不同,它不仅仅是一个虚拟网络 更重要的是,它表示OpenStack网络能被外部物理网络接入并访问。外部网络可能是企业的局域网(Intranet) ,也可能是互联网(Internet) ,这类网络并不是由Neutron直接管理。
内部网络完全由软件定义,又称私有网络。它是虚拟机实例所在的网络,能够直接连接到虚拟机。项目用户可以创建自己的内部网络。
默认情况下,项目之间的内部网络是相互隔离的,不能共享
。该网络由Neutron直接配置与管理。
路由器用于将内部网络与外部网络连接起来,因此,要使虚拟机访问外部网络,必须创建一个路由器。
Neutron需要实现的主要是内部网络和路由器
。内部网络是对二层(L2)网络的抽象,模拟物理网络的二层局域网,对于项目来说,它是私有的。路由器则是对三层(L3)网络的抽象,模拟物理路由器,为用户提供路由、NAT等服务。
外部访问内部,不是由neutron直接负责
网络子网与端口
网路:一个隔离的二层广播域,类似交换机中的VLAN, Neutron支持多种类型的网络,如FLATVLAN, VXLAN等。
子网:一个IPV4或者IPV6的地址段及其相关配置状态。虚拟机实例的IP地址从子网中分配。每个子网需要定义IP地址的范围和掩码(这个有点像DHCP中定义的作用域的概念)。
端口:连接设备的连接点,类似虚拟交换机上的一个网络端口。端口定义了MAC地址和IP地址,当虚拟机的虚拟网卡绑定到端口时,端口会将MAC和IP分配给该虚拟网卡。
通常可以创建和配置网络、子网和端口来为项目搭建虚拟网络。网络必须属于某个项目,一个项目中可以创建多个网络。一个子网只能属于某个网络,一个网络可以有多个子网。一个端口必须属于某个子网,一个子网可以有多个端口。
网络拓扑类型
Local:
Local网络与其他网络和节点隔离。该网络中的虚拟机实例只能与位于同一节点上同一网络的虚拟机实例通信,实际意义不大,主要用于测试环境。位于同-Local网络的实例之间可以通信,位于不同Local网络的示例之间无法通信。一个Local网络只能位于同一个物理节点上,无法跨节点部署。
Flat
Flat是一种简单的扁平网络拓扑,所有的虚拟机实例都连接在同一网络中,能与位于同一网络的实例进行通信,并且可以跨多个节点。这种网络不使用VLAN,没有对数据包打VLAN标签,无法进行网络隔离。Flat是基于不使用VLAN的物理网络实施的虚拟网络。每个物理网络最多只能实现一个虚拟网络。
VLAN
VLAN是支持802.1q协议的虚拟局域网,使用VLAN标签标记数据包,实现网络隔离。同-VLAN网络中的实例可以通信,不同VLAN网络中的实例只能通过路由器来通信。VLAN网络可以跨节点,是应用最广泛的网络拓扑类型之一。
VXLAN
VXLAN (虚拟扩展局域网)可以看作是VLAN的一种扩展,相比于VLAN,它有更大的扩展性和灵活性,是目前支持大规模多租房网络环境的解决方案。由于VLAN包头部限长是12位,导致VLAN的数量限制是4096 (2^12)个,不能满足网络空间日益增长的需求。目前VXLAN的封包头部有24位用作VXLAN标识符(VNID)来区分VXLAN网段,最多可以支持16777216 (2^24)个网段。
VXLAN使用STP防止环路,导致一半的网络路径被阻断。VXLAN的数据包是封装到UDP通过三层传输和转发的,可以完整地利用三层路由,能克服VLAN和物理网络基础设施的限制,更好地利用已有的网络路径。
GRE
GRE (通用路由封装)是用一种网络层协议去封装另一种网络层协议的隧道技术。GRE的隧道由两端的源IP地址和目的IP地址定义,它允许用户使用IP封装IP等协议,并支持全部的路由协议。在OpenStack环境中使用GRE意味着"IP over IP" ,GRE与VXLAN的主要区别在于,它是使用IP包而非UDP进行封装的。
GENEVE
GENEVE(通用网络虚拟封装)的目标宣称是仅定义封装数据格式,尽可能实现数据格式的弹性和扩展性GENEVE封装的包通过标准的网络设备传送,即通过单播或多播寻址,包从一个隧道端点传送到另一个或多个隧道端点。GENEVE帧格式由一个封装在IPV4或IPV6的UDP里的简化的隧道头部组成。GENEVE推出的主要目的是为了解决封装时添加的元数据信息问题(到底多少位,么用GENEVE自动识别与调整) ,以适应各种虚拟化场景。
总结
随着云计算、大数据、移动互联网等新技术的普及,网络虚拟化技术的趋势在传统单层网络基础上叠加一层逻辑网络。这将网络分为两个层次,传统单层网络称为Underlay (承载网络)
,叠加其上的逻辑网络称为Overlay (叠加网络或覆盖网络)
。 Overlay网络的节点通过虚拟的或逻辑的连接进行通信,每一个虚拟的或逻辑的连接对应于Underlay网络的一条路径,由多个前后衔接的连接组成。Overlay网络无须对基础网络进行大规模修改,不用关心这些底层实现,是实现云网融合的关键
。
VXLAN GRE GENEVE 都是其隧道结束的overlay网络
网络基本框架
Neutron仅有一个主要服务进程neutron-server,它是运行在控制节点上的,对外提供Openstack网络AP作为访问Neutron的入口,收到请求后调用插件进行处理,最终由计算节点和网络节点上的各种代理完成请求。
网络提供者是指提供OpenStack网络服务的虚拟或物理网络设备,如Linux Bridge, Open vSwitch,或者其他支持Neutron的物理交换机。
与其他服务一样, Neutron的各组件服务之间需要相互协调和通信, neutron-server,插件和代理之间通过消息队列进行通信和相互调用。
数据库用于存放OpenStack的网络状态信息,包括网络、子网、端口、路由器等。
客户端是指使用Neutron服务的应用程序,可以是命令行工具、Horizon和Nova计算服务等。
nova-api api 接受/相应请求,请求转换过命令之后,给conductor去协调分配任务,调度器compute 去写入db
neutron-server 监听API 接受/相应请求,根据请求类型,分配相应的插件,去控制对应的代理,实现网络需求代理:会需要网络提供者给它提供技术/功能直接
Nentron-server
RESTful API:直接对客户端提供API服务,属于最前端的API,包括Core API和Extension API两种类型. Core API提供管理网络、子网和端口核心资源的RESTful API; Extension API则提供管理路由器、防火墙、负载均衡、安全组等扩展资源的RESTful API
Common Service:通用服务,负责对API请求进行检验、认证,并授权。
Neutron Core:核心处理程序,调用相应的插件API来处理AP请求。
Plugin API:定义插件的抽象功能集合,提供调用插件的API接口,包括Core Plugin API和ExtensionPlugin API两种类型,Neutron Core通过Core Plugin API调用相应的Core Plugin,通过Extension
Neutron 设计原则
插件是Neutron的一种API的后端实现,目的是增强扩展性
。插件按照功能可以分为Core Plugin和Service Plugin两种类型。Core Plugin提供基础二层虚拟网络支持,实现网络、子网和端口等核心资源抽象。Service Plugin是指Core Plugin之外的其他插件,提供路由器、防火墙、安全组、负载均衡等服务支持。从H版开始, Neutron提供一个名为L3 Router Service Plugin的插件支持路由服务。
插件的
调用由neutron-server的Core Plugin AP和Extension Plugin API调用
,用于确定具体的网络功能
,即要配置什么样的网络。
工作流程:插件处理neutron-server发来的请求,主要职责是在数据库中维护Neutron网络的状态信息(更新Neutron数据库) ,通知相应的代理实现具体的网络功能。每一个插件支持一组API资源并完成特定的操作,这些操作最终由插件通过RPC调用相应的代理来完成。
代理处理插件转来的请求,负责在网络提供者上真正实现各种网络功能
。代理使用物理网络设备或虚拟化技术完成实际的操作任务,如用于路由器具体操作的L3代理。
Neutron 插件、代理与服务
ML2插件
Neutron可以通过开发不同的插件和代理来支持不同的网络技术,这是一种相当开放的架构。不过随着所支持的网络提供者种类的增加,开发人员发现了两个突出的问题。
一个问题是多种网络提供者无法共存
。Core Plugin负责管理和维护Neutron二层虚拟网络的状态信息,一个Neutron网络只能由一个插件管理,而Core Plugin插件与相应的代理是一对应的。如果选择Linux Bridge插件,则只能选择Linux Bridge代理
,必须在OpenStack的所有节点上使用Linux Bridge插件,则只能选择Linux Bridge代理,必须在OpenStackR的所有节点上使用Linux Bridge作为虚拟交换机。另一个问题是开发新的插件的工作量太大,而所有传统的Core Plugin之间存在大量反复代码。
为解决这两个问题,从OpenStack的H版开始, Neutron实现了一个插件ML2,旨在取代所有的Core Plugin,允许在OpenStack网络中同时使用多种二层网络技术,
不同的节点可以使用不同的网络实现机制
。ML2能够与现有的代理无缝集成,以前使用的代理无须变更,只需将传统的Core Plugin替换成ML2
, ML2使得对新的网络技术的支持更为简单,无须从头开发Core Plugin,只需要开发相应的机制驱动,大大减少编写和的代码
类型驱动(Type Driver)
: Neytron支持的每一种网络类型邹有一个对应的ML2类型驱动,类型驱动负责维护网络类型的状态、执行验证、创建网络等工作。
机制驱动(Mechansim Driver)
: Neutron支持的每一种网络机制都有一个对应的ML2机制驱动。机制驱动负责获取由类型驱动维护的网络状态,并确保在相应网络设备(物理或虚拟的)上正确实现这些状态。目前Neutron已经实现的网络机制有以下3种类型:基于代理的: Linux Bridge, Open vSwitch等。基于控制器的: OpenDaylight,VMWare NSX等。基于物理交换机的: Cisco Nexus, Arista, Mellanox等。
l类型驱动:网路类型的控制
机制驱动:二层网络技术的控制
扩展资源: ML2作为一个Core Plugin,在实现网络、子网和端口核心资源的同时,也实现包括端口绑定、安全组等部分扩展资源
Linux Bridge 代理
Linux Bridge可以将一台主机上的多个网卡桥接起来,充当一台交换机。它既可以桥接物理网卡,又可以是虚拟网卡。用于桥接虚拟机网卡(虚拟网卡)的是Tap接口,这是一个虚拟出来的网络设备,称为Tap设备,作为网桥的一个端口。Tap接口在逻辑上与物理接口具有相同的功能,可以接收和发送数据包。
Open vSwitch 代理
与Linux Bridge相比, Open vSwitch (OVS)具有集中管控功能,而且性能更加优化,支持更多的功能,目前在OpenStack领域成为主流。它支持Local, Flat, VLAN, VXLAN, GRE和GENEVE等所有网络类型。
DHCP 代理
主要组件:
DHCP 代理
DHCP 驱动
DHCP代理调度器
DHCP 代理主要任务
定期报告 DHCP 代理服务器状态
检测DHCP DISCOVER请求
DHCP代理配置文件
interfacez-driver 用来创建TAP设备的接口驱动
DHCP_driver指定DHCP驱动
OpenStack-neutron组件部署
创建数据库neutron,并进行授权
mysql -u root -p1
CREATE DATABASE neutron;
GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'localhost' IDENTIFIED BY 'NEUTRON_DBPASS';
GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'%' IDENTIFIED BY 'NEUTRON_DBPASS';
flush privileges;
exit
创建neutron用户
#用于在keystone做认证
openstack user create --domain default --password NEUTRON_PASS neutron
添加到service项目
#将neutron用户添加到service项目中拥有管理员权限
openstack role add --project service --user neutron admin
创建network服务
#服务类型为network
openstack service create --name neutron --description "OpenStack Networking" network
注册API到neutron服务
#给neutron服务关联端口,即添加endpoint
openstack endpoint create --region RegionOne network public http://ct:9696
openstack endpoint create --region RegionOne network internal http://ct:9696
openstack endpoint create --region RegionOne network admin http://ct:9696
安装提供者网络(桥接)
#ebtables包是用来管理iptables规则的
yum -y install openstack-neutron openstack-neutron-ml2 openstack-neutron-linuxbridge ebtables conntrack-tools
更改主配置文件neutron.conf
cp -a /etc/neutron/neutron.conf{,.bak}
grep -Ev '^$|#' /etc/neutron/neutron.conf.bak > /etc/neutron/neutron.conf
openstack-config --set /etc/neutron/neutron.conf database connection mysql+pymysql://neutron:NEUTRON_DBPASS@ct/neutron
openstack-config --set /etc/neutron/neutron.conf DEFAULT core_plugin ml2
openstack-config --set /etc/neutron/neutron.conf DEFAULT service_plugins router
openstack-config --set /etc/neutron/neutron.conf DEFAULT allow_overlapping_ips true
openstack-config --set /etc/neutron/neutron.conf DEFAULT transport_url rabbit://openstack:RABBIT_PASS@ct
openstack-config --set /etc/neutron/neutron.conf DEFAULT auth_strategy keystone
openstack-config --set /etc/neutron/neutron.conf DEFAULT notify_nova_on_port_status_changes true
openstack-config --set /etc/neutron/neutron.conf DEFAULT notify_nova_on_port_data_changes true
openstack-config --set /etc/neutron/neutron.conf keystone_authtoken www_authenticate_uri http://ct:5000
openstack-config --set /etc/neutron/neutron.conf keystone_authtoken auth_url http://ct:5000
openstack-config --set /etc/neutron/neutron.conf keystone_authtoken memcached_servers ct:11211
openstack-config --set /etc/neutron/neutron.conf keystone_authtoken auth_type password
openstack-config --set /etc/neutron/neutron.conf keystone_authtoken project_domain_name default
openstack-config --set /etc/neutron/neutron.conf keystone_authtoken user_domain_name default
openstack-config --set /etc/neutron/neutron.conf keystone_authtoken project_name service
openstack-config --set /etc/neutron/neutron.conf keystone_authtoken username neutron
openstack-config --set /etc/neutron/neutron.conf keystone_authtoken password NEUTRON_PASS
openstack-config --set /etc/neutron/neutron.conf oslo_concurrency lock_path /var/lib/neutron/tmp
openstack-config --set /etc/neutron/neutron.conf nova auth_url http://ct:5000
openstack-config --set /etc/neutron/neutron.conf nova auth_type password
openstack-config --set /etc/neutron/neutron.conf nova project_domain_name default
openstack-config --set /etc/neutron/neutron.conf nova user_domain_name default
openstack-config --set /etc/neutron/neutron.conf nova region_name RegionOne
openstack-config --set /etc/neutron/neutron.conf nova project_name service
openstack-config --set /etc/neutron/neutron.conf nova username nova
openstack-config --set /etc/neutron/neutron.conf nova password NOVA_PASS
[DEFAULT]
core_plugin = ml2 #启用二层网络插件
service_plugins = router #启用三层网络插件
allow_overlapping_ips = true
transport_url = rabbit://openstack:RABBIT_PASS@ct #配置rabbitmq连接
auth_strategy = keystone #认证的方式:keystone
notify_nova_on_port_status_changes = true #当网络接口发生变化时,通知给计算节点
notify_nova_on_port_data_changes = true #当端口数据发生变化,通知计算节点
[cors]
[database] #配置数据库连接
connection = mysql+pymysql://neutron:NEUTRON_DBPASS@ct/neutron
[keystone_authtoken] #配置keystone认证信息
www_authenticate_uri = http://ct:5000
auth_url = http://ct:5000
memcached_servers = ct:11211
auth_type = password
project_domain_name = default
user_domain_name = default
project_name = service
username = neutron
password = NEUTRON_PASS
[oslo_concurrency] #配置锁路径
lock_path = /var/lib/neutron/tmp
[oslo_messaging_amqp]
[oslo_messaging_kafka]
[oslo_messaging_notifications]
[oslo_messaging_rabbit]
[oslo_middleware]
[oslo_policy]
[privsep]
[ssl]
[nova] #neutron需要给nova返回数据
auth_url = http://ct:5000 #到keystone认证nova
auth_type = password
project_domain_name = default
user_domain_name = default
region_name = RegionOne
project_name = service
username = nova #通过nova的用户名和密码到keystone验证nova的token
password = NOVA_PASS
修改 ML2 plugin 配置文件 ml2_conf.ini
cp -a /etc/neutron/plugins/ml2/ml2_conf.ini{,.bak}
grep -Ev '^$|#' /etc/neutron/plugins/ml2/ml2_conf.ini.bak > /etc/neutron/plugins/ml2/ml2_conf.ini
openstack-config --set /etc/neutron/plugins/ml2/ml2_conf.ini ml2 type_drivers flat,vlan,vxlan
openstack-config --set /etc/neutron/plugins/ml2/ml2_conf.ini ml2 tenant_network_types vxlan
openstack-config --set /etc/neutron/plugins/ml2/ml2_conf.ini ml2 mechanism_drivers linuxbridge,l2population
openstack-config --set /etc/neutron/plugins/ml2/ml2_conf.ini ml2 extension_drivers port_security
openstack-config --set /etc/neutron/plugins/ml2/ml2_conf.ini ml2_type_flat flat_networks provider
openstack-config --set /etc/neutron/plugins/ml2/ml2_conf.ini ml2_type_vxlan vni_ranges 1:1000
openstack-config --set /etc/neutron/plugins/ml2/ml2_conf.ini securitygroup enable_ipset true
[DEFAULT]
[ml2]
type_drivers = flat,vlan,vxlan #配置类型驱动;单一扁平网络(桥接)和vlan;让二层网络支持桥接,支持基于vlan做子网划分
tenant_network_types = vxlan #租户网络类型(vxlan)
mechanism_drivers = linuxbridge,l2population #启用Linuxbridge和l2机制,(l2population机制是为了简化网络通信拓扑,减少网络广播):
extension_drivers = port_security #启用端口安全扩展驱动程序,基于iptables实现访问控制;但配置了扩展安全组会导致一些端口限制,造成一些服务无法启动
[ml2_type_flat]
flat_networks = provider #配置公共虚拟网络为flat网络
[ml2_type_vxlan]
vni_ranges = 1:1000 #为私有网络配置VXLAN网络识别的网络范围
[securitygroup]
enable_ipset = true #启用 ipset 增加安全组的方便性
修改 linux bridge network provider 配置文件
cp -a /etc/neutron/plugins/ml2/linuxbridge_agent.ini{,.bak}
grep -Ev '^$|#' /etc/neutron/plugins/ml2/linuxbridge_agent.ini.bak > /etc/neutron/plugins/ml2/linuxbridge_agent.ini
openstack-config --set /etc/neutron/plugins/ml2/linuxbridge_agent.ini linux_bridge physical_interface_mappings provider:eth1 ###eth1网卡名称
openstack-config --set /etc/neutron/plugins/ml2/linuxbridge_agent.ini vxlan enable_vxlan true
openstack-config --set /etc/neutron/plugins/ml2/linuxbridge_agent.ini vxlan local_ip 192.168.100.11 ##控制节点IP地址
openstack-config --set /etc/neutron/plugins/ml2/linuxbridge_agent.ini vxlan l2_population true
openstack-config --set /etc/neutron/plugins/ml2/linuxbridge_agent.ini securitygroup enable_security_group true
openstack-config --set /etc/neutron/plugins/ml2/linuxbridge_agent.ini securitygroup firewall_driver neutron.agent.linux.iptables_firewall.IptablesFirewallDriver
[DEFAULT]
[linux_bridge]
physical_interface_mappings = provider:eth1 #指定上个文件中的桥接网络名称,与eth0物理网卡做关联,后期给虚拟机分配external网络,就可以通过eth0上外网;物理网卡有可能是bind0、br0等
[vxlan] #启用VXLAN覆盖网络,配置覆盖网络的物理网络接口的IP地址,启用layer-2 population
enable_vxlan = true #允许用户创建自定义网络(3层网络)
local_ip = 192.168.100.11
l2_population = true
[securitygroup] #启用安全组并配置 Linux 桥接 iptables 防火墙驱动
enable_security_group = true
firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver
修改内核参数
echo 'net.bridge.bridge-nf-call-iptables=1' >> /etc/sysctl.conf
echo 'net.bridge.bridge-nf-call-ip6tables=1' >> /etc/sysctl.conf
modprobe br_netfilter
sysctl -p
`modprobe br_netfilter #表示向内核加入参数`
配置Linuxbridge接口驱动和外部网络网桥
cp -a /etc/neutron/l3_agent.ini{,.bak}
grep -Ev '^$|#' /etc/neutron/l3_agent.ini.bak > /etc/neutron/l3_agent.ini
openstack-config --set /etc/neutron/l3_agent.ini DEFAULT interface_driver linuxbridge
修改dhcp_agent 配置文件
cp -a /etc/neutron/dhcp_agent.ini{,.bak}
grep -Ev '^$|#' /etc/neutron/dhcp_agent.ini.bak > /etc/neutron/dhcp_agent.ini
openstack-config --set /etc/neutron/dhcp_agent.ini DEFAULT interface_driver linuxbridge
openstack-config --set /etc/neutron/dhcp_agent.ini DEFAULT dhcp_driver neutron.agent.linux.dhcp.Dnsmasq
openstack-config --set /etc/neutron/dhcp_agent.ini DEFAULT enable_isolated_metadata true
[DEFAULT]
interface_driver = linuxbridge #指定默认接口驱动为linux网桥
dhcp_driver = neutron.agent.linux.dhcp.Dnsmasq #指定DHCP驱动
enable_isolated_metadata = true #开启iso元数据
配置元数据代理、用于配置桥接与自服务网络的通用配置
cp -a /etc/neutron/metadata_agent.ini{,.bak}
grep -Ev '^$|#' /etc/neutron/metadata_agent.ini.bak > /etc/neutron/metadata_agent.ini
openstack-config --set /etc/neutron/metadata_agent.ini DEFAULT nova_metadata_host ct
openstack-config --set /etc/neutron/metadata_agent.ini DEFAULT metadata_proxy_shared_secret METADATA_SECRET
[DEFAULT]
nova_metadata_host = ct
metadata_proxy_shared_secret = METADATA_SECRET
修改nova配置文件,用于neutron交互
openstack-config --set /etc/nova/nova.conf neutron url http://ct:9696
openstack-config --set /etc/nova/nova.conf neutron auth_url http://ct:5000
openstack-config --set /etc/nova/nova.conf neutron auth_type password
openstack-config --set /etc/nova/nova.conf neutron project_domain_name default
openstack-config --set /etc/nova/nova.conf neutron user_domain_name default
openstack-config --set /etc/nova/nova.conf neutron region_name RegionOne
openstack-config --set /etc/nova/nova.conf neutron project_name service
openstack-config --set /etc/nova/nova.conf neutron username neutron
openstack-config --set /etc/nova/nova.conf neutron password NEUTRON_PASS
openstack-config --set /etc/nova/nova.conf neutron service_metadata_proxy true
openstack-config --set /etc/nova/nova.conf neutron metadata_proxy_shared_secret METADATA_SECRET
创建ML2插件文件符号连接
#网络服务初始化脚本需要/etc/neutron/plugin.ini指向ML2插件配置文件的符号链接
ln -s /etc/neutron/plugins/ml2/ml2_conf.ini /etc/neutron/plugin.ini
初始化数据库
su -s /bin/sh -c "neutron-db-manage --config-file /etc/neutron/neutron.conf \
--config-file /etc/neutron/plugins/ml2/ml2_conf.ini upgrade head" neutron
重启计算节点nova-api服务
systemctl restart openstack-nova-api.service
开启neutron服务、设置开机自启动
systemctl enable neutron-server.service \
neutron-linuxbridge-agent.service neutron-dhcp-agent.service \
neutron-metadata-agent.service
systemctl start neutron-server.service \
neutron-linuxbridge-agent.service neutron-dhcp-agent.service \
neutron-metadata-agent.service
netstat -anutp |grep 9696
启动第三层服务
systemctl enable neutron-l3-agent.service
systemctl restart neutron-l3-agent.service
c1-c2 节点操作
安装neutron 相关服务
yum -y install openstack-neutron-linuxbridge ebtables ipset conntrack-tools
#ipset:iptables的扩展,允许匹配规则的集合而不仅仅是一个IP
修改neutron.conf文件(c1-c2 节点操作)
cp -a /etc/neutron/neutron.conf{,.bak}
grep -Ev '^$|#' /etc/neutron/neutron.conf.bak > /etc/neutron/neutron.conf
openstack-config --set /etc/neutron/neutron.conf DEFAULT transport_url rabbit://openstack:RABBIT_PASS@ct
openstack-config --set /etc/neutron/neutron.conf DEFAULT auth_strategy keystone
openstack-config --set /etc/neutron/neutron.conf keystone_authtoken www_authenticate_uri http://ct:5000
openstack-config --set /etc/neutron/neutron.conf keystone_authtoken auth_url http://ct:5000
openstack-config --set /etc/neutron/neutron.conf keystone_authtoken memcached_servers ct:11211
openstack-config --set /etc/neutron/neutron.conf keystone_authtoken auth_type password
openstack-config --set /etc/neutron/neutron.conf keystone_authtoken project_domain_name default
openstack-config --set /etc/neutron/neutron.conf keystone_authtoken user_domain_name default
openstack-config --set /etc/neutron/neutron.conf keystone_authtoken project_name service
openstack-config --set /etc/neutron/neutron.conf keystone_authtoken username neutron
openstack-config --set /etc/neutron/neutron.conf keystone_authtoken password NEUTRON_PASS
openstack-config --set /etc/neutron/neutron.conf oslo_concurrency lock_path /var/lib/neutron/tmp
配置Linux网桥代理(c1-c2 节点操作)
cp -a /etc/neutron/plugins/ml2/linuxbridge_agent.ini{,.bak}
grep -Ev '^$|#' /etc/neutron/plugins/ml2/linuxbridge_agent.ini.bak > /etc/neutron/plugins/ml2/linuxbridge_agent.ini
openstack-config --set /etc/neutron/plugins/ml2/linuxbridge_agent.ini linux_bridge physical_interface_mappings provider:eth1
openstack-config --set /etc/neutron/plugins/ml2/linuxbridge_agent.ini vxlan enable_vxlan true
openstack-config --set /etc/neutron/plugins/ml2/linuxbridge_agent.ini vxlan local_ip 192.168.100.12
openstack-config --set /etc/neutron/plugins/ml2/linuxbridge_agent.ini vxlan l2_population true
openstack-config --set /etc/neutron/plugins/ml2/linuxbridge_agent.ini securitygroup enable_security_group true
openstack-config --set /etc/neutron/plugins/ml2/linuxbridge_agent.ini securitygroup firewall_driver neutron.agent.linux.iptables_firewall.IptablesFirewallDriver
修改内核(c1-c2 节点操作)
echo 'net.bridge.bridge-nf-call-iptables=1' >> /etc/sysctl.conf #允许虚拟机的数据通过物理机出去
echo 'net.bridge.bridge-nf-call-ip6tables=1' >> /etc/sysctl.conf
modprobe br_netfilter #modprobe:用于向内核中加载模块或者从内核中移除模块。modprobe -r 表示移除
sysctl -p
修改nova.conf配置文件(c1-c2 节点操作)
openstack-config --set /etc/nova/nova.conf neutron auth_url http://ct:5000
openstack-config --set /etc/nova/nova.conf neutron auth_type password
openstack-config --set /etc/nova/nova.conf neutron project_domain_name default
openstack-config --set /etc/nova/nova.conf neutron user_domain_name default
openstack-config --set /etc/nova/nova.conf neutron region_name RegionOne
openstack-config --set /etc/nova/nova.conf neutron project_name service
openstack-config --set /etc/nova/nova.conf neutron username neutron
openstack-config --set /etc/nova/nova.conf neutron password NEUTRON_PASS
重新启动计算节点上的Nova服务(c1-c2 节点操作)
systemctl restart openstack-nova-compute.service
启动neutron网桥代理服务
systemctl enable neutron-linuxbridge-agent.service
systemctl start neutron-linuxbridge-agent.service
验证服务组件【ct节点】
openstack extension list --network
openstack network agent list
小结
三个节点都需要配置neutron网络,以下为部署思路:
配置neutron组件的用户、认证、endpoint
设置提供者provider网络(这里是桥接模式)
① 配置二层网络
② 配置网桥(插件)
③ 优化内核
④ 配置网桥接口与外部对接
⑤ 修改DHCP配置(修改配置文件、代理)
⑥ 配置网桥与内部组件的配置(修改配置文件、代理)
设置neutron与nova对接的配置
其中C1、C2节点配置相同