大家好,我是考100分的小小码 ,祝大家学习进步,加薪顺利呀。今天说一说保姆级Openstack实践-从零开始手把手教你搭建私有云「终于解决」,希望您对编程的造诣更进一步.
sf2gis@163.com
1 目标:将所有的功能都抽象为服务,通过网络接口提供给用户使用。
云计算(cloud computing)是基于互联网的相关服务的增加、使用和交付模式,通常涉及通过互联网来提供动态易扩展且经常是虚拟化的资源。
云是网络、互联网的一种比喻说法。过去在图中往往用云来表示电信网,后来也用来表示互联网和底层基础设施的抽象。因此,云计算甚至可以让你体验每秒10万亿次的运算能力,拥有这么强大的计算能力可以模拟核爆炸、预测气候变化和市场发展趋势。用户通过电脑、笔记本、手机等方式接入数据中心,按自己的需求进行运算。
简单来说,就是把应用程序和数据都放在由大量服务器组成的云中,用户需要什么只要购买相应服务并使用即可。
云计算分为私有云、公有云、混合云。
云计算的服务分类:基础设施即服务、平台即服务、软件即服务。
特点:
超大规模。“云”具有相当的规模,Google云计算已经拥有100多万台服务器,亚马逊、IBM、微软和Yahoo等公司的“云”均拥有几十万台服务器。“云”能赋予用户前所未有的计算能力。
虚拟化。云计算支持用户在任意位置使用各种终端获取服务。所请求的资源来自“云”,而不是固定的有形的实体。应用在“云”中某处运行,但实际上用户无需了解应用运行的具体位置,只需要一台笔记本或一个PDA,就可以通过网络服务来获取各种能力超强的服务。
高可靠性。“云”使用了数据多副本容错、计算节点同构可互换等措施来保障服务的高可靠性,使用云计算比使用本地计算机更加可靠。
通用性。云计算不针对特定的应用,在“云”的支撑下可以构造出于变万化的应用,同一片“云”可以同时支撑不同的应用运行。
高可伸缩性。“云”的规模可以动态伸缩,满足应用和用户规模增长的需要。
按需服务。“云”是一个庞大的资源池,用户按需购买,像自来水、电和煤气那样计费。
极其廉价。“云”的特殊容错措施使得可以采用极其廉价的节点来构成云;“云”的自动化管理使数据中心管理成本大幅降低;“云”的公用性和通用性使资源的利用率大幅提升;“云”设施可以建在电力资源丰富的地区,从而大幅降低能源成本。
2 OpenStack
OpenStack是一个开源的云计算管理平台项目,由几个主要的组件组合起来完成具体工作。OpenStack支持几乎所有类型的云环境,项目目标是提供实施简单、可大规模扩展、丰富、标准统一的云计算管理平台。OpenStack通过各种互补的服务提供了基础设施即服务(IaaS)的解决方案,每个服务提供API以进行集成。常见组件:
Dashboard(web控制台,又名Horizon)
Keystone(权限管理,为各组件提供认证和授权功能)
Nova(管理虚拟机)
Nova-network(Neutron,管理网络流量和ip)
Glance(镜像管理,提供装机镜像)
Cinder(磁盘管理,云盘)
Swift(网盘,对象存储)
虚拟机创建步骤
1) 登录界面或命令行通过RESTful API向keystone获取认证信息。
2) keystone通过用户请求认证信息,并生成auth-token返回给对应的认证请求。
3) 界面或命令行通过RESTful API向nova-api发送一个boot instance的请求(携带auth-token)。
4) nova-api接受请求后向keystone发送认证请求,查看token是否为有效用户和token。
5) keystone验证token是否有效,如有效则返回有效的认证和对应的角色(注:有些操作需要有角色权限才能操作)。
6) 通过认证后nova-api和数据库通讯。
7) 初始化新建虚拟机的数据库记录。
8) nova-api通过rpc.call向nova-scheduler请求是否有创建虚拟机的资源(Host ID)。
9) nova-scheduler进程侦听消息队列,获取nova-api的请求。
10) nova-scheduler通过查询nova数据库中计算资源的情况,并通过调度算法计算符合虚拟机创建需要的主机。
11) 对于有符合虚拟机创建的主机,nova-scheduler更新数据库中虚拟机对应的物理主机信息。
12) nova-scheduler通过rpc.cast向nova-compute发送对应的创建虚拟机请求的消息。
13) nova-compute会从对应的消息队列中获取创建虚拟机请求的消息。
14) nova-compute通过rpc.call向nova-conductor请求获取虚拟机消息。(Flavor)
15) nova-conductor从消息队队列中拿到nova-compute请求消息。
16) nova-conductor根据消息查询虚拟机对应的信息。
17) nova-conductor从数据库中获得虚拟机对应信息。
18) nova-conductor把虚拟机信息通过消息的方式发送到消息队列中。
19) nova-compute从对应的消息队列中获取虚拟机信息消息。
20) nova-compute通过keystone的RESTfull API拿到认证的token,并通过HTTP请求glance-api获取创建虚拟机所需要镜像。
21) glance-api向keystone认证token是否有效,并返回验证结果。
22) token验证通过,nova-compute获得虚拟机镜像信息(URL)。
23) nova-compute通过keystone的RESTfull API拿到认证k的token,并通过HTTP请求neutron-server获取创建虚拟机所需要的网络信息。
24) neutron-server向keystone认证token是否有效,并返回验证结果。
25) token验证通过,nova-compute获得虚拟机网络信息。
26) nova-compute通过keystone的RESTfull API拿到认证的token,并通过HTTP请求cinder-api获取创建虚拟机所需要的持久化存储信息。
27) cinder-api向keystone认证token是否有效,并返回验证结果。
28) token验证通过,nova-compute获得虚拟机持久化存储信息。
29) nova-compute根据instance的信息调用配置的虚拟化驱动来创建虚拟机。
3 原理
用户通过网络端请求软件服务。软件在网络平台开发,使用平台提供的基本功能服务。网络平台使用网络底层存储、计算资源等基本硬件功能服务,使用基础设置提供的服务。基础设施层使用存储、安全等服务和硬件构建基础功能。
XaaS概念,X as a Service
S层:software
P层:platform
I层:infrastructure
参考:http://chuansong.me/n/147623
4 整体规划
5 controller
5.1 基础环境:使用rancher生成容器
(也可使用docker直接创建,命令如下:
创建容器:# docker run -d –name controller –privileged=true docker.io/sf2gis/centos:ntp /usr/sbin/init
进入容器:# docker exec -it controller /bin/bash)
使用rancher时需要在网络中设置IP(10.42.0.10)和主机名(controller),在命令中设置入口为/usr/sbin/init,在安全中选择全部权限。
进入容器,设置IP和域名:/etc/hosts
10.42.0.10 controller
10.42.0.11 compute01
5.2 设置时间同步:ntp
启动ntp服务。
完成后yum update 升级系统。
将容器commit为镜像
docker commit -a “sf2gis” -m “centos7.4+ntp server+update” controller sf2gis/openstack:ntp
将镜像push到dockerhub。
docker push sf2gis/openstack:ntp
5.3 MarioDB:安装数据库
参见:..\DataBase\mysql\mysql.docx
5.4 安装消息队列服务rabbitmq
5.4.1 安装:yum install rabbitmq-server -y
5.4.2 启动:
systemctl enable rabbitmq-server.service、systemctl start rabbitmq-server.service
5.4.3 配置
添加用户:rabbitmqctl add_user openstack abc123
配置权限:rabbitmqctl set_permissions openstack “.*” “.*” “.*”
添加webui:rabbitmq-plugins enable rabbitmq_management
配置完成后重启生效:systemctl restart rabbitmq-server.service
查看监听端口:netstat -anpt | grep beam
server间通信端口:25672
管理端口:15672
client端通信端口:5672
5.4.4 页面访问:IP:15672
初次登录用户名和密码使用guest。
5.5 KeyStone:身份认证服务
OpenStack的Identity service为认证管理,授权管理和服务目录服务管理提供单点整合,作为统一API使用。此外,可以整合不在OpenStack项目中的用户信息服务(如LDAP服务)。
其他OpenStack服务在收到来自用户的请求时,询问Identity服务以验证是否具有权限。
keystone包括服务器、中间件及第三方驱动。服务器提供restful的web服务,中间件使组件可以访问到认证服务,第三方驱动用于整合外部用户信息服务。
5.5.1 创建权限数据库
mysql –u root -p
CREATE DATABASE keystone;
GRANT ALL PRIVILEGES ON keystone.* TO ‘keystone’@’localhost’ IDENTIFIED BY ‘abc123’;
GRANT ALL PRIVILEGES ON keystone.* TO ‘keystone’@’%’ IDENTIFIED BY ‘abc123’;
flush privileges;
5.5.2 安装
yum install openstack-keystone httpd mod_wsgi memcached python-memcached -y #这里安装memcached是为了令牌更新用的
systemctl enable memcached.service && systemctl start memcached.service
netstat -tnlp|grep memcached
openssl rand -hex 10 #生成随机数,创建管理员令牌。8115b8656f6eeea723cc
5.5.3 配置
cd /etc/keystone/
cp keystone.conf keystone.conf.bak
egrep -v “^#|^#34; keystone.conf.bak > keystone.conf
vi keystone.conf
[default]
admin_token = 0cfe644113b242e39878 #与上面生成的管理员令牌一致
[database]
connection = mysql+pymysql://keystone:abc123@controller/keystone #配置数据库访问地址
[token]
provider = fernet #配置 fernet token provider
5.5.4 初始化fernet存储库
Fernet 是专为 API token 设计的一种轻量级安全消息格式,不需要存储于数据库,减少了磁盘的 IO,带来了一定的性能提升。使用uuid token偶尔会有莫名其妙认证失败返回401,从而导致web页面log out的情况。而使用fernet token后,则基本没有这种情况的发生。
su -s /bin/sh -c “keystone-manage db_sync” keystone #初始化身份认证服务的数据库
#keystone对自己进行认证:创建自身的用户和组并对其进行授权
keystone-manage fernet_setup –keystone-user keystone –keystone-group keystone
keystone-manage credential_setup –keystone-user keystone –keystone-group keystone
5.5.5 配置 Apache HTTP 服务器
sed -i ‘s/#ServerName www.example.com:80/ServerName controller/g’ /etc/httpd/conf/httpd.conf #修改配置文件中主机名为controller
ln -s /usr/share/keystone/wsgi-keystone.conf /etc/httpd/conf.d/
vi /etc/httpd/conf.d/wsgi-keystone.conf,添加如下内容
Listen 35357
<VirtualHost *:35357>
WSGIDaemonProcess keystone-admin processes=5 threads=1 user=keystone group=keystone display-name=%{GROUP}
WSGIProcessGroup keystone-admin
WSGIScriptAlias / /usr/bin/keystone-wsgi-admin
WSGIApplicationGroup %{GLOBAL}
WSGIPassAuthorization On
LimitRequestBody 114688
<IfVersion >= 2.4>
ErrorLogFormat “%{cu}t %M”
</IfVersion>
ErrorLog /var/log/httpd/keystone.log
CustomLog /var/log/httpd/keystone_access.log combined
<Directory /usr/bin>
<IfVersion >= 2.4>
Require all granted
</IfVersion>
<IfVersion < 2.4>
Order allow,deny
Allow from all
</IfVersion>
</Directory>
</VirtualHost>
Alias /identity_admin /usr/bin/keystone-wsgi-admin
<Location /identity_admin>
SetHandler wsgi-script
Options +ExecCGI
WSGIProcessGroup keystone-admin
WSGIApplicationGroup %{GLOBAL}
WSGIPassAuthorization On
</Location>
systemctl enable httpd.service
systemctl start httpd.service
netstat -anpt | grep http #35357用于管理,5000用于普通用户
5.5.6 创建服务实体
export OS_TOKEN=8115b8656f6eeea723cc #配置认证令牌,与上面生成的管理员令牌一致
export OS_URL=http://controller:35357/v3 #配置端点URL
export OS_IDENTITY_API_VERSION=3 #配置认证 API 版本
env|grep ^OS #查看设置是否生效
注意:如果Token配置出错,将报HTTP 401错误。
openstack
service create –name keystone –description “OpenStack identity” identity
创建访问该服务的三个端点:
openstack endpoint create –region RegionOne identity public http://controller:5000/v3
openstack endpoint create –region RegionOne identity internal http://controller:5000/v3
openstack endpoint create –region RegionOne identity admin http://controller:35357/v3
为简化操作,可以使用bootstrap进行集中创建,下面的等同于服务实体的创建
keystone-manage bootstrap –bootstrap-password 8115b8656f6eeea723cc \
–bootstrap-admin-url http://controller:35357/v3 \
–bootstrap-internal-url http://controller:5000/v3 \
–bootstrap-public-url http://controller:5000/v3 \
–bootstrap-region-id RegionOne
5.5.7 创建admin管理项目:进行管理操作
组织结构:domain-》project-》role-》user
创建域:openstack domain create –description “default Domain” default
创建项目:openstack project create –domain default –description “admin Project” admin
创建角色:openstack role create admin
创建用户:openstack user create –domain default –password-prompt admin
关联:openstack role add –project admin –user admin admin
可以在keystone数据库assignment中查看记录。
5.5.8 创建service项目:各组件服务使用
openstack project create –domain default –description “service Project” service
5.5.9 创建demo项目:常规业务使用
openstack project create –domain default –description “demo Project” demo
openstack user create –domain default –password-prompt demo
openstack role create user
openstack role add –project demo –user demo user
5.5.10 出于安全考虑,关闭相关环境变量
unset OS_TOKEN OS_URL
5.5.11 请求认证
openstack –os-auth-url http://controller:35357/v3 –os-project-domain-name default –os-user-domain-name default –os-project-name admin –os-username admin token issue
可以使用脚本文件简化认证过程:使用openstack token issue直接认证
vi admin-openrc
export OS_PROJECT_DOMAIN_NAME=default
export OS_USER_DOMAIN_NAME=default
export OS_PROJECT_NAME=admin
export OS_USERNAME=admin
export OS_PASSWORD=admin
export OS_AUTH_URL=http://controller:35357/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2
vi demo-openrc
export OS_PROJECT_DOMAIN_NAME=default
export OS_USER_DOMAIN_NAME=default
export OS_PROJECT_NAME=ademo
export OS_USERNAME=demo
export OS_PASSWORD=demo
export OS_AUTH_URL=http://controller:5000/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2
5.6 Glance:镜像服务
5.6.1 概述
管理镜像,允许用户发现,注册、恢复虚拟机镜像。
5.6.1.1 组织架构
glance-api:接受用户调用。
glance-registry:管理镜像元数据,内部服务。存储于数据库中。
存储仓库:支持多种仓库。
元数据定义服务:用于自定义元数据。
5.6.2 环境准备
5.6.2.1 创建数据库
CREATE DATABASE glance;
GRANT ALL PRIVILEGES ON glance.* TO ‘glance’@’localhost’ IDENTIFIED BY ‘glance’;
GRANT ALL PRIVILEGES ON glance.* TO ‘glance’@’%’ IDENTIFIED BY ‘glance’;
flush privileges;
5.6.2.2 创建认证服务
创建glance用户(密码输入glance):openstack user create –domain default –password-prompt glance
建立admin角色连接:openstack role add –project service –user glance admin
创建服务实体:
openstack service create –name glance –description “OpenStack Image” image
创建服务的端点:
openstack endpoint create –region RegionOne image public http://controller:9292
openstack endpoint create –region RegionOne image internal http://controller:9292
openstack endpoint create –region RegionOne image admin http://controller:9292
生成脚本
vi glance-openrc
export OS_PROJECT_DOMAIN_NAME=default
export OS_USER_DOMAIN_NAME=default
export OS_PROJECT_NAME=service
export OS_USERNAME=glacne
export OS_PASSWORD=glance
export OS_AUTH_URL=http://controller:35357/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2
测试:openstack token issue
5.6.3 安装配置
yum install openstack-glance –y
配置glance-api
cd /etc/glance/
cp glance-api.conf glance-api.conf.bak
egrep -v “^#|^#34; glance-api.conf.bak > glance-api.conf
vi glance-api.conf
[DEFAULT]
notification_driver = noop #配置 noop 禁用通知,他们只适合与可选的Telemetry 服务
[database]
connection = mysql+pymysql://glance:glance@controller/glance #配置数据库访问地址
[keystone_authtoken] #配置认证服务访问信息
auth_uri = http://controller:5000
auth_url = http://controller:35357
memcached_servers = controller:11211
auth_type = password
project_domain_name = default
user_domain_name = default
project_name = service
username = glance
password = glance
[paste_deploy] #配置认证服务访问
flavor = keystone
[glance_store] #配置本地文件系统存储和镜像文件位置
stores = file,http
default_store = file
filesystem_store_datadir = /var/lib/glance/images/
配置glance- registry
cp glance-registry.conf glance-registry.conf.bak
egrep -v “^#|^#34; glance-registry.conf.bak > glance-registry.conf
vi glance-registry.conf
[database]
connection = mysql+pymysql://glance:glance@controller/glance
[keystone_authtoken]
auth_uri = http://controller:5000
auth_url = http://controller:35357
memcached_servers = controller:11211
auth_type = password
project_domain_name = default
user_domain_name = default
project_name = service
username = glance
password = glance
[paste_deploy]
flavor = keystone
配置写入数据库
su -s /bin/sh -c “glance-manage db_sync” glance #将配置写入镜像服务数据库
启动镜像服务、开机启动
systemctl enable openstack-glance-api.service openstack-glance-registry.service
systemctl start openstack-glance-api.service openstack-glance-registry.service
5.6.4 镜像管理
下载镜像:wget http://download.cirros-cloud.net/0.3.4/cirros-0.3.4-x86_64-disk.img
创建镜像:
openstack image create “cirros” –file cirros-0.3.4-x86_64-disk.img –disk-format qcow2 –container-format bare –public #使用 QCOW2 磁盘格式, bare 容器格式上传镜像到镜像服务并设置公共可见,这样所有的项目都可以访问它
镜像列表:openstack image list #确认镜像的上传并验证属性
5.7 Nova:计算服务
5.7.1 概述
OpenStack使用计算服务来托管和管理云计算系统,是IaaS系统的主要部分,模块主要由Python实现。OpenStack组件可以在标准硬件上水平大规模扩展,并且下载磁盘镜像启动虚拟机实例。
5.7.1.1 VNC Proxy的功能:
将公网(public network)和私网(private network)隔离
VNC client运行在公网上,VNCServer运行在私网上,VNC Proxy作为中间的桥梁将二者连接起来
VNC Proxy通过token对VNC Client进行验证
VNC Proxy不仅仅使得私网的访问更加安全,而且将具体的VNC Server的实现分离,可以支持不同Hypervisor的VNC Server但不影响用户体验
5.7.1.2 VNC Proxy的部署
在Controller节点上部署nova-consoleauth 进程,用于Token验证
在Controller节点上部署nova-novncproxy 服务,用户的VNC Client会直接连接这个服务
Controller节点一般有两张网卡,连接到两个网络,一张用于外部访问,我们称为public network,或者API network,这张网卡的IP地址是外网IP,如图中172.24.1.1,另外一张网卡用于openstack各个模块之间的通信,称为management network,一般是内网IP,如图中10.10.10.2
在Compute节点上部署nova-compute,在nova.conf文件中有下面的配置
vnc_enabled=True
vncserver_listen=0.0.0.0 //VNC Server的监听地址
vncserver_proxyclient_address=10.10.10.2 //nova vnc proxy是通过内网IP来访问vnc server的,所以nova-compute会告知vnc proxy用这个IP来连接我。
novncproxy_base_url=http://172.24.1.1:6080/vnc_auto.html //这个url是返回给客户的url,因而里面的IP是外网IP
5.7.2 创建数据库
CREATE DATABASE nova_api;
CREATE DATABASE nova;
CREATE DATABASE nova_cell0;
GRANT ALL PRIVILEGES ON nova_api.* TO ‘nova’@’localhost’ IDENTIFIED BY ‘nova’;
GRANT ALL PRIVILEGES ON nova_api.* TO ‘nova’@’%’ IDENTIFIED BY ‘nova’;
GRANT ALL PRIVILEGES ON nova.* TO ‘nova’@’localhost’ IDENTIFIED BY ‘nova’;
GRANT ALL PRIVILEGES ON nova.* TO ‘nova’@’%’ IDENTIFIED BY ‘nova’;
GRANT ALL PRIVILEGES ON nova_cell0.* TO ‘nova’@’localhost’ IDENTIFIED BY ‘nova’;
GRANT ALL PRIVILEGES ON nova_cell0.* TO ‘nova’@’%’ IDENTIFIED BY ‘nova’;
flush privileges;
5.7.3 创建服务实体
. admin-openrc #获得admin权限
创建用户并添加到admin
openstack user create –domain default –password-prompt nova #创建nova用户,会提示输入密码nova
openstack role add –project service –user nova admin #添加admin 角色到 nova 用户
创建服务实体及端点
openstack service create –name nova –description “OpenStack Compute” compute
openstack endpoint create –region RegionOne compute public http://controller:8774/v2.1/%\(tenant_id\)s
openstack endpoint create –region RegionOne compute internal http://controller:8774/v2.1/%\(tenant_id\)s
openstack endpoint create –region RegionOne compute admin http://controller:8774/v2.1/%\(tenant_id\)s
5.7.4 安装服务
yum install -y \
openstack-nova-api \
openstack-nova-conductor \
openstack-nova-console \
openstack-nova-novncproxy \
openstack-nova-scheduler
5.7.5 配置nova.conf
cd /etc/nova/
cp nova.conf nova.conf.bak
egrep -v “^$|^#” nova.conf.bak > nova.conf
vi nova.conf
[DEFAULT]
enabled_apis = osapi_compute,metadata #禁用EC2 API
transport_url = rabbit://openstack:abc123@controller
auth_strategy = keystone #配置认证服务访问
my_ip = 10.42.0.10 #配置 my_ip使用controller的IP地址
use_neutron = True #启动网络服务支持
firewall_driver = nova.virt.firewall.NoopFirewallDriver #关闭防火墙
[api_database]
connection = mysql+pymysql://nova:nova@controller/nova_api #配置数据库访问
[database]
connection = mysql+pymysql://nova:nova@controller/nova #配置数据库访问
[keystone_authtoken] #配置认证服务访问
auth_uri = http://controller:5000
auth_url = http://controller:35357
memcached_servers = controller:11211
auth_type = password
project_domain_name = default
user_domain_name =default
project_name = service
username = nova
password = nova
[vnc] #配置VNC代理使用控制节点的管理IP地址
vncserver_listen = 0.0.0.0
vncserver_proxyclient_address = $my_ip
[glance]
api_servers = http://controller:9292 #配置镜像服务的位置,域名如果无法解析也可以IP地址
[oslo_concurrency]
lock_path = /var/lib/nova/tmp #配置锁路径
5.7.6 同步数据库
su -s /bin/sh -c “nova-manage api_db sync” nova #同步Compute 数据库,忽略告警信息
su -s /bin/sh -c “nova-manage db sync” nova
su -s /bin/sh -c “nova-manage cell_v2 map_cell0” nova
su -s /bin/sh -c “nova-manage cell_v2 create_cell –name=cell1 –verbose” nova
5.7.7 启动 Compute 服务并将其设置为随系统启动
systemctl enable openstack-nova-api.service \
openstack-nova-consoleauth.service \
openstack-nova-scheduler.service \
openstack-nova-conductor.service \
openstack-nova-novncproxy.service
systemctl start openstack-nova-api.service \
openstack-nova-consoleauth.service \
openstack-nova-scheduler.service \
openstack-nova-conductor.service \
openstack-nova-novncproxy.service
5.7.8 查看服务列表
nova service-list
5.8 Nova计算节点
参见:compute01
5.9 Neutron:网络服务
5.9.1 概述
Neutron 为整个 OpenStack 环境提供网络支持,包括二层交换,三层路由,负载均衡,防火墙和 *** 等。Neutron 提供了一个灵活的框架,通过配置,无论是开源还是商业软件都可以被用来实现这些功能。
Openstack的设计理念是把所有的组件当做服务来注册的。 Neutron就是网络服务。它将网络、子网、端口和路由器抽象化,之后启动的虚拟主机就可以连接到这个虚拟网络上,最大的好处是这些都可视化的在Horizon里得到了实现,部署或者改变一个SDN变得非常简单。
客户机连接到网络的流程
1) 租户创建了一个网络,比如net
2) 租户为此网络分配一个子网,比如192.168.56.0/24
3) 租户启动一个客户机,并指明一个网口连接到net
4) Nova通知Neutron并在net上创建一个端口,如port1
5) Neutron选择并分配一个IP给port1
6) 客户机通过port1就连接到了net上
组织架构
Neutron 由如下组件构成:
Neutron Server :对外提供 OpenStack 网络 API,接收请求,并调用 Plugin 处理请求。
Plugin:处理 Neutron Server 发来的请求,维护 OpenStack 逻辑网络的状态, 并调用 Agent 处理请求。
Agent :处理 Plugin 的请求,负责在 network provider 上真正实现各种网络功能。
network provider :提供网络服务的虚拟或物理网络设备,例如 Linux Bridge,Open vSwitch 或者其他支持 Neutron 的物理交换机。
Queue :Neutron Server,Plugin 和 Agent 之间通过 Messaging Queue 通信和调用。
Database :存放 OpenStack 的网络状态信息,包括 Network, Subnet, Port, Router 等。
5.9.2 环境准备
docker创建时,注意:
修改/etc/hosts(controller和compute01都要修改)。
5.9.3 创建数据库
CREATE DATABASE neutron;
GRANT ALL PRIVILEGES ON neutron.* TO ‘neutron’@’localhost’ IDENTIFIED BY ‘neutron’;
GRANT ALL PRIVILEGES ON neutron.* TO ‘neutron’@’%’ IDENTIFIED BY ‘neutron’;
Flush privileges;
5.9.4 创建服务实体
. admin-openrc #获得 admin 凭证来获取只有管理员能执行命令的访问权限
openstack user create –domain default –password-prompt neutron
openstack role add –project service –user neutron admin
openstack service create –name neutron –description “OpenStack Networking” network
openstack endpoint create –region RegionOne network public http://controller:9696
openstack endpoint create –region RegionOne network internal http://controller:9696
openstack endpoint create –region RegionOne network admin http://controller:9696
5.9.5 安装服务
yum install openstack-neutron openstack-neutron-ml2 openstack-neutron-linuxbridge ebtables -y
5.9.6 配置neutron.conf
cd /etc/neutron/
cp neutron.conf neutron.conf.bak
egrep -v “^$|^#” neutron.conf.bak > neutron.conf
vi neutron.conf
[database] #配置数据库访问
connection = mysql+pymysql://neutron:neutron@controller/neutron
[keystone_authtoken] #配置认证服务访问
auth_uri = http://controller:5000
auth_url = http://controller:35357
memcached_servers = controller:11211
auth_type = password
project_domain_name = default
user_domain_name = default
project_name = service
username = neutron
password = neutron
[nova] #配置网络以能够反映计算网络拓扑变化
auth_url = http://controller:35357
auth_type = password
project_domain_name = default
user_domain_name = default
region_name = RegionOne
project_name = service
username = nova
password = nova
[oslo_concurrency]
lock_path = /var/lib/neutron/tmp #配置锁路径
[DEFAULT]
core_plugin = ml2 #启用Layer 2 (ML2)插件模块,路由服务和重叠的IP地址
service_plugins = #故意缺少值,就可以启用多种服务插件
transport_url = rabbit://openstack:abc123@controller #配置 “RabbitMQ”消息队列访问
auth_strategy = keystone #配置认证服务访问
notify_nova_on_port_status_changes = True #配置网络以能够反映计算网络拓扑变化
notify_nova_on_port_data_changes = True
5.9.7 配置m2.conf
cd /etc/neutron/plugins/ml2/
cp ml2_conf.ini ml2_conf.ini.bak
egrep -v “^$|^#” ml2_conf.ini.bak > ml2_conf.ini
vi ml2_conf.ini
[ml2]
type_drivers = flat,vlan #启用flat和VLAN网络
tenant_network_types = #故意缺少值,这样就可以启用多种网络
mechanism_drivers = linuxbridge #启用Linux 桥接
extension_drivers = port_security #启用端口安全扩展驱动
[ml2_type_flat]
flat_networks = provider #配置公共flat提供网络
[securitygroup]
enable_ipset = True #启用 ipset 增加安全组的方便性
5.9.8 配置linuxbridge_agent.ini
cd /etc/neutron/plugins/ml2/
cp linuxbridge_agent.ini linuxbridge_agent.ini.bak
egrep -v “^$|^#” linuxbridge_agent.ini.bak >linuxbridge_agent.ini
vi linuxbridge_agent.ini
[linux_bridge]
physical_interface_mappings = provider:ens33 #映射公共虚拟网络到公共物理网络接口
[vxlan] #禁用VXLAN覆盖网络
enable_vxlan = False
[securitygroup] #启用安全组并配置 Linux 桥接 iptables 防火墙驱动
enable_security_group = True
firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver
5.9.9 配置DHCP
cd /etc/neutron/
cp dhcp_agent.ini dhcp_agent.ini.bak
egrep -v “^$|^#” dhcp_agent.ini.bak > dhcp_agent.ini
vi dhcp_agent.ini
[DEFAULT] #配置Linux桥接网卡驱动,Dnsmasq DHCP驱动并启用隔离元数据,这样在公共网络上的实例就可以通过网络访问元数据
interface_driver = neutron.agent.linux.interface.BridgeInterfaceDriver
dhcp_driver = neutron.agent.linux.dhcp.Dnsmasq
enable_isolated_metadata = True
5.9.10 配置元数据
cd /etc/neutron/
cp metadata_agent.ini metadata_agent.ini.bak
egrep -v “^$|^#” metadata_agent.ini.bak > metadata_agent.ini
vi metadata_agent.ini
[DEFAULT] #配置访问参数
nova_metadata_ip = controller #配置元数据主机
metadata_proxy_shared_secret = mate #配置元数据代理共享密码,自定义
5.9.11 修改nova配置
cd /etc/nova/
cp nova.conf nova.conf.nova
vi nova.conf #新增neutron
[neutron]
url = http://controller:9696
auth_url = http://controller: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 = mate
5.9.12 创建ML2链接
#网络服务初始化脚本需要一个超链接/etc/neutron/plugin.ini指向ML2插件配置文件/etc/neutron/plugins/ml2/ml2_conf.ini
ln -s /etc/neutron/plugins/ml2/ml2_conf.ini /etc/neutron/plugin.ini
5.9.13 同步数据库
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 #同步数据库
5.9.14 启动服务
systemctl restart openstack-nova-api.service #重启计算API 服务
配置他们开机自启动(对所有网络选项)
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
对网络选项2,同样也启用并启动layer-3服务:
systemctl enable neutron-l3-agent.service
systemctl start neutron-l3-agent.service
5.9.15 配置计算节点
参见:安装neutron网络服务
5.10 Horizon:管理端
5.10.1 概述
Openstack项目中的Horizon仪表板组件是以Web界面的形式展示各项服务的,Openstack云系统管理员和终端用户可以通过仪表板管理各项资源和服务。
Horizon通过Openstack的APIs与控制节点通信,分配资源和同步状态。
Horizon服务组件允许对其进行定制化的修改,同时,提供一些核心代码类和可重复使用的模板与工具.
5.10.2 安装
yum install -y openstack-dashboard
5.10.3 配置
备份:cp /etc/openstack-dashboard/localsettings /etc/openstack-dashboard/localsettings.bak
修改配置:vi /etc/openstack-dashboard/localsettings
OPENSTACK_HOST = “controller”
ALLOWED_HOSTS = [‘*’, ]
SESSION_ENGINE = ‘django.contrib.sessions.backends.cache’
CACHES = {
‘default’: {
‘BACKEND’: ‘django.core.cache.backends.memcached.MemcachedCache’,
‘LOCATION’: ‘127.0.0.1:11211’,
}
}
OPENSTACK_KEYSTONE_URL = “http://192.168.71.2:5000/v3”
OPENSTACK_API_VERSIONS = {
‘identity’: 3,
OPENSTACK_KEYSTONE_DEFAULT_ROLE = “_member_”
}
OPENSTACK_NEUTRON_NETWORK = {
‘enable_distributed_router’: False,
‘enable_firewall’: False,
‘enable_ha_router’: False,
‘enable_lb’: False,
‘enable_quotas’: True,
‘enable_security_group’: True,
‘enable_vpn’: False,
‘profile_support’: None,
}
TIME_ZONE = “Asia/Shanghai”
5.10.4 重启服务
systemctl restart httpd.service memcached.service
5.10.5 访问web页面
http://IP/dashboard/
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/11822.html