玩转企业云计算平台系列(六):Openstack 网络服务 Neutron
点击下方名片,设为星标!
回复“1024”获取2TB学习资源!
前面介绍了 Openstack 入门、基础环境部署、Keystone 、Glance、Nova 等相关的知识点,今天我将详细的为大家介绍 Openstack 网络服务 Neutron相关知识,希望大家能够从中收获多多!如有帮助,请点在看、转发分享朋友圈支持一波!!!
前言
在早期的OpenStack中,网络是由Nova的“nova-network”模块实现的。之后随着网络功能日趋复杂,一个叫作Quantum的新项目被创建来替代“nova-network”模块,它就是Neutron的前身。其后,由于发现Quantum这一名称已经被注册,因此项目被改名为Neutron。Neutron在OpenStack的H版本中首次出现。更多关于云计算服务 Openstack 系列的学习文章,请参阅:企业云计算平台 Openstack ,本系列持续更新中。
Neutron 简介
Neutron是Openstack的网络组件,Neutron的前身是Quantum,Quantom的前身是Nova-Network,经过多个版本的演进,Neutron现如今是openstack的重要组件之一。
在openstack的网络中,计算机机网络的相关概念稍有变动。在实际的计算机网络中,网络连接的是一个个的主机,而在openstack中,网络连接的是一个个的云主机。
Neutron 功能
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架构
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” 。
更多关于云计算服务 Openstack 系列的学习文章,请参阅:企业云计算平台 Openstack ,本系列持续更新中。
Neutron的网络分层模型
开放系统互连(Open System Interconnection,OSI)参考模型定义了著名的七层网络模型,Neutron在其第二层到第七层都提供了插件来支持各种不同的网络设备和网络服务。这些插件按照其功能分为两类:核心插件(Core-plugin)和服务插件(Service-pluging)。
核心插件
Neutron中的核心插件即为二层模块(Modular Layer 2,ML2),它负责管理OSI第二层的网络连接。ML2中主要包括网络、子网、端口这3类核心资源。在Neutron服务中必须包括核心插件,因此在Neutron配置文件中必须配置ML2,否则无法启动Neutron服务。
服务插件
服务插件是除核心插件以外其他的插件的统称,主要实现OSI模型的第三层到第七层的网络服务。与核心插件不同的是,服务插件通常不会影响Neutron服务运行,因此在Neutron的配置文件中可以不用配置此类插件的信息。
Neutron 的基本工作流程
-
第1步,“neutron-server”服务模块收到要创建虚拟网络的请求,然后将该请求通过消息队列通知给对应的“neutron-plugin”插件,假设网络提供者为开放虚拟交换机(Open vSwitch,OVS),那么这里的插件对应的就是OVS的插件。
-
第2步,当OVS插件收到请求后,将需要创建的虚拟网络的信息(名称、ID等)保存到数据库中并通过消息队列通知运行在各个节点上的 “neutron-agent”代理。
-
第3步,“neutron-agent”代理收到消息后会在节点上创建对应设备,例如VLAN设备。
Neutron支持的网络模式
Flat网络模式
扁平(Flat)网络模式在OSI模型第二层上用虚拟网桥建立了云主机网卡与物理网卡之间的联系,所有虚拟机的网卡IP地址和物理机的网卡IP地址同处一个网段中。
在Flat网络模式中,由于云主机和物理机属于同一个网段,因此云主机和物理机可以直接通信。其缺点是所有的云主机都在同一个网络内,没有进行网络隔离,容易产生广播风暴。而且每台虚拟机都要用到宝贵的局域网IP地址资源,这就注定Flat网络模式的网络中能容纳的云主机数量不会太多。
VLAN网络模式
VLAN是一种将局域网(Local Area Network,LAN)设备从逻辑上划分成更小的局域网。VLAN网络模块是指将若干云主机按逻辑划分属于不同的VLAN,此时只有同一个VLAN中的虚拟机可以相互访问。
共享同一个物理网络的多个VLAN是相互隔离的,不同的VLAN默认不能相互访问,因此可以有效避免Flat网络模式中的广播风暴问题。如图物理网络“ens32.101”“ens34.102”中的“101”“102”被称为“VLAN ID”,用于标注不同的网络。“VLAN ID”的有效值为0~4095,其中0和4095一般被保留不用,所以最多能标识4094个网络,故VLAN网络模式无法满足公有云超大规模用户的需求,只在私有云中应用较多。
VXLAN与GRE网络模式
虚拟扩展局域网(Virtual Extensible Local Area Network,VXLAN)和通用路由封装(Generic Routing Encapsulation,GRE)这两种延展网络(Overlay Network)。所谓延展网络,是指在其他网络上扩建而来的网络。
都是建立在隧道技术上的网络模型,只是VXLAN构建的隧道是“VXLAN Tunnel”,而GRE构建的隧道是“GRE Tunnel”。与VLAN相比,VXLAN与GRE支持更多的网段。VXLAN与GRE可以支持的网段数超过1600万,因此它们更适合用于公有云。
更多关于云计算服务 Openstack 系列的学习文章,请参阅:企业云计算平台 Openstack ,本系列持续更新中。
Neutron组件安装与配置
Neutron组件安装
在上文中,我们讲述了openstack Neutron组件的基本原理,今天,我们就来实际配置一下openstack中的neutron组件。
neutron组件的安装我们直接采用YUM的方式进行,直接执行命令:
yum install -y openstack-neutron
即可完成Neutron组件的安装,太简单了。
Neutron配置
在完成Neutron组件的安装后,接下来,我们需要对Neutron组件进行配置。Neutron的配置文件是/etc/neutron/neutron.conf,我们打开该配置文件,首先找到[DEFUALT]模块,在该模块下添加如下内容:
[DEFAULT]
auth_strategy=keystone
core_plugin=ml2
service_plugins=
notify_nova_on_port_status_change=true
notify_nova_on_port_data_change=true
connection=mysql+pymysql://neutron:neutron@192.168.136.101/neutron
上述配置命令,分别表示采用keystone的认证方式,启用ml2的核心插件,并禁用其他插件,并且配置网络服务来通知计算节点的网络拓扑变化。
完成后的配置文件如下所示:
之后,我们还需要配置Keystone的认证模块[keystone_authtoken],我们找到该模块,并在该模块下添加如下内容:
[keystone_authtoken]
auth_uri=http://192.168.136.101:5000
auth_url=http://192.168.136.101:35357
memcached_servers=192.168.136.101:11211
auth_type=password
project_domain_name=default
user_domain_name=default
username=neutron
password=neutron
完成后的配置文件如下所示:
之后,我们找到[nova]模块,在该模块下,也需要添加nova相关的IP地址和认证信息,具体内容如下所示:
[nova]
auth_url=http://192.168.136.101:35357
auth_type=password
project_domain_name=default
project_name=service
user_domian_name=default
region_name=RegionOne
project_name=service
username=nova
password=nova
完成后的配置文件如下所示:
这样,我们就完成所有的Neutron组件的配置了,之后,我们执行命令:
grep "^[a-Z]" /etc/neutron/neutron.conf
可以查看所有生效的配置,该命令执行结果如下所示:
更多关于云计算服务 Openstack 系列的学习文章,请参阅:企业云计算平台 Openstack ,本系列持续更新中。
Neutron 插件配置
ML2插件配置
在上文中,我们进行了Neutron的配置。今天,我们就来进行Neutron插件的相关配置。
首先,我们来配置一下Neutron的ml2插件,打开Neutron ml2的配置文件/etc/neutron/plugins/ml2/ml2_conf.ini,找到该文件张红的[ml2]模块,在该模块下面添加如下配置:
[ml2]
type_drivers=flat,vlan,gre,vxlan,geneve
mechanism_drivers=linuxbridge,openvswitch
tenant_network_types=
extension_drivers=port_security
上述配置分别表示使用flat、vlan、gre、vxlan和geneve这5个驱动,使用linuxbridge和openvswich插件来创建网络,禁用私有网络(tenant_network_types参数在等于号后面什么也不加,就表示禁用私有网络),以及启动端口安全扩展驱动。
完成后的配置文件如下所示:
之后,我们找到[ml2_type_flat]模块,在该模块下添加如下内容:
[ml2_type_flat]
flat_networks=public
上述配置表示配置公共虚拟网络为flat网络。完成后的配置如下所示:
之后,我们找到配置文件中的[securitygroup]部分,在该模块下添加如下内容:
[securitygroup]
enable_ipset=true
上述配置内容,表示启用ipset以增强安全组规则的高效性,完成后的配置文件如下所示:
最后,我们执行命令:
grep "^[a-Z]" /etc/neutron/plugins/ml2/ml2_conf.ini
可以查看当前配置文件中生效的配置,结果如下所示:
这样,我们的ml2插件就配置完成了。
LinuxBridge插件配置
接下来,我们需要配置LinuxBridge插件。该插件的配置文件为/etc/neutron/plugins/ml2/linuxbridge_agent.ini,我们打开该配置文件,在[linux_bridge]模块下,添加如下内容:
physical_interface_mapping=public:ens32
上述配置,public后面的ens32为当前设备的实际网卡名称,请和自己的网卡对应,上述配置表示将公共虚拟网络和公共物理网络接口对应起来。之后,我们找到[vxlan]模块,在该模块下添加如下内容:
enable_vxlan=false
表示禁用VXLAN覆盖网络。最后,我们找到[security_group]模块,在该模块下添加如下内容:
enable_security_group=true
firewall_driver=neutron.agent.linux.iptables_firewalld.IptablesFirewalldDriver
表示启动安全组设置,并配置相关驱动。这样,linuxbridge就配置完成了,我们执行命令:
grep "^[a-Z]" /etc/neutron/plugins/ml2/linuxbridge_agent.ini
可以显示当前配置文件中生效的部分,该命令执行结果如下所示:
这样,我们的linxubridge部分就配置完成了。更多关于云计算服务 Openstack 系列的学习文章,请参阅:企业云计算平台 Openstack ,本系列持续更新中。
DHCP代理配置
最后,我们再来配置DHCP代理的相关配置。打开/etc/neutron/dhcp\_agent.ini,在[DEFAULT]模块中,找到以下参数,并修改为如下内容:
interface_driver=neutron.agent.linux.interface.BridgeInterfaceDriver
dhcp_driver=neutron.agent.linux.dhcp.Dnsmasq
enable_isolated_metadata=false
上述配置,分别表示设置虚拟接口驱动,设置DHCP驱动以及刷新路由使用。完成后的配置文件如下所示:
这样,我们的Neutron节点的插件就配置完成了。
Neutron 其他配置、数据库初始化与服务启动
Neutron元数据代理配置
在上文中,我们完成了Neutron插件的配置,今天,我们来进行Neutron的元数据代理配置、数据库初始化以及服务启动。
打开Neutron的元数据代理配置文件/etc/neutron/metadata_agent.ini,在[DEFAULT]模块下,我们找到如下参数,并修改为以下内容:
nova_metadata=192.168.136.101
metadata_proxy_shared_secret=neutron
第一个配置表示指定元数据主机,第二个配置表示指定元数据共享密码,完成后的配置文件如下所示:
这样,我们的Neutron元数据代理配置就完成了。
Neutron网络服务配置
在完成Neutron元数据代理配置后,我们接下来需要配置Neutron的网络服务,打开nova的配置文件/etc/nova/nova.conf,在其中的neutron模块添加如下内容:
[neutron]
url = http://192.168.136.101:9696
auth_url = http://192.168.136.101:35357
auth_type = password
project_domain_name = default
user_domain_name = default
region_name = RegionOne
project_name = service
username = neutron
password = neutron
service_metadata_proxy=true
metadata_proxy_shared_secret = neutron
注意,在上述配置中,最后的metadata_proxy_shared_secret要和上一模块配置的密钥一致。完成后的配置文件如下所示:
之后,我们需要创建一个软链接/etc/neutron/plugin.ini,指向/etc/neutron/plugins/ml2/ml2_conf.ini。执行命令:
ln -s /etc/neutron/plugins/ml2/ml2_conf.ini /etc/neutron/plugin.ini
即可完成软链接的创建。这样,我们的Neutron的网络配置就完成了。更多关于云计算服务 Openstack 系列的学习文章,请参阅:企业云计算平台 Openstack ,本系列持续更新中。
Neutron数据库初始化
在完成Neutron的网络配置后,我们就可以进行Neutron的数据库配置了。执行命令:
su -s /bin/sh -c "neutron-db-nanage --config /etc/neutron/neutron.conf --config-file /etc/neutron/plugins/ml2/ml2_conf.ini upgrade head " neutron
该命令执行结果如下所示:
之后,我们执行命令:
mysql -h 192.168.136.101 -uneutron -pneutron -e "use neutron;show tables"
查看当前数据库下的配置,发现配置如下所示:
从上图可以知道,我们的Neutron数据库初始化服务配置成功。之后,我们要重启计算API服务,执行命令:
systemctl restart openstack-nova-api
即可。
Neutron服务启动
最后,我们要启动Neutron服务,执行命令:
systemctl start neutron-server
systemctl start neutron-linuxbridge-agent
systemctl start neutron-dhcp-agent
systemctl start neutron-metadata-agent
即可完成Neutron服务的启动,上述命令执行如下所示:
Neutron 服务注册
Neutron服务实体创建
在上文中,我们完成了Neutron的相关配置、数据库初始化以及Neutron服务的启动。今天,我们就来进行Neutron在Keystone上的注册。首先,我们先加载openstack的admin身份,执行命令:
source admin-openstack.sh
这样,我们在后续的 openstack 服务注册中不会因为权限问题而报错。之后,我们需要创建 Neutron 的服务实体,执行命令:
openstack service create --name neutron --description "openstack neutron network" network
该命令执行结果如下所示:
这样,Neutron的服务实体就创建完成了。
Neutron API端点创建
接下来,我们要创建Neutron的API服务端点,我们要分别创建public、internal和admin三种类型的Neutron API端点。因此,分别执行命令:
openstack endpoint create --region RegionOne network public http://192.168.136.101:9696
openstack endpoint create --region RegionOne network interval http://192.168.136.101:9696
openstack endpoint create --region RegionOne network admin http://192.168.136.101:9696
这些命令的执行结果如下所示:


效果检验
在完成上述所有配置后,我们执行命令:
neutron agent-list
该命令执行结果如下所示:
注意到上图中alive字段,如果出现一个横向的笑脸,则表示我们的Neutron服务注册成功!
以上就是我们关于 Neutron 服务的原理与安装、配置的介绍。更多关于云计算服务 Openstack 系列的学习文章,请参阅:企业云计算平台 Openstack ,本系列持续更新中。
原文链接:https://blog.csdn.net/xiaoyu070321/article/details/131484539 https://blog.csdn.net/xiaoyu070321/article/details/131484539
读者专属技术群
构建高质量的技术交流社群,欢迎从事后端开发、运维技术进群(备注岗位,已在技术交流群的请勿重复添加)。主要以技术交流、内推、行业探讨为主,请文明发言。广告人士勿入,切勿轻信私聊,防止被骗。
扫码加我好友,拉你进群

推荐阅读 点击标题可跳转
原以为是 Xshell、WindTerm 的平替,没想到是个王者

PS:因为公众号平台更改了推送规则,如果不想错过内容,记得读完点一下“在看”,加个“星标”,这样每次新文章推送才会第一时间出现在你的订阅列表里。点“在看”支持我们吧!
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐
所有评论(0)