安装OpenStack认证服务组件KeyStone--笔记
以下笔记根据腾讯专家讲解的《云计算与OpenStack》网络课程,地址:1 KeyStone 简介_哔哩哔哩_bilibili,整理并亲手操作,特此感谢。

OpenStack框架图
KeyStone简介
早期的OpenStack版本,并没有KeyStone身份认证模块。用户、消息、API调用的认证都是放在Nova模块中的。随着OpenStack中加入了各种各样的模块,安全认证涉及的面越来越广泛,如用户登录、用户消息传递、服务注册等。处理这些不同的安全认证变得越来越复杂,所以就需要一个专门的模块来负责安全认证,于是KeyStone就产生了。
KeyStone为整个OpenStack提供了安全认证服务,是必须首先安装也是OpenStack最关键的组件之一。
其安装过程大致包括:
1)安装和配置KeyStone数据库
2)安装KeyStone
3)通过配置文件配置KeyStone
4)创建服务实体和API端点
5)创建项目、用户和角色
安装和配置KeyStone数据库
(1)安装MySQL,使用以下命令:
sudo apt-get install mysql-server
安装过程中,需要设置root密码,例如设置为dtc123,安装完成可使用
sudo service mysql status
查看MySQL服务器状态。

(2)使用数据库客户端以root用户连接到数据库中,命令如下:
mysql -u root -p
此时需要输入root用户的密码。

(3)然后,创建KeyStone数据库,命令如下:
CREATE DATABASE keystone;

(4)接着,为用户keystone授权,使其在keystone数据库中拥有全部的权限,.*表示全部权限,'username'@'localhost'中的username表示创建的数据库的用户名。KEYSTONE_DBPASS是需要指定的密码,要换成自己设置的密码,dtc123。命令如下:
GRANT ALL PRIVILEGES ON keystone.* TO 'username'@'localhost' IDENTIFIED BY 'KEYSTONE_DBPASS';

对用户control授予keystone数据库的全部权限
(5)接着,希望用户control能够从任何主机连接到本机的keystone数据库的全部权限,命令如下,其中%表示主机部分:
GRANT ALL PRIVILEGES ON keyston.* TO 'keystone'@'%' IDENTIFIED BY 'KEYSTONE_DBPASS';
最后,执行FLUSH PRIVILEGES;使更改的权限生效。

以上步骤完成了keystone数据库的安装和授权,接下来就可以安装keystone了。
安装KeyStone
KeyStone服务的监听端口是5000和35357,配置Apache Http服务监听这两个端口。为避免端口冲突,在Ubuntu上禁止KeyStone开机自动启动。
首先切换到root用户, sudo su root,然后,命令如下:
echo "manual" > /etc/init/keystone.override
安装与KeyStone相关的软件包,命令如下:
sudo apt-get install keystone python-openstackclient apache2 libapache2-mod-wsgi memcached python-memcache
这里,python-openstackclient是使用Python开发的openstack的客户端工具,可以用这个工具连接和测试keystone的服务。apache2是安装apache的http服务器。libapache2-mod-wsgi 指的是,而 wsgi指的是 Web Server Gateway Interface,是Python应用程序与Web服务器之间的一种接口,定义了一套接口来实现服务器与应用端的通信规范。

修改KeyStone的配置keystone.conf

由于keystone.conf中有大量的注释,不方便查找和修改配置。
因此,先将以 # 开头的注释的行删掉。
首先做一个文件备份。然后,打开备份文件,再过滤掉#开头的行,把内容写入 keystone.conf文件。
sudo su root
mv keystone.conf keystone.conf.bak cat keystone.conf.bak | grep -v "^#" > keystone.conf

(1)随机生成一个16进制的token,Token(令牌)是文本形式的字母-数字字符串,一种用户身份验证机制,用户在访问受保护的服务资源时,仅仅需要提供token,不需要提供用户名和密码。OpenSSL是一个强大的套接字层密码库,包括主要的密码算法、常用的密钥和证书封装管理功能及SSL协议。
openssl rand -hex 10

此处生成的token为 40159ae1ca859cc7c9a8,下一步要用到。
(2)修改default部分,配置初始的令牌管理,ADMIN_TOKEN就是上一步生成的16进制的token。
admin_token=ADMIN_TOKEN

(3)修改 database 部分,配置数据库的连接
connection=mysql://keystone:KEYSTONE_DBPASS@hostname/keystone
这里,第一个keystone是前面创建的数据库的用户名,KEYSTONE_DBPASS是keystone数据库的root密码,本文密码是dtc123,hostname指的是主机名称,这里将虚拟机命名为localhost,即控制节点的意思。最后一个keystone是数据库名称。


配置数据库连接
(4) 修改 memcache 部分,配置memcache 服务。11211是memcache服务器的默认端口
servers=localhost:11211
server 运行在控制节点上,也就是本地节点上。 本文所有的操作都是在控制节点上进行的。

如果想查看memcache是否启动,可以通过查看端口11211是否处于监听的状态。

(5)修改token部分。配置UUID令牌的提供者和memcached的持久化驱动
provider=keystone.token.providers.uuid.Provider
driver=keystone.token.persistence.backends.memcache.Token
keystone支持UUID和PKI的令牌提供者。UUID是通用唯一识别码,让分布式系统中的所有元素,都能有唯一的辨识信息,而不需要通过中央控制端来辨别咨询的指定。每个人都可以建立与其他人不冲突与的UUID。
keystone.token.persistence.backends.memcache_pool.Token 基于memcached池进行令牌的持久化存储,如果使用eventlet(用Python编写的为高并发的网络编程而涉及的库)来部署keystone建议选此值。
keystone.token.persistence.backends.sql.Token:默认配置,使用基于SQL的信息持久化引擎。
keystone.token.persistence.backends.memcache.Token 使用memcached服务器作为后端驱动的持久化存储,使用apachemod_wsgi选此值(本文安装的方式是apache2 libapache2-mod-wsgi)。

(6)在 revoke 部分,配置SQL的撤回驱动
driver=keystone.contrib.revoke.backends.sql.Revoke

(7)为了方便做问题诊断,在 DEFAULT 部分,配置详细的日志输出。
verbose=True

(8)以root的身份为keystone数据库填充数据,最后一个 keystone 表示使用数据库。
su -s /bin/sh -c "keystone-manage db_sync" keystone



配置Apache HTTP Server
(1)编辑 /etc/apache2/apache2.conf,配置 ServerName 为控制节点
ServerName control
(2)创建 /etc/apache2/sites-available/wsgi-keystone.conf,并添加如下内容:
Listen 5000 Listen 35357 <VirtualHost *:5000> WSGIDaemonProcess keystone-public processes=5 threads=1 user=keystone display-name=%{GROUP} WSGIProcessGroup keystone-public WSGIScriptAlias / /var/www/cgi-bin/keystone/main WSGIApplicationGroup %{GLOBAL} WSGIPassAuthorization On <IfVersion >= 2.4> ErrorLogFormat "%{cu}t %M" </IfVersion> LogLevel info ErrorLog /var/log/apache2/keystone-error.log CustomLog /var/log/apache2/keystone-access.log combined </VirtualHost>
(3)启用认证服务的虚拟主机
ln -s /etc/apache2/sites-available/wsgi-keystone.conf /etc/apache2/sites-enabled
(4)为WSGI组件创建目录结构
mkdir -p /var/www/cgi-bin/keystone
(5)拷贝WSGI组件到创建好的目录下
curl http://git.openstack.org/cgit/openstack/keystone/plain/httpd/keystone.py?h=stable/kilo | tee /var/www/cgi-bin/keystone/main /var/www/cgi-bin/keystone/admin
(6)设置目录和文件的权限
chown -R keystone:keystone /var/www/cgi-bin/keystone chmod 755 /var/www/cgi-bin/keystone
(7)重启 apache http server
service apache2 restart
(8)删除 Ubuntu 默认创建的SQLite 数据库
rm -f /var/lib/keystone/keystone.db
配置服务实体和API端点
认证服务KeyStone提供了OpenStack服务和位置的一个目录,
OpenStack的所有服务在KeyStone提供的目录中必须要有一个服务实例service entity和几个API端点endpoint
OpenStack为每个服务提供了三种API端点:
(1)admin(管理端点),允许修改用户和租户
(2)internal(内部端点)、(3)public(公共端点)——这两种端点不允许修改用户和租户
在生产环境中,处于安全的考虑,这三种不同的API端点位于不同的网络以服务不同类型的用户
例如,public API网络用于云环境外的管理工具的连接,而admin API网络可用于内部连接各主机进行管理操作
配置认证服务的服务实体
设置操作系统临时环境变量:校验令牌,即前面用openssl生成16进制token
export OS_TOKEN=ADMIN_TOKEN
设置操作系统临时环境变量:端点URL
这里的control是将hostname重新命名的,命令是 hostnamectl set-hostname control
export OS_URL=http://control:35357/v2.0
为认证服务创建服务实体
openstack service create --name keystone --description "OpenStack Identity" identity
配置认证服务的API端点
openstack endpoint create --publicurl http://controller:5000/v2.0 --internalurl http://controller:5000/v2.0 --adminurl http://controller:35357/v2.0 --region RegionOne identity
配置项目、用户和角色
身份认证服务为OpenStack的所有服务提供了校验的服务
校验服务会联合使用域名、项目(租户)、用户和角色完成校验
项目和租户
在OpenStack用户界面和一些文档中,有时会看到“项目”是指一组用户,而有时也会用来代替“租户”,这两个术语是可以通用的。
最初OpenStack计算服务(nova)有自己的身份验证系统,使用的术语是“项目”。认证系统独立成为OpenStack身份认证服务KeyStone项目后,新项目使用“租户”代指一个用户组。
创建管理项目、用户和角色
创建管理项目
openstack project create --description "Admin Project" admin
创建管理用户
openstack user create --password-prompt admin
创建管理角色
openstack role create admin
为管理项目和管理用户添加管理角色
openstack role add --project admin --user admin admin
创建服务项目
为其它的OpenStack服务创建服务项目(service project)
openstack project create --description "Service Project" service
创建普通项目和用户
创建demo项目
openstack project create --description "Demo Project" demo
创建demo用户
openstack user create --password-prompt demo
创建user角色
openstack role create user
为demo项目和demo用户添加user角色
openstack role add --project demo --user demo user
校验安装
(1)基于安全的原因,先临时禁止校验令牌的机制
编辑文件/etc/keystone/keystone-paste.ini,从[pipeline:public_api]、[pipeline:admin_api]和[pipeline:api_v3]三部分删除
admin_token_auth
(2)取消设置的操作系统环境变量
unset OS_TOKEN OS_URL
(3)使用admin用户校验安装
以admin用户,从2.0版本的认证API申请一个校验令牌
openstack --os-auth-url http://control:35357 --os-project-name admin --os-username admin --os-auth-type password token issue
3.0版本的认证API支持域名,以admin用户申请一个校验令牌
openstack --os-auth-url http://control:35357 --os-project-domain-id default --os-user-domain-id default --os-project-name admin --os-username admin --os-auth-type password token issue
检验admin用户是否有权限查看认证服务中包含的项目
openstack --os-auth-url http://control:35357 --os-project-name admin --os-username admin --os-auth-type password project list
以admin用户,查看认证服务中的用户是否创建成功
openstack --os-auth-url http://control:35357 --os-project-name admin --os-username admin --os-auth-type password user list
以admin用户,查看认证服务中的角色是否创建成功
openstack --os-auth-url http://control:35357 --os-project-name admin --os-username admin --os-auth-type password role list
接着,用 demo 用户检验安装
以demo用户,从v3版本的认证API中申请校验令牌
openstack --os-auth-url http://control:35357 --os-project-domain-id default --os-user-domain-id default --os-project-name demo --os-username demo --os-auth-type password token issue
以demo用户,尝试能否执行只有管理用户才能执行的查看用户的操作
openstack --os-auth-url http://control:35357 --os-project-name demo --os-username demo --os-auth-type password user list
创建OpenStack客户端脚本

浙公网安备 33010602011771号