一、什么是openstack?
OpenStack是一个开源的云计算管理平台项目,由几个主要的组件组合起来完成具体工作。OpenStack支持几乎所有类型的云环境,项目目标是提供实施简单、可大规模扩展、丰富、标准统一的云计算管理平台。OpenStack通过各种互补的服务提供了基础设施即服务(IaaS)的解决方案,每个服务提供API以进行集成。
https://docs.openstack.org/zh_CN/ #官方帮助文档
https://en.wikipedia.org/wiki/OpenStack #版本演进
https://www.cnblogs.com/panwenbin-logs/p/8410551.html #参考文档
二、部署环境:
1.主机信息
主机名 |
IP地址 |
角色 |
版本 |
controller |
192.168.80.184 |
控制节点 |
Centos7.4 |
compute01 |
192.168.80.185 |
计算节点 |
Centos7.4 |
各角色描述及需求:
控制器:
①控制节点运行身份认证服务,镜像服务,管理部分计算和网络服务和不同的网络代理。同样包括像SQL数据库,消息队列这样的支撑服务。
②控制节点需要最少两块网卡。
计算:
①计算节点运行操作实例的 :hypervisor计算部分。默认情况下使用 KVM 作为hypervisor。计算节点同样运行网络服务代理,用来连接实例到虚拟网络,通过:security groups 为实例提供防火墙服务。
②这个服务可以部署超过1个计算节点。每个节点要求最少两个网络接口。
2.准备基础环境--控制节点和计算节点都要做--打开虚拟机虚拟化CPU功能
ifconfig #两块网卡,一块用于远程管理一块上网
cat /etc/hosts #通过域名通信
...
192.168.80.184 controller
192.168.80.185 compute01
:wq
vi /etc/hostname #更改主机名后要重启系统,计算节点改为compute01,改完主机名需要reboot重启生效
controller
:wq
reboot
yum install -y chrony #安装时间同步服务器
vi /etc/chrony.conf #注释掉所有server开头的,添加如下内容,计算节点上controller改为从compute01
...
server controller iburst
allow 192.168.80.0/24
:wq
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
#启动时间同步服务并设置开机自启动
systemctl enable chronyd.service
systemctl start chronyd.service
chronyc sources #同步时间
#关闭防火墙和selinux
systemctl disable firewalld.service
systemctl stop firewalld.service
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
setenforce 0
yum install -y centos-release-openstack-newton.noarch #安装和openstack对应版本相关的仓库
yum -y upgrade #进行系统整体升级,升级完成后要重新启动操作系统
reboot
-----------------以下操作只对控制节点------------------
yum install python-openstackclient -y #安装opnestack客户端
yum install mariadb mariadb-server python2-PyMySQL -y #以下安装配置数据库服务
cp /usr/share/mariadb/my-medium.cnf /etc/my.cnf.d/openstack.cnf
vi /etc/my.cnf.d/openstack.cnf
[mysqld]
bind-address = 192.168.80.184
default-storage-engine = innodb
innodb_file_per_table
max_connections = 4096
collation-server = utf8_general_ci
character-set-server = utf8
:wq
#启动数据库服务,并将其配置为开机自启
systemctl enable mariadb.service
systemctl start mariadb.service
netstat -anpt | grep mysqld
mysql_secure_installation #初始化数据库,为了方便记忆,之后所有密码都设置为abc23
yum install rabbitmq-server -y #以下安装配置消息队列服务
systemctl enable rabbitmq-server.service
systemctl start rabbitmq-server.service
rabbitmqctl add_user openstack abc123 #添加 openstack 用户
rabbitmqctl set_permissions openstack ".*" ".*" ".*" #给openstack用户配置写和读权限
rabbitmq-plugins enable rabbitmq_management #使用此插件实现 web 管理
systemctl restart rabbitmq-server.service
netstat -anpt | grep beam
访问RabbitMQ,访问地址是http://192.168.80.184:15672/,默认用户名密码都是guest
1.服务简述
OpenStack:Identity service为认证管理,授权管理和服务目录服务管理提供单点整合。其它OpenStack服务将身份认证服务当做通用统一API来使用。此外,提供用户信息但是不在OpenStack项目中的服务(如LDAP服务)可被整合进先前存在的基础设施中。
为了从identity服务中获益,其他的OpenStack服务需要与它合作。当某个OpenStack服务收到来自用户的请求时,该服务询问Identity服务,验证该用户是否有权限进行此次请求
身份服务包含这些组件:
服务器
一个中心化的服务器使用RESTful 接口来提供认证和授权服务。
驱动
驱动或服务后端被整合进集中式服务器中。它们被用来访问OpenStack外部仓库的身份信息, 并且它们可能已经存在于OpenStack被部署在的基础设施(例如,SQL数据库或LDAP服务器)中。
模块
中间件模块运行于使用身份认证服务的OpenStack组件的地址空间中。这些模块拦截服务请求,取出用户凭据,并将它们送入中央是服务器寻求授权。中间件模块和OpenStack组件间的整合使用Python Web服务器网关接口。
当安装OpenStack身份服务,用户必须将之注册到其OpenStack安装环境的每个服务。身份服务才可以追踪那些OpenStack服务已经安装,以及在网络中定位它们。
2.服务需求:在配置 OpenStack 身份认证服务前,必须创建一个数据库及权限授权。
mysql -uroot -pabc123
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;
quit
3.服务安装
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 #生成随机数,创建管理员令牌。这个值要记下来,后面会用到
0cfe644113b242e39878
cd /etc/keystone/
cp keystone.conf keystone.conf.bak
egrep -v "^#|^$" 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
:wq
su -s /bin/sh -c "keystone-manage db_sync" keystone #初始化身份认证服务的数据库
keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone #初始化Fernet key存储库
配置 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/
systemctl enable httpd.service
systemctl start httpd.service
netstat -anpt | grep http #80 35357 5000 端口监听
#35357用于管理, 只有admin_role可以使用 #5000用于业务,普通用户使用
创建服务实体和API端点
------------配置管理用户------------
[controller@ ~]# export OS_TOKEN=0cfe644113b242e39878 #配置认证令牌,与上面生成的管理员令牌一致
[controller@ ~]# export OS_URL=http://controller:35357/v3 #配置端点URL
[controller@ ~]# export OS_IDENTITY_API_VERSION=3 #配置认证 API 版本
[controller@ ~]# env|grep ^OS #查看设置是否生效
---------在Openstack环境中,认证服务管理服务目录。服务使用这个目录来决定您的环境中可用的服务。-------------
[controller@ ~]# openstack service create \
--name keystone \
--description "OpenStack identity" identity #为身份认证服务创建服务实体
身份认证服务管理了一个与环境相关的 API 端点的目录。服务使用这个目录来决定如何与您环境中的其他服务进行通信。
OpenStack使用三个API端点变种代表每种服务:admin,internal和public。默认情况下,管理API端点允许修改用户和租户而公共和内部APIs不允许这些操作。
在生产环境中,处于安全原因,变种为了服务不同类型的用户可能驻留在单独的网络上。对实例而言,公共API网络为了让顾客管理他们自己的云在互联网上是可见的。
管理API网络在管理云基础设施的组织中操作也是有所限制的。内部API网络可能会被限制在包含OpenStack服务的主机上。此外,OpenStack支持可伸缩性的多区域。
[controller@ ~]# openstack endpoint create --region RegionOne identity public http://controller:5000/v3 #创建认证服务的 API 端点
[controller@ ~]# openstack endpoint create --region RegionOne identity internal http://controller:5000/v3
[controller@ ~]# openstack endpoint create --region RegionOne identity admin http://controller:5000/v3
注:每个添加到OpenStack环境中的服务要求一个或多个服务实体和三个认证服务中的API 端点变种。
为进行管理操作,创建管理的项目、用户和角色
[controller@ ~]# openstack domain create --description "Default Domain" default #创建 domain域
[controller@ ~]# openstack project create --domain default --description "Admin Project" admin #创建 admin 项目
[controller@ ~]# openstack user create --domain default --password-prompt admin #创建 admin 用户,会提示输入密码
[controller@ ~]# openstack role create admin #创建 admin 角色
[controller@ ~]# openstack role add --project admin --user admin admin #添加 admin 角色到 admin 项目和用户上,这个命令执行后没有输出
每个服务包含独有用户的service 项目。创建"service"项目
[controller@ ~]# openstack project create --domain default --description "Service Project" service
常规任务应该使用无特权的项目和用户,作为示例,创建一个demo项目和用户
[controller@ ~]# openstack project create --domain default --description "Demo Project" demo #创建demo项目
[controller@ ~]# openstack user create --domain default --password-prompt demo #提示输入密码
[controller@ ~]# openstack role create user #创建 user 角色
[controller@ ~]# openstack role add --project demo --user demo user #添加 user 角色到 demo 项目和用户 ,你可以重复此过程来创建额外的项目和用户。
验证令牌获得
[controller@ ~]# unset OS_TOKEN OS_URL #重置OS_TOKEN和OS_URL环境变量
[controller@ ~]# 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 #使用 admin 用户,请求认证令牌,密码:abc123
[controller@ ~]# openstack --os-auth-url http://controller:5000/v3 --os-project-domain-name default --os-user-domain-name default --os-project-name demo --os-username demo token issue #使用 demo 用户,请求认证令牌,密码:abc123
前面我们使用环境变量和命令选项的组合通过openstack客户端与身份认证服务交互。为了提升客户端操作的效率,OpenStack支持简单的客户端环境变量脚本即OpenRC 文件创建 admin 和 demo项目和用户创建客户端环境变量脚本,为客户端操作加载合适的的凭证。
创建用户环境脚本
cd
[controller@ ~]# 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=abc123
export OS_AUTH_URL=http://controller:35357/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2
:wq
[controller@ ~]# vi demo-openrc
export OS_PROJECT_DOMAIN_NAME=default
export OS_USER_DOMAIN_NAME=default
export OS_PROJECT_NAME=demo
export OS_USERNAME=demo
export OS_PASSWORD=abc123
export OS_AUTH_URL=http://controller:35357/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2
:wq
[controller@ ~]# . admin-openrc #加载admin-openrc文件来身份认证服务的环境变量位置和admin项目和用户证书
[controller@ ~]# . demo-openrc #加载demo-openrc文件来身份认证服务的环境变量位置和admin项目和用户证书
[controller@ ~]# openstack token issue #请求认证令牌信息
六、添加镜像服务(glance)
1.服务简述
OpenStack 的镜像服务 (glance) 允许用户发现、注册和恢复虚拟机镜像。它提供了一个 REST API,允许您查询虚拟机镜像的 metadata 并恢复一个实际的镜像。您可以存储虚拟机镜像通过不同位置的镜像服务使其可用,就像 OpenStack 对象存储那样从简单的文件系统到对象存储系统。
OpenStack镜像服务包括以下组件:
glance-api
接收镜像API的调用,诸如镜像发现、恢复、存储。
glance-registry
存储、处理和恢复镜像的元数据,元数据包括项诸如大小和类型。
glance-registry是私有内部服务,用于服务OpenStack Image服务。不要向用户暴露该服务数据库存放镜像元数据,用户是可以依据个人喜好选择数据库的,多数的部署使用MySQL或SQLite。
镜像文件的存储仓库
支持多种类型的仓库,它们有普通文件系统、对象存储、RADOS块设备、HTTP、以及亚马逊S3。记住,其中一些仓库仅支持只读方式使用。
元数据定义服务
通用的API,是用于为厂商,管理员,服务,以及用户自定义元数据。这种元数据可用于不同的资源,例如镜像,工件,卷,配额以及集合。一个定义包括了新属性的键,描述,约束以及可以与之关联的资源的类型。
2. 部署需求:安装和配置镜像服务之前,必须创建创建一个数据库、服务凭证和API端点。
[controller@ ~]# mysql -uroot -pabc123 #创建数据并授权
CREATE DATABASE glance;
GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'localhost' IDENTIFIED BY 'abc123';
GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'%' IDENTIFIED BY 'abc123';
flush privileges;
quit
[controller@ ~]# . admin-openrc #获得 admin 凭证来获取只有管理员能执行命令的访问权限
[controller@ ~]# openstack user create --domain default --password-prompt glance #会提示输入密码
[controller@ ~]# openstack role add --project service --user glance admin #添加 admin 角色到 glance 用户和 service 项目上,命令没有输出
[controller@ ~]# openstack service create --name glance --description "OpenStack Image" image #创建glance服务实体
创建镜像服务的 API 端点
[controller@ ~]# openstack endpoint create --region RegionOne image public http://controller:9292
[controller@ ~]# openstack endpoint create --region RegionOne image internal http://controller:9292
[controller@ ~]# openstack endpoint create --region RegionOne image admin http://controller:9292
3. 服务安装
[controller@ ~]# yum install openstack-glance -y
cd /etc/glance/
cp glance-api.conf glance-api.conf.bak
egrep -v "^#|^$" glance-api.conf.bak > glance-api.conf
vi glance-api.conf
[DEFAULT]
notification_driver = noop #配置 noop 禁用通知,因为他们只适合与可选的Telemetry 服务
[database]
connection = mysql+pymysql://glance:abc123@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 = abc123
[paste_deploy] #配置认证服务访问
flavor = keystone
[glance_store] #配置本地文件系统存储和镜像文件位置
stores = file,http
default_store = file
filesystem_store_datadir = /var/lib/glance/images/
:wq
cp glance-registry.conf glance-registry.conf.bak
egrep -v "^#|^$" glance-registry.conf.bak > glance-registry.conf
vi glance-registry.conf
[database]
connection = mysql+pymysql://glance:abc123@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 = abc123
[paste_deploy]
flavor = keystone
:wq
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
验证操作
cd
[controller@ ~]# wget http://download.cirros-cloud.net/0.3.4/cirros-0.3.4-x86_64-disk.img #下载测试镜像文件
[controller@ ~]# openstack image create "cirros" --file cirros-0.3.4-x86_64-disk.img --disk-format qcow2 --container-format bare --public #使用 QCOW2 磁盘格式, bare 容器格式上传镜像到镜像服务并设置公共可见,这样所有的项目都可以访问它
[controller@ ~]# openstack image list #确认镜像的上传并验证属性
七、安装和配置 Compute 服务,即 nova
1.服务简述
使用OpenStack计算服务来托管和管理云计算系统。OpenStack计算服务是基础设施即服务(IaaS)系统的主要部分,模块主要由Python实现。
OpenStack计算组件请求OpenStack Identity服务进行认证;请求OpenStack Image服务提供磁盘镜像;为OpenStack dashboard提供用户与管理员接口。磁盘镜像访问限制在项目与用户上;配额以每个项目进行设定(例如,每个项目下可以创建多少实例)。OpenStack组件可以在标准硬件上水平大规模扩展,并且下载磁盘镜像启动虚拟机实例。
2.部署需求:创建Nova服务所需数据库及相关授权、服务凭证和API端点
controller控制端:
[controller@ ~]# mysql -uroot -pabc123
CREATE DATABASE nova_api;
CREATE DATABASE nova;
GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'localhost' IDENTIFIED BY 'abc123';
GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'%' IDENTIFIED BY 'abc123';
GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'localhost' IDENTIFIED BY 'abc123';
GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'%' IDENTIFIED BY 'abc123';
flush privileges;
quit
[controller@ ~]# . admin-openrc #获得admin权限
创建服务证书
[controller@ ~]# openstack user create --domain default --password-prompt nova #创建nova用户,会提示输入密码
[controller@ ~]# openstack role add --project service --user nova admin #添加admin 角色到 nova 用户
[controller@ ~]# openstack service create --name nova --description "OpenStack Compute" compute #创建nova 服务实体
创建计算服务API端点
[controller@ ~]# openstack endpoint create --region RegionOne compute public http://controller:8774/v2.1/%\(tenant_id\)s
[controller@ ~]# openstack endpoint create --region RegionOne compute internal http://controller:8774/v2.1/%\(tenant_id\)s
[controller@ ~]# openstack endpoint create --region RegionOne compute admin http://controller:8774/v2.1/%\(tenant_id\)s
3.安装服务
[controller@ ~]# yum install -y \
openstack-nova-api \
openstack-nova-conductor \
openstack-nova-console \
openstack-nova-novncproxy \
openstack-nova-scheduler
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 = 192.168.80.184 #配置 my_ip使用控制节点的管理接口的IP地址
use_neutron = True #启动网络服务支持
firewall_driver = nova.virt.firewall.NoopFirewallDriver #关闭防火墙
[api_database]
connection = mysql+pymysql://nova:abc123@controller/nova_api #配置数据库访问
[database]
connection = mysql+pymysql://nova:abc123@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 = abc123
[vnc] #配置VNC代理使用控制节点的管理IP地址
vncserver_listen = $my_ip
vncserver_proxyclient_address = $my_ip
[glance]
api_servers = http://controller:9292 #配置镜像服务的位置,域名如果无法解析也可以IP地址
[oslo_concurrency]
lock_path = /var/lib/nova/tmp #配置锁路径
:wq
[controller@ ~]# su -s /bin/sh -c "nova-manage api_db sync" nova #同步Compute 数据库,忽略告警信息
[controller@ ~]# su -s /bin/sh -c "nova-manage db sync" nova
#启动 Compute 服务并将其设置为随系统启动
[controller@ ~]# systemctl enable openstack-nova-api.service \
openstack-nova-consoleauth.service \
openstack-nova-scheduler.service \
openstack-nova-conductor.service \
openstack-nova-novncproxy.service
[controller@ ~]# systemctl start openstack-nova-api.service \
openstack-nova-consoleauth.service \
openstack-nova-scheduler.service \
openstack-nova-conductor.service \
openstack-nova-novncproxy.service
[controller@ ~]# nova service-list
compute01(计算节点)安装并配置Nova服务
[compute01@ ~]# yum install openstack-nova-compute -y
[compute01@ ~]# egrep -c '(vmx|svm)' /proc/cpuinfo #确定计算节点是否支持虚拟机的硬件加速 。如果这个命令返回 1或者更大的值,说明计算节点支持硬件加速,一般不需要进行额外的配置。如果这个命令返回``0``,则计算节点不支持硬件加速,必须配置 libvirt使用QEMU而不是使用KVM。
如果不支持更改[compute01@ ~]# vi /etc/nova/nova.conf
[libvirt]
...
virt_type = qemu
:wq
[compute01@ ~]# 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
transport_url = rabbit://openstack:abc123@controller
auth_strategy = keystone
my_ip = 192.168.80.185 #计算节点上的管理网络接口的IP 地址
use_neutron = True
firewall_driver = nova.virt.firewall.NoopFirewallDriver #网络包括防火墙服务,你必须使用nova.virt.firewall.NoopFirewallDriver驱动程序禁用计算机防火墙服务
[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 = abc123
[vnc] #启用并配置远程控制台访问
enabled = True
vncserver_listen = 0.0.0.0
vncserver_proxyclient_address = $my_ip
novncproxy_base_url = http://controller:6080/vnc_auto.html #如果主机无法解析controller主机名,你可以将 controller替换为你控制节点管理网络的IP地址。
[glance]
api_servers = http://controller:9292 #配置镜像服务的位置
[oslo_concurrency]
lock_path = /var/lib/nova/tmp #配置锁路径
:wq
#启动计算服务及其依赖,并将其配置为随系统自动启动
[compute01@ ~]# systemctl enable libvirtd.service openstack-nova-compute.service
[compute01@ ~]# systemctl start libvirtd.service openstack-nova-compute.service
controller控制端验证操作
[controller@ ~]# . admin-openrc #获得 admin 凭证来获取只有管理员能执行命令的访问权限
[controller@ ~]# openstack compute service list #在控制节点上执行新节点的检查
[controller@ ~]# nova service-list #列出服务组件,以验证是否成功启动并注册了每个进程 该输出应该显示四个服务组件在控制节点上启用,一个服务组件在计算节点上启用
[controller@ ~]# nova endpoints #列出身份认证服务中的 API 端点来验证身份认证服务的连通性
八、网络服务neutron控制端的安装及配置(在控制节点上)
1.服务简述
OpenStack Networking(neutron),允许创建、插入接口设备,这些设备由其他的OpenStack服务管理。插件式的实现可以容纳不同的网络设备和软件,为OpenStack架构与部署提供了灵活性。
它包含下列组件:
neutron-server
接收和路由API请求到合适的OpenStack网络插件,以达到预想的目的。
OpenStack网络插件和代理
插拔端口,创建网络和子网,以及提供IP地址,这些插件和代理依赖于供应商和技术而不同,OpenStack网络基于插件和代理为Cisco 虚拟和物理交换机、NEC OpenFlow产品,Open vSwitch,Linux bridging以及VMware NSX 产品穿线搭桥。
常见的代理L3(3层),DHCP(动态主机IP地址),以及插件代理。消息队列大多数的OpenStack Networking安装都会用到,用于在neutron-server和各种各样的代理进程间路由信息。也为某些特定的插件扮演数据库的角色,以存储网络状态
OpenStack网络主要和OpenStack计算交互,以提供网络连接到它的实例。
2.部署需求:创建neutron服务数据库,服务凭证和API端点
[controller@ ~]# mysql -u root -pabc123
CREATE DATABASE neutron; #创建neutron数据库
GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'localhost' IDENTIFIED BY 'abc123'; #对neutron数据库授予恰当的访问权限
GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'%' IDENTIFIED BY 'abc123';
Flush privileges;
quit
[controller@ ~]# . admin-openrc #获得 admin 凭证来获取只有管理员能执行命令的访问权限
创建服务证书
[controller@ ~]# openstack user create --domain default --password-prompt neutron #创建neutron用户
[controller@ ~]# openstack role add --project service --user neutron admin #添加admin 角色到neutron 用户
[controller@ ~]# openstack service create --name neutron --description "OpenStack Networking" network #创建neutron服务实体
[controller@ ~]# openstack endpoint create --region RegionOne network public http://controller:9696 #创建网络服务API端点
[controller@ ~]# openstack endpoint create --region RegionOne network internal http://controller:9696
[controller@ ~]# openstack endpoint create --region RegionOne network admin http://controller:9696
[controller@ ~]# yum install openstack-neutron openstack-neutron-ml2 openstack-neutron-linuxbridge ebtables -y
cd /etc/neutron/
cp neutron.conf neutron.conf.bak
egrep -v "^$|^#" neutron.conf.bak > neutron.conf
vi neutron.conf
[database] #配置数据库访问
connection = mysql+pymysql://neutron:abc123@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 = abc123
[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 = abc123
[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
:wq
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 增加安全组的方便性
:wq
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
:wq
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
:wq
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 #配置元数据代理共享密码,自定义
:wq
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 = abc123
service_metadata_proxy = True
metadata_proxy_shared_secret = mate
:wq
#网络服务初始化脚本需要一个超链接/etc/neutron/plugin.ini指向ML2插件配置文件/etc/neutron/plugins/ml2/ml2_conf.ini
[controller@ ~]# ln -s /etc/neutron/plugins/ml2/ml2_conf.ini /etc/neutron/plugin.ini
[controller@ ~]# 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 #同步数据库
[controller@ ~]# systemctl restart openstack-nova-api.service #重启计算API 服务
#启动网络服务并配置他们开机自启动(对所有网络选项)
[controller@ ~]# systemctl enable neutron-server.service \
neutron-linuxbridge-agent.service \
neutron-dhcp-agent.service \
neutron-metadata-agent.service
[controller@ ~]# systemctl start neutron-server.service \
neutron-linuxbridge-agent.service \
neutron-dhcp-agent.service \
neutron-metadata-agent.service
对网络选项2,同样也启用并启动layer-3服务:
[controller@ ~]# systemctl enable neutron-l3-agent.service
[controller@ ~]# systemctl start neutron-l3-agent.service
网络服务neutron计算节点的安装及配置
[compute01@ ~]# yum install openstack-neutron-linuxbridge ebtables ipset -y
配置Networking通用组件,Networking 通用组件的配置包括认证机制、消息队列和插件
cd /etc/neutron/
cp neutron.conf neutron.conf.bak
egrep -v "^$|^#" neutron.conf.bak > neutron.conf
vi neutron.conf
[DEFAULT]
transport_url = rabbit://openstack:abc123@controller #配置RabbitMQ消息队列访问
auth_strategy = keystone #配置认证服务访问,在[keystone_authtoken]中注释或者删除其他选项
[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 = abc123
[oslo_concurrency]
lock_path = /var/lib/neutron/tmp #配置锁路径
:wq
配置Linux 桥接代理
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:PROVIDER_INTERFACE_NAME #映射公共虚拟网络到公共物理网络接口
[vxlan] #禁用VXLAN覆盖网络
enable_vxlan = False
[securitygroup] #启用安全组并配置 Linux 桥接 iptables 防火墙驱动
enable_security_group = True
firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver
:wq
cd /etc/nova/
cp nova.conf nova.conf.nova
vi nova.conf
[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 = abc123
:wq
[compute01@ nova]# systemctl restart openstack-nova-compute.service # 重启计算服务
#启动Linux桥接代理并配置它开机自启动
[compute01@ nova]# systemctl enable neutron-linuxbridge-agent.service
[compute01@ nova]# systemctl start neutron-linuxbridge-agent.service
验证安装结果-控制端
[controller@ ~]# . admin-openrc #获得 admin 凭证来获取只有管理员能执行命令的访问权限
[controller@ ~]# neutron ext-list #列出加载的扩展,对neutron-server进程是否启动正常进行验证
[controller@ ~]# openstack network agent list
[controller@ ~]# neutron agent-list #列出代理以验证启动 neutron 代理是否成功 ,该输出应该显示在控制节点上有四个代理,在每个计算节点上有一个代理
在控制节点安装horizon
1. 服务简述
Openstack项目中的Horizon仪表板组件是以Web界面的形式展示各项服务的,Openstack云系统管理员和终端用户可以通过仪表板管理各项资源和服务。
Horizon通过Openstack的APIs与控制节点通信,分配资源和同步状态。
Horizon服务组件允许对其进行定制化的修改,同时,提供一些核心代码类和可重复使用的模板与工具。
2.部署
[controller@ ~]# yum install -y openstack-dashboard
cd /etc/openstack-dashboard
cp local_settings local_settings.bak
vi local_settings
OPENSTACK_HOST = "controller" 160
ALLOWED_HOSTS = ['*', ] 29
SESSION_ENGINE = 'django.contrib.sessions.backends.cache' 129行新增
-----去掉#号---------131,136s /^#//g ---
131 CACHES = {
132 'default': {
133 'BACKEND': 'django.core.cache.backends.memcached.MemcachedCa
che',
134 'LOCATION': 'controller:11211',
135 },
136 }
OPENSTACK_KEYSTONE_URL = "http:#%s:5000/v3" % OPENSTACK_HOST 162
OPENSTACK_KEYSTONE_MULTIDOMAIN_SUPPORT = True 66
-----在66行下新增---------
OPENSTACK_API_VERSIONS = {
"identity": 3,
"image": 2,
"volume": 2,
}
OPENSTACK_KEYSTONE_DEFAULT_DOMAIN = 'default' 79 #去掉#号
OPENSTACK_KEYSTONE_DEFAULT_ROLE = "user" 168
-----修改--------
279 OPENSTACK_NEUTRON_NETWORK = {
280 'enable_router': False,
281 'enable_quotas': False,
282 'enable_ipv6': False,
283 'enable_distributed_router': False,
284 'enable_ha_router': False,
285 'enable_lb': False,
286 'enable_firewall': False,
287 'enable_': False,
288 'enable_fip_topology_check': False,
TIME_ZONE = "Asia/Shanghai" 414
:wq
systemctl restart httpd.service memcached.service
3.访问web页面
http://192.168.80.184/dashboard/
域:default 用户名:admin abc123 用户名:demo abc123
十、启动一个实例(可以在命令行中创建,也可以在web界面端创建)
在web界面上创建步骤参考https://www.cnblogs.com/hukey/p/8047485.html
在命令行上创建参考下篇内容