1. 前言介绍
Openstack的身份认证服务提供单点认证管理、授权和目录服务。Openstack的其他服务都使用身份认证服务作为统一的API。其他服务接收用户请求,需要身份认证服务验证用户是否有申请请求的权限。
身份认证包括以下几个组成:
Server:集中式服务器通过RESTful接口提供认证和授权服务。
Drivers:用来在外部访问openstack身份信息。
Modules:中间件模块运行在使用身份认证服务的openstack组件的地址空间,它们拦截服务请求,提取用户凭证,并将他们发送至集中式服务器授权。
备注:安装openstack身份认证时,需要注册每个openstack组件。此外,身份认证可以追踪哪个openstack服务已经安装,以及他们在网络中的位置。
2. 安装
2.1 安装前
安装keystone前需要创建一个数据库和管理员令牌
使用root连接数据库
mysql -u root -p
创建“keystone”数据库
MariaDB > CREATE DATABASE keystone;
为访问keystone数据库添加权限
MariaDB> GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' \
IDENTIFIED BY '123456';
MariaDB> GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' \
IDENTIFIED BY '123456';
退出数据库访问客户端。随机令牌
在初始配置期间生成一个随机值作为管理令牌使用openssl rand -hex 10
生成的随机值为:b14c455ff3cfbea08fbb
2.2 安装和配置组件
在安装完成后禁止keystone服务自启动
官方文档中使用mod_wsgi(一种Apache HTTP Server)在端口使用5000和35357上为Openstack认证服务请求提供服务。默认情况下keystone服务也会监听该端口,因此,官方文档中手动禁用了keystone服务。# echo "manual" > /etc/init/keystone.override
安装包
apt-get install keystone apache2 libapache2-mod-wsgi
配置文件
编辑配置文件 /etc/keystone/keystone.conf
在[default]部分,添加在2.1-4中随机生成的管理员令牌b14c455ff3cfbea08fbb[DEFAULT]
...
admin_token = b14c455ff3cfbea08fbb
在[database]部分,配置数据库访问连接,123456为KEYSTONE_DBPASS的密码
[database]
...
connection = mysql+pymysql://keystone:123456@controller/keystone
[token]
...
provider = fernet
- populate身份认证服务数据库
su -s /bin/sh -c "keystone-manage db_sync" keystone
- 初始化fernet
keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone
2.3 配置Apache HTTP服务
编辑配置文件apache2.conf
编辑/etc/apache2/apache2.conf配置ServerName选项【添加ServerName项】配置文件wsgi-keystone.conf
在文件夹/etc/apache2/sites-available/下创建配置文件wsgi-keystone.conf,填写以下内容:Listen 5000Listen 35357
2.4完成安装
重启服务
Service apache2 restart
Ubuntu默认创建SQLite数据库,由于这个配置使用SQL数据库服务,因此可以选择移除数据库文件
rm -f /var/lib/keystone/keystone.db
3. 创建服务
认证服务提供了一个服务的目录和他们的位置,每一个添加到openstack环境中的服务都需要一个服务实体(entitiy)和几个API接口。
3.1 先决条件
默认情况,认证服务数据库不包含支持传统身份认证和目录服务的信息,因此需要临时的身份认证令牌,此令牌在3.2.1-4中生成。
用户需要通过os-token命令或者配置OS_TOKEN环境将令牌值传递给openstack,用户也需要通过–os-url命令或配置OS_TURL将认证服务URL地址传递给openstack命令行。
出于安全考虑,除了初始化身份认证服务,不要使用临时身份令牌。
配置身份认证令牌
$ export OS_TOKEN=ADMIN_TOKEN
ADMIN_TOKEN用3.2.1-4中的临时令牌b14c455ff3cfbea08fbb替换,即:export OS_TOKEN=b14c455ff3cfbea08fbb
配置URL
export OS_URL=http://controller:35357/v3
配置API版本
export OS_IDENTITY_API_VERSION=3
3.2创建服务实例和API endpoints
身份认证服务管理openstack环境中服务的目录(catalog),由这个目录决定其他服务是否可用。
创建服务实例
openstack service create --name keystone --description "OpenStack Identity" identity
【PS:
遇到错误:An unexpected error prevented the server from fulfilling your
request. (HTTP 500) (Request-ID:
req-c71551be-dd60-4ecf-bfbf-f1586e1b7c28)
查看日志/var/log/apache2/keystone.log:
OperationalError: (sqlite3.OperationalError) no such table: service
[SQL: u’INSERT INTO service (id, type, enabled, extra) VALUES (?, ?,
?, ?)’] [parameters: (‘cc597d134f9e40bebe6f0cea58e91723’,
u’identity’, 1, ‘{“description”: “OpenStack Identity”, “name”:
“keystone”}’)] 解决方案: 输入命令keystone-management db_sync(keystone同步数据库)
参考了博客http://blog.csdn.net/zw421152835/article/details/50992732 】创建API endpoints
Openspack提供三种API endpoints:admin,internal,public。在生产环境中,三种API处于不同网段。Admin API 网络被限制在云管理组织内部,操作员通过其管理云基础设施。Internal API网络供Openstack服务使用。Public API 网络对互联网是可见,所以客户可以管理他们的云。
每个加入Openstack的服务都需要包含至少一个service entity,在认证服务中至少包含三种类型的API endpoint。
创建命令如下: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
4 创建域(domain),工程(projects),用户(users),角色(roles)
keystone为每个openstack服务提供了认证服务,认证服务包含domin,project,users,roles。
备注1:创建的任何一个角色都需要映射到每个openstack服务的配置文件目录中的policy.json中的角色特性(roles specified)。大多数服务的默认策略授予admin role的权限。
4.1 创建“default”域
openstack domain create --description "Default Domain" default
4.2创建管理运营( administrative operations)的project、user、roles
创建“admin”project
openstack project create --domain default --description "Admin Project" admin
创建“admin”用户(用户密码为:123456)
openstack user create --domain default --password-prompt admin
创建“admin”角色
openstack role create admin
添加“admin”角色到“admin”项目和用户中
openstack role add --project admin --user admin admin
4.3创建“service” project
- 创建一个“service”project ,该project中包含了添加到您的环境中的每个服务的唯一一个用户。
openstack project create --domain default --description "Service Project" service
4.4创建常规project、user、role——“demo”
常规(非管理员)的任务应该使用一个普通的无特权的项目和用户。
- 创建一个“demo”project
openstack project create --domain default --description "Demo Project" demo
创建“demo”用户
openstack user create --domain default --password-prompt demo
创建“user”角色
添加“user”角色到“demo”project和user
openstack role add --project demo --user demo user
5 验证操作
禁用临时令牌
出于安全考虑,禁用临时的认证令牌机制。编辑配置文件/etc/keystone/keystone-paste.ini:将 admin_token_auth从 [pipeline:public_api] , [pipeline:admin_api], 和 [pipeline:api_v3] 三部分移除。临时取消环境变量 OS_TOKEN 和 OS_URL 的设置
unset OS_TOKEN OS_URL
- 以“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
其中输入password使用“admin”user的密码123456,API端口使用5000该端口只支持针对认证服务API的常规访问。
6.创建openstack客户端环境脚本
1至5使用环境变量和命令行结合方式,通过openstack客户端与认证服务交互。为了提高client操作的效率,Openstack通过OpenRC文件形式提供基本的客户环境配置脚本。脚本文件不仅包含支持所有客户端的通用配置,也支持特定配置。更多信息参见OpenStack End User Guide。
6.1 创建脚本
为“demo”“admin”的projects和users创建客户端环境脚本,接下来的其他部分安装也会参考这些脚本为客户操作授予合适的证书。
- 编辑脚本 ~/admin-openrc,添加以下内容。其中OS_PASSWORD使用“admin”用户的密码123456
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=3export OS_IMAGE_API_VERSION=2
- 编辑脚本 ~/demo-openrc,添加以下内容,其中OS_PASSWORD使用“admin”用户的密码123456
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
6.2使用脚本
- 以一个特殊的project和user用户运行一个客户端前,可以运行此脚本加载相关客户端环境配置脚本。
. admin-openrc
2.请求一个认证openstack token issue
【遇到问题:’NoneType’ object has no attribute ‘service_catalog’
解决:先前设置了admin的环境变量,但是用client连接的时候,需要unset OS_SERVICE_TOKEN和OS_SERVICE_ENDPOINT,即执行命令:
unset OS_SERVICE_TOKEN OS_SERVICE_ENDPOINT
来源:CSDN
作者:liuhui_charmingglobe
链接:https://blog.csdn.net/liuhui_charmingglobe/article/details/52634826