OpenStack之网络服务(Neutron)

一)基本概念

在早期的OpenStack中,网络是由Nova的“nova-network”模块实现的。之后随着网络功能日趋复杂,一个叫作Quantum的新项目被创建来替代“nova-network”模块,它就是Neutron的前身。其后,由于发现Quantum这一名称已经被注册,因此项目被改名为Neutron。Neutron在OpenStack的H版本中首次出现。

1、虚拟网络设备

Neutron是OpenStack云计算平台的核心组件之一,负责虚拟网络设备的创建和管理。这些虚拟的网络设备包括网桥、网络、端口等。

**网络设备 ** 功能简介
网桥
(Bridge) 网桥类似于交换机,用于连接不同的网络设备。Neutron把网桥分为内部网桥(bridge-internal,br-int)和外部网桥(bridge-external,ex-int)两类。内部网桥即实现内部网络功能的网桥。外部网桥即负责跟外部网络通信的网桥
网络(Network) 一个隔离的二层网段,类似于一个虚拟局域网(Virtual Local Area Network,VLAN)。网络之间是隔离的,不同网络中的IP地址可以重复。子网和端口都挂接在某个网络上
子网
(Subnet) 子网是一个IPv4 或者 IPv6段。子网中的云主机的IP地址从该地址段中进行分配。子网必须关联一个网络。网络与 地址子网是一对多关系,一个子网只能属于某个网络;一个网络可以有多个子网
端口
(Port) 端口可以看作虚拟交换机上的一个端口。端口上定义了硬件物理地址(MAC地址)和IP地址,当云主机的虚拟网卡(Virtual Interface,VIF)绑定到某个端口时,端口就会将MAC地址和IP地址分配给虚拟网卡。子网与端口是一对多关系,一个端口必须属于某个子网;一个子网可以有多个端口

二)Neutron的组件架构

1、Neutron的模块构成

Neutron由对外提供服务的Neutron服务模块“neutron-server”、任意数量的插件“neutron-plugin”和与插件相对应的代理“neutron-agent”组成。

**模块 ** 功能介绍
neutron-server Neutron的服务模块,对外提供OpenStack网络API,接收请求,并调用插件处理请求
neutron-plugin Neutron的插件对应某个具体功能,各个厂商可以开发自己的插件放入Neutron中。插件做的事情主要有两件:在数据库中创建资源和发送请求给具体的“neutron-agent”
neutron-agent Neutron的代理可以理解为插件在物理设备上的对应代理,插件要实现具体功能必须要通过代理。代理接收到“neutron-plugin”通知的业务操作和参数,然后在网络提供者(如一块真实的网卡)上实现各种网络功能,如创建网络、子网、网桥等。当设备发生问题时,“neutron-agent”会
将情况通知给“neutron-plugin”

image.png

2、Neutron的网络分层模型

开放系统互连(Open System Interconnection,OSI)参考模型定义了著名的七层网络模型,Neutron在其第二层到第七层都提供了插件来支持各种不同的网络设备和网络服务。这些插件按照其功能分为两类:核心插件(Core-plugin)和服务插件(Service-pluging)。

(1)核心插件

Neutron中的核心插件即为二层模块(Modular Layer 2,ML2),它负责管理OSI第二层的网络连接。ML2中主要包括网络、子网、端口这3类核心资源。在Neutron服务中必须包括核心插件,因此在Neutron配置文件中必须配置ML2,否则无法启动Neutron服务。

(2)服务插件

服务插件是除核心插件以外其他的插件的统称,主要实现OSI模型的第三层到第七层的网络服务。与核心插件不同的是,服务插件通常不会影响Neutron服务运行,因此在Neutron的配置文件中可以不用配置此类插件的信息。

三)Neutron的基本工作流程

image.png

  • 第1步,“neutron-server”服务模块收到要创建虚拟网络的请求,然后将该请求通过消息队列通知给对应的“neutron-plugin”插件,假设网络提供者为开放虚拟交换机(Open vSwitch,OVS),那么这里的插件对应的就是OVS的插件。
  • 第2步,当OVS插件收到请求后,将需要创建的虚拟网络的信息(名称、ID等)保存到数据库中并通过消息队列通知运行在各个节点上的 “neutron-agent”代理。
  • 第3步,“neutron-agent”代理收到消息后会在节点上创建对应设备,例如VLAN设备。

四)Neutron支持的网络模式

1.Flat网络模式

扁平(Flat)网络模式在OSI模型第二层上用虚拟网桥建立了云主机网卡与物理网卡之间的联系,所有虚拟机的网卡IP地址和物理机的网卡IP地址同处一个网段中。
image.png
在Flat网络模式中,由于云主机和物理机属于同一个网段,因此云主机和物理机可以直接通信。其缺点是所有的云主机都在同一个网络内,没有进行网络隔离,容易产生广播风暴。而且每台虚拟机都要用到宝贵的局域网IP地址资源,这就注定Flat网络模式的网络中能容纳的云主机数量不会太多。

2.VLAN网络模式

VLAN是一种将局域网(Local Area Network,LAN)设备从逻辑上划分成更小的局域网。VLAN网络模块是指将若干云主机按逻辑划分属于不同的VLAN,此时只有同一个VLAN中的虚拟机可以相互访问。
image.png
共享同一个物理网络的多个VLAN是相互隔离的,不同的VLAN默认不能相互访问,因此可以有效避免Flat网络模式中的广播风暴问题。如图物理网络“ens32.101”“ens34.102”中的“101”“102”被称为“VLAN ID”,用于标注不同的网络。“VLAN ID”的有效值为0~4095,其中0和4095一般被保留不用,所以最多能标识4094个网络,故VLAN网络模式无法满足公有云超大规模用户的需求,只在私有云中应用较多。

3.VXLAN与GRE网络模式

虚拟扩展局域网(Virtual Extensible Local Area Network,VXLAN)和通用路由封装(Generic Routing Encapsulation,GRE)这两种延展网络(Overlay Network)。所谓延展网络,是指在其他网络上扩建而来的网络。
image.png
都是建立在隧道技术上的网络模型,只是VXLAN构建的隧道是“VXLAN Tunnel”,而GRE构建的隧道是“GRE Tunnel”。与VLAN相比,VXLAN与GRE支持更多的网段。VXLAN与GRE可以支持的网段数超过1600万,因此它们更适合用于公有云。

五)项目实施

A、网络初始环境准备
1、将网卡设置为混杂模式

第1步,将外网网卡“ens34”设置成混杂模式。

ifconfig ens34 promisc 

第2步,设置开机后混杂模式自动生效。

vi /etc/profile 

在“/etc/profile”环境变量配置文件末尾加上命令语句。

ifconfig ens34 promisc
2.加载桥接模式防火墙模块

第1步,编辑配置文件

vi /etc/sysctl.conf 

然后在文件的最下方按照如下内容增加两行信息。

net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1 

第2步,加载“br_netfilter”模块。

modprobe br_netfilter 

第3步,检查模块加载情况。

sysctl -p 

#结果
net.bridge.bridge-nf-call-iptables = 1 
net.bridge.bridge-nf-call-ip6tables = 1 

如果能获得以上信息,则表明“br_netfilter”模块已经加载成功。

B、在控制节点安装与配置Neutron
1、安装Neutron软件包
yum -y install openstack-neutron openstack-neutron-ml2 openstack-neutron-linuxbridge
2、创建Neutron的数据库并授权

第1步,用下面的方法进入MariaDB数据库服务器。

mysql -uroot -p123456 

第2步,新建“neutron”数据库。

CREATE DATABASE neutron; 

第3步,给用户授权使用新建数据库。

GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'controller' IDENTIFIED BY '123456'; 
GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'%' IDENTIFIED BY '123456';
3、修改Neutron配置文件

将配置文件去掉注释和空行
第1步,备份配置文件。

cp /etc/neutron/neutron.conf /etc/neutron/neutron.bak 

第2步,去掉所有注释和空行,生成新的配置文件。

grep -Ev '^$|#' /etc/neutron/neutron.bak>/etc/neutron/neutron.conf 

编辑新的配置文件
第1步,打开配置文件进行编辑

vi /etc/neutron/neutron.conf 

第2步,修改[database]部分,实现与数据库连接。

[database] 
connection = mysql+pymysql://neutron:123456@controller/neutron 

第3步,修改“[DEFAULT]”与“[keystone_authtoken]”部分,实现与Keystone交互。

[DEFAULT] 
auth_strategy = keystone

[keystone_authtoken]
auth_url = http://controller:5000
memcached_servers = controller:11211
auth_type = password
project_domain_name = Default
user_domain_name = Default
project_name = project
username = neutron
password = 123456

第4步,修改“[DEFAULT]”部分,实现与消息队列交互及核心插件等。

[DEFAULT] 
core_plugin = ml2 
service_plugins = 
transport_url = rabbit://rabbitmq:123456@controller 
auth_strategy = keystone 
notify_nova_on_port_status_changes = true 
notify_nova_on_port_data_changes = true 

第5步,修改“[oslo_concurrency]”,配置锁路径。

[oslo_concurrency] 
lock_path = /var/lib/nova/tmp 

第6步,增加“[nova]”部分,实现与Nova交互。

[nova] 
auth_url = http://controller:5000 
auth_type = password 
project_domain_name = default 
user_domain_name = default 
project_name = project 
username = nova 
password = 123456 
region_name = RegionOne 
server_proxyclient_address = 192.168.10.10
4、修改ML2插件配置文件

将配置文件去掉注释和空行
第1步,备份配置文件。

cd /etc/neutron/plugins/ml2/ml2_conf.ini /etc/neutron/plugins/ml2/ml2_conf.bak 

第2步,去掉所有注释和空行,生成新的配置文件。

grep -Ev '^$|#' /etc/neutron/plugins/ml2/ml2_conf.bak>/etc/neutron/plugins/ml2/ml2_conf.ini 

编辑新的配置文件
第1步 打开配置文件进行编辑。

vi /etc/neutron/plugins/ml2/ml2_conf.ini 

[ml2] 
type_drivers = flat 
tenant_network_types = 
mechanism_drivers = linuxbridge
extension_drivers = port_security 
[ml2_type_flat] 
flat_networks = provider 
[securitygroup] 
enable_ipset = true 

启用ML2插件

ln -s /etc/neutron/plugins/ml2/ml2_conf.ini /etc/neutron/plugin.ini
5、修改网桥代理配置文件

将配置文件去掉注释和空行
第1步,备份配置文件。

cp /etc/neutron/plugins/ml2/linuxbridge_agent.ini /etc/neutron/plugins/ml2/linuxbridge_agent.bak 

第2步,去掉所有注释和空行,生成新的配置文件。

grep -Ev '^$|#' /etc/neutron/plugins/ml2/linuxbridge_agent.bak>/etc/neutron/plugins/ml2/linuxbridge_agent.ini 

编辑新的配置文件
第1步 打开配置文件进行编辑。

vi /etc/neutron/plugins/ml2/linuxbridge_agent.ini 

[linux_bridge] 
physical_interface_mappings = provider:ens34 
[vxlan] 
enable_vxlan = false 
[securitygroup] 
enable_security_group = true 
firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver
6、修改DHCP代理配置文件

将配置文件去掉注释和空行
第1步,备份配置文件。

cp /etc/neutron/dhcp_agent.ini /etc/neutron/dhcp_agent.bak 

第2步,去掉所有注释和空行,生成新的配置文件

grep -Ev '^$|#' /etc/neutron/dhcp_agent.bak> /etc/neutron/dhcp_agent.ini 

编辑新的配置文件
第1步 打开配置文件进行编辑

vi /etc/neutron/dhcp_agent.ini 

[DEFAULT]
interface_driver = linuxbridge 
dhcp_driver = neutron.agent.linux.dhcp.Dnsmasq 
enable_isolated_metadata = true
7、修改元数据代理配置文件
vi /etc/neutron/metadata_agent.ini 

[DEFAULT] 
nova_metadata_host = controller 
metadata_proxy_shared_secret = METADATA_SECRET
8、修改Nova配置文件
vi /etc/nova/nova.conf 

[neutron] 
auth_url = http://controller:5000 
auth_type = password 
project_domain_name = default 
user_domain_name = default 
region_name = RegionOne 
project_name = project 
username = neutron 
password = 123456 
service_metadata_proxy = true 
metadata_proxy_shared_secret = METADATA_SECRET 

修改“[DEFAULT]”部分,配置使用消息队列及防火墙等信息

enabled_apis = osapi_compute,metadata 
transport_url = rabbit://rabbitmq:123456@controller:5672 
my_ip = 192.168.10.10 
use_neutron = true 
firewall_driver = nova.virt.firewall.NoopFirewallDriver 

修改“[vnc]”部分,配置VNC连接模式。

[vnc] 
enabled = true 
server_listen = $my_ip 
server_proxyclient_address = $my_ip
9、初始化Neutron的数据库
su neutron -s /bin/sh -c "neutron-db-manage --config-file /etc/neutron/ neutron.conf --config-file /etc/neutron/plugins/ml2/ml2_conf.ini upgrade heads"
10、创建Neutron用户并分配角色

第1步,导入环境变量模拟登录。

. admin-login 

第2步,在OpenStack云计算平台中创建用户“neutron”。

openstack user create --domain default --password 123456 neutron 

第3步,给用户“neutron”分配“admin”角色

openstack role add --project project --user neutron admin
11、创建Neutron服务及端点

(1)创建服务
创建名“neutron”、类型“network”的服务。

openstack service create --name neutron network 

(2)创建计算服务端点
第1步,创建公众用户访问的服务端点。

openstack endpoint create --region RegionOne neutron public http://controller:9696 

第2步,创建内部组件访问的服务端点。

openstack endpoint create --region RegionOne neutron internal http://controller:9696 

第3步,创建Admin用户访问端点。

openstack endpoint create --region RegionOne neutron admin http://controller:9696
12、启动Neutron服务

第1步,重启Nova服务。

systemctl restart openstack-nova-api 

第2步,启动Neutron服务。

systemctl enable neutron-server neutron-linuxbridge-agent neutron-dhcp-agent neutron-metadata-agent 
systemctl start neutron-server neutron-linuxbridge-agent neutron-dhcp-agent neutron-metadata-agent
13、检测控制节点的Neutron服务

1.查看端口占用情况

netstat -tnlup|grep 9696 

2.检测服务端点

curl http://controller:9696
C、在计算点安装与配置Neutron
1、安装Neutron软件包
yum -y install openstack-neutron-linuxbridge
2、修改Neutron配置文件

将配置文件去掉注释和空行
第1步,备份配置文件。

cp /etc/neutron/neutron.conf /etc/neutron/neutron.bak 

第2步,去掉所有注释和空行,生成新的配置文件。

grep -Ev '^$|#' /etc/neutron/neutron.bak>/etc/neutron/neutron.conf 

编辑新的配置文件
第1步,打开配置文件进行编辑。

vi /etc/neutron/neutron.conf 

第2步,修改“[keystone_authtoken]”部分,实现与Keystone交互。

[keystone_authtoken] 
auth_url = http://controller:5000 
memcached_servers = controller:11211 
auth_type = password 
project_domain_name = default 
user_domain_name = default 
project_name = project 
username = neutron 
password = 123456 

第3步,修改[DEFAULT]和[oslo_concurrency]配置消息队列和锁路径。

[DEFAULT] 
transport_url = rabbit://rabbitmq:123456@controller:5672 
auth_strategy = keystone 
[oslo_concurrency] 
lock_path = /var/lib/neutron/tmp
3、修改网桥代理配置文件
vi /etc/neutron/plugins/ml2/linuxbridge_agent.ini 

[DEFAULT] 
[linux_bridge] 
physical_interface_mappings = provider:ens34 #对应外网网卡 
[vxlan] 
enable_vxlan = false 
[securitygroup] 
enable_security_group = true 
firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver
4、修改Nova配置文件
vi /etc/nova/nova.conf 

[DEFAULT] 
vif_plugging_is_fatal = false 
vif_plugging_timeout = 0 
[neutron] 
auth_url = http://controller:5000 
auth_type = password 
project_domain_name = default 
user_domain_name = default 
region_name = RegionOne 
project_name = project 
username = neutron 
password = 123456
5、启动计算节点Neutron服务

第1步,重启计算节点的Nova服务。

systemctl restart openstack-nova-compute 

第2步,启动计算节点的Neutron网桥代理服务。

systemctl enable neutron-linuxbridge-agent 
systemctl start neutron-linuxbridge-agent
6、验证Neutron服务

查看网络代理服务列表
第1步,导入环境变量模拟登录。

. admin-login 

第2步,查看网络代理服务列表。

openstack network agent list

猜你喜欢

转载自blog.csdn.net/xiaoyu070321/article/details/131484539