OpenStack系统由分开安装的几个关键服务组成。这些服务可根据其他云需求一起工作,包括计算(Compute),身份(Identity),网络(Networking),镜像(Image),块存储(Block Storage),对象存储(Object Storage),计量(Telemetry),编排(Orchestration)和数据库(Database)服务。可以单独安装任何这些项目,并将其配置为独立的或连接的实体。
本节介绍如何在控制器节点上安装和配置OpenStack Identity服务(代号为keystone)。为了可扩展性,此配置部署了Fernet令牌和Apache HTTP服务器来处理请求。
1.1.1.1.1. 摘要
本指南将向您展示如何使用Red Hat Enterprise Linux 7及其衍生产品(centos 7)通过RDO存储库提供的软件包安装Keystone。
包括配置选项和示例配置文件的说明。
警告
本指南是一项正在进行的工作,经常更新。预发行包已被用于测试,一些说明可能无法与最终版本一起使用。若遇到的任何错误,请到社区寻求帮助。
1.1.1.1.2. 身份服务概述
OpenStack身份服务提供了一个单一的集成点,用于管理身份验证,授权和服务目录。
身份服务通常是用户与之互动的第一个服务。一旦经过身份验证,最终用户可以使用其身份访问其他OpenStack服务。同样,其他OpenStack服务利用Identity服务来确保用户是他们所说的,并且发现其他服务在部署中的位置。身份服务还可以与某些外部用户管理系统(如LDAP)集成。
用户和服务可以通过使用由Identity服务管理的服务目录定位其他服务。顾名思义,服务目录是OpenStack部署中可用服务的集合。每个服务可以有一个或多个端点,每个端点可以是三种类型之一:管理员(admin),内部(internal)或公共(public)。在生产环境中,出于安全原因,不同的端点类型可能驻留在暴露于不同类型用户的不同网络上。例如,公共API网络可能从互联网上可见,因此客户可以管理其云。管理API网络可能仅限于管理云基础架构的组织内的运营商。内部API网络可能仅限于包含OpenStack服务的主机。此外,OpenStack支持多个区域进行可扩展性,为了简便,本指导为所有端点类型在管理网络建立一个默认区域RegionOne。,区域(regions),服务(services)和端点(endpoints )在Identity Service中一起构成部署的服务目录。部署中的每个OpenStack服务需要一个服务条目,其中存储在Identity服务中的相应端点。所有这些内容可以在安装和配置身份服务后完成。
身份服务包含以下组件:
服务器(Server)
集中式服务器使用RESTful接口提供认证和授权服务。
驱动程序(Drivers)
驱动程序或服务后端集成到集中式服务器。它们用于在OpenStack外部的存储库中访问身份信息,并且可能已经存在于部署OpenStack的基础架构(例如,SQL数据库或LDAP服务器)中。
模块(Modules)
中间件模块在使用Identity服务的OpenStack组件的地址空间中运行。这些模块拦截服务请求,提取用户凭据,并将其发送到集中式服务器进行授权。中间件模块和OpenStack组件之间的集成使用Python Web服务器网关接口。
1.1.1.1.3. 先决条件
在安装和配置身份服务之前,必须创建一个数据库。
1、使用数据库访问客户端作为root用户连接到数据库服务器:
$ mysql -u root -p
2、创建keystone数据库:
MariaDB [(none)]> CREATE DATABASE keystone;
3、授予对keystone数据库的正确访问权限:
MariaDB [(none)]> GREN ALL PRIVILEGES ON keystone。* TO'keystone'@'localhost'\
IDENTIFIED BY'KEYSTONE_DBPASS';
MariaDB [(none)]> GREN ALL PRIVILEGES ON keystone。* TO'keystone'@'%'\
IDENTIFIED BY'KEYSTONE_DBPASS';
更换KEYSTONE_DBPASS一个合适的密码。
4、退出数据库访问客户端。
1.1.1.1.4. 安装和配置组件
注意
本指南使用Apache HTTP服务器mod_wsgi在端口5000和35357上提供身份服务请求。默认情况下,keystone服务仍会监听这些端口。
1、运行以下命令安装软件包:
# yum install openstack-keystone httpd mod_wsgi
2、编辑/etc/keystone/keystone.conf文件并完成以下操作:
在该[database]部分中,配置数据库访问:
[database]
# ...
connection = mysql+pymysql://keystone:KEYSTONE_DBPASS@controller/keystone
替换KEYSTONE_DBPASS为数据库选择的密码。
在本[token]节中,配置Fernet令牌提供程序:
[token]
# ...
provider = fernet
3、导入身份服务数据库:
# su -s /bin/sh -c "keystone-manage db_sync" keystone
4、初始化Fernet密钥存储库:
# keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone
# keystone-manage credential_setup --keystone-user keystone --keystone-group keystone
5、引导身份服务:
# keystone-manage bootstrap --bootstrap-password ADMIN_PASS \
--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
替换ADMIN_PASS为管理用户的合适密码。
1.1.1.1.5. 配置Apache HTTP服务器
1、编辑/etc/httpd/conf/httpd.conf文件并配置 ServerName选项以引用控制器节点:
ServerName controller
2、创建一个链接到该/usr/share/keystone/wsgi-keystone.conf文件:
# ln -s /usr/share/keystone/wsgi-keystone.conf /etc/httpd/conf.d/
1.1.1.1.6. 完成安装
1、启动Apache HTTP服务并将其配置为在系统启动时启动:
# systemctl enable httpd.service
# systemctl start httpd.service
2、配置管理帐户
$ export OS_USERNAME=admin
$ export OS_PASSWORD=ADMIN_PASS
$ export OS_PROJECT_NAME=admin
$ export OS_USER_DOMAIN_NAME=Default
$ export OS_PROJECT_DOMAIN_NAME=Default
$ export OS_AUTH_URL=http://controller:35357/v3
$ export OS_IDENTITY_API_VERSION=3
用keystone-install-configure-rdo命令中ADMIN_PASS使用的密码替换keystone-manage bootstrap
1.1.1.1.7. 创建域(domain),项目(projects),用户(users)和角色(roles)
身份服务为每个OpenStack服务提供身份验证服务。认证服务使用域(domain),项目(projects),用户(users)和角色(roles)的组合。
1、本指南使用包含您添加到环境中的每个服务的唯一用户的服务项目。创建service 项目:
$ openstack project create --domain default \
--description "Service Project" service
2、常规(非管理员)任务应使用非特权项目和用户。作为示例,本指南创建demo项目和用户。
创建demo项目:
$ openstack project create --domain default \
--description "Demo Project" demo
创建demo用户:
$ openstack user create --domain default \
--password-prompt demo
User Password:
Repeat User Password:
创建user角色:
$ openstack role create user
将user角色添加到demo项目和用户:
$ openstack role add --project demo --user demo user
1.1.1.1.8. 验证操作
在安装其他服务之前验证身份服务的运行。
注意:在控制器节点上执行这些命令。
1、出于安全考虑,禁用临时认证令牌机制:
编辑/etc/keystone/keystone-paste.ini 文件并删除admin_token_auth从 [pipeline:public_api],[pipeline:admin_api]和[pipeline:api_v3]段。
2、取消设置临时OS_AUTH_URL和OS_PASSWORD 环境变量:
$ unset OS_AUTH_URL OS_PASSWORD
3、作为admin用户,请求身份验证令牌:
$ 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用户的密码。
4、作为demo用户,请求身份验证令牌:
$ 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 用户密码和API端口5000,该端口仅允许定期(非管理员)访问Identity Service API。
1.1.1.1.9. 创建OpenStack客户端环境脚本
以前的部分使用环境变量和命令选项的组合来通过openstack客户端与身份服务进行交互 。为了提高客户端操作的效率,OpenStack支持简单的客户端环境脚本,也称为OpenRC文件。这些脚本通常包含所有客户端的常用选项,但也支持唯一选项。
一、创建脚本
创建客户端环境的脚本admin和demo 项目和用户。本指南的后面部分将引用这些脚本来为客户端操作加载适当的凭据。
注意:客户端环境脚本的路径不受限制。为方便起见,可以将脚本放置在任何位置,但请确保它们可访问并位于适合部署的安全位置,因为它们包含敏感凭据。
1、创建并编辑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_PASS
export OS_AUTH_URL=http://controller:35357/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2
替换ADMIN_PASS为admin身份服务中为用户选择的密码。
2、创建并编辑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=DEMO_PASS
export OS_AUTH_URL=http://controller:5000/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2
替换DEMO_PASS为demo身份服务中为用户选择的密码。
二、使用脚本
要作为特定项目和用户运行客户端,可以在运行相关联的客户端环境脚本之前简单加载它们。例如:
1、加载admin-openrc文件以使用Identity服务和admin项目的位置填充环境变量以及用户凭据:
$ . admin-openrc
2、请求身份验证令牌:
$ openstack token issue