在14.04和16.04下安装keystone,都能支持v3的api,区别前者版本0.7.1.后者2.3.1,主要是后者数据库中表格增加,换言之,增加了元素,提供了更丰富的关联逻辑。

如果我们要基于keystone的开源开发自己的东西,那就通过源码安装,但是我的目标是用,所以通过系统安装的方式。

安装keystone



$ sudo apt-get install keystone
安装之后运行$ keystone --version进行检测



如果安装过程中出现错误,既有可能是关联包的版本问题,这个问题会比较麻烦,因此建议新建虚机进行安装。

安装数据库

keystone缺省使用sqlite,我们改为mysql。



$sudo apt-get install mysql-server mysql-client python-mysqldb



进入数据库,创建相关的db。



mysql> create database keystone;
Query OK, 1 row affected (0.01 sec)

mysql> grant all privileges on keystone.* to 'keystone'@'localhost' identified by 'keystone123';
Query OK, 0 rows affected (0.00 sec)

mysql> flush privileges;



配置keystone

keystone位于/etc/keystone下



$sudo -s
# cd /etc/keystone
/etc/keystone# ls
default_catalog.templates  logging.conf  sso_callback_template.html
keystone.conf              policy.json
keystone-paste.ini         ssl



1、修改keystone.conf的配置

设置数据库,设置为之前建立的keystong db

connection = sqlite:var/lib/keystone/keystone.db 修改为 mysql://keystone:keystone123@localhost/keystone

设置最初的管理员TOKEN,该TOKEN永久有效(无Expired time),用于最初设定其他管理员的账号和密码。安全地,正式使用的时候应该注释掉,admin使用设置的admin账号和密码,获取临时有效的TOKEN。

#admin_token = <none> ,取消注释,修改为 admin_token = <your_admin_token>,其中可以通过openssl rand -hex 16来获得一个长度16的随机数,也可以自定定义。为了演示方便,设定为ADMIN。

2、同步数据库

$ keystone-manager db_sync

我们看看14.04和16.04的数据库内容



14.04

16.04

mysql> show tables;
 +-----------------------+
 | Tables_in_keystone    |
 +-----------------------+
 | assignment            |
 | credential            |
 | domain                |
 | endpoint              |
 | group                 |
 | migrate_version       |
 | policy                |
 | project               |
 | region                |
 | role                  |
 | service               |
 | token                 |
 | trust                 |
 | trust_role            |
 | user                  |
 | user_group_membership |
 +-----------------------+
 16 rows in set (0.00 sec)
mysql> show tables;
 +------------------------+
 | Tables_in_keystone     |
 +------------------------+
 | access_token           |
 | assignment             |
 | config_register        |
 | consumer               |
 | credential             |
 | domain                 |
 | endpoint               |
 | endpoint_group         |
 | federated_user         |
 | federation_protocol    |
 | group                  |
 | id_mapping             |
 | identity_provider      |
 | idp_remote_ids         |
 | implied_role           |
 | local_user             |
 | mapping                |
 | migrate_version        |
 | password               |
 | policy                 |
 | policy_association     |
 | project                |
 | project_endpoint       |
 | project_endpoint_group |
 | region                 |
 | request_token          |
 | revocation_event       |
 | role                   |
 | sensitive_config       |
 | service                |
 | service_provider       |
 | token                  |
 | trust                  |
 | trust_role             |
 | user                   |
 | user_group_membership  |
 | whitelisted_config     |
 +------------------------+
37 rows in set (0.01 sec)



3、重启服务

$ sudo service keystone restart

重启,使配置有效。

使用HTTPD WSGI

Keystone 缺省是使用内置的 Eventlet 服务器来运行的,Eventlet 本身非常简单易用,但是它已经缺失了很多早已经实现的、基于互联网的网络服务器的安全功能,所以从安全性考虑,随着 Openstack 最新的版本 Kilo 发布以后,不建议使用 Eventlet 来启动 Keystone,推荐使用 Apache HTTPD。而对于使用 EventLet 的支持将从 Openstack 的 Mitaka 版本中彻底移除。(来自:在Openstack中使用HTTPD运行Keystone

1、安装HTTPD,并停止服务

$sudo apt-get install apache2 libapache2-mod-wsgi
$sudo service keystone stop
$sudo service apache2 stop

2、下载keystone源码

需要注意,我们不是要下载keystone当前源代码(通过git),而是要下载安装版的源代码。

$apt-get source keystone

然后解压tar.gz文件,在16.04中,解压后得到keystone-9.0.2/文件夹。在14.04中有一点坑,请同时git clone https://git.openstack.org/openstack/keystone.git(wsgi-keystone.conf从此处获取)。

3、在httpd中配置wsgi

3.1)将源代码中的wsgi-keystone.conf拷贝到apache2/conf-available下:

$cd /etc/apache2/conf-available/
$sudo cp ~/keystone-9.0.2/httpd/wsgi-keystone.conf ./

3.2)在apache2/conf-enabled中创建链接文件指向上述文件:

$cd ../conf-enabled
$sudo ln -s ../conf-available/wsgi-keystone.conf wsgi-keystone.conf

3.3)修改/etc/apache2/conf-available/wsgi-keystone.conf文件

WSGIScriptAlias / /usr/local/bin/keystone-wsgi-public 修改为 WSGIScriptAlias / /var/www/cgi-bin/keystone/main

WSGIScriptAlias / /usr/local/bin/keystone-wsgi-admin 修改为 WSGIScriptAlias / /var/www/cgi-bin/keystone/admin

Alias /identity /var/www//usr/local/bin/keystone-wsgi-public 修改为 Alias /identity /var/www/cgi-bin/keystone/main

Alias /identity_admin /usr/local/bin/keystone-wsgi-admin 修改为 Alias /identity /var/www/cgi-bin/keystone/admin

HTTPD的权限中,改为<Directory /var/www/cgi-bin/keystone>

注意:wsgi-keystone.conf中'''processes=5 threads=1''',请根据实际的性能需求进行配置。 #在HTTPD中进行WSGI指向配置。

3.4)创建/var/www/cgi-bin/keystone目录

3.5)将源码中httpd/keystone.py copy到/var/www/cgi-bin/keystone目录中

3.6)在/var/www/cgi-bin/keystone创建两个连接文件admin 和public,均指向keystone.py,即admin -> keystone.py,main -> keystone.py

3.7)启动httpd,$sudo service apache2 start

3.8)我们进行检查



$ ps aux | grep keystone
 keystone  6948  0.0  0.0 176332  8192 ?        Sl   09:54   0:00 (wsgi:keystone-pu -k start
 keystone  6949  0.0  0.0 176324  8192 ?        Sl   09:54   0:00 (wsgi:keystone-pu -k start
 keystone  6950  0.0  0.0 176324  8180 ?        Sl   09:54   0:00 (wsgi:keystone-pu -k start
 keystone  6951  0.0  0.0 176324  8192 ?        Sl   09:54   0:00 (wsgi:keystone-pu -k start
 keystone  6952  0.0  0.0 176324  8192 ?        Sl   09:54   0:00 (wsgi:keystone-pu -k start
 keystone  6953  0.0  0.0 176324  8192 ?        Sl   09:54   0:00 (wsgi:keystone-ad -k start
 keystone  6954  0.0  0.0 176324  8192 ?        Sl   09:54   0:00 (wsgi:keystone-ad -k start
 keystone  6955  0.0  0.0 176332  8192 ?        Sl   09:54   0:00 (wsgi:keystone-ad -k start
 keystone  6956  0.0  0.0 176324  8192 ?        Sl   09:54   0:00 (wsgi:keystone-ad -k start
 keystone  6957  0.0  0.0 176324  8192 ?        Sl   09:54   0:00 (wsgi:keystone-ad -k start



4、可能的错误

貌似安装上去,但是实际使用时报python的错误。之前没有命名为admin和main,而是沿用了keystone-wsgi-admin和keystone-wsgi-public,有这个问题出现,情况不详,可能和python代码中引用有关。

2016-09-02 10:21:34.318852 mod_wsgi (pid=2357): Target WSGI script '/var/www/cgi-bin/keystone/keystone-wsgi-admin' cannot be loaded as Python module. 2016-09-
02 10:21:34.325677 mod_wsgi (pid=2357): Exception occurred processing WSGI script '/var/www/cgi-bin/keystone/keystone-wsgi-admin'.

下载客户端

在16.04版本中,如果使用keystone命令,或告诉我们已经过时了,我们下载openstack client: $sudo apt-get install python-openstackclient

权限修订

在我们项目中,我们希望用户能够获取自己的详细信息,而缺省是禁止的。进入/etc/keystone/policy.json,将"identity:get_user": "rule:admin_required", 修改为 "identity:get_user": "rule:admin_or_owner"。注意,修改之后,我们需要重启服务:$sudo service apache2 restart