在14.04和16.04下安装keystone,都能支持v3的api,区别前者版本0.7.1.后者2.3.1,主要是后者数据库中表格增加,换言之,增加了元素,提供了更丰富的关联逻辑。
如果我们要基于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位于/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
设置数据库,设置为之前建立的keystong db
connection = sqlite:////var/lib/keystone/keystone.db 修改为 mysql://keystone:keystone123@localhost/keystone
设置最初的管理员TOKEN,该TOKEN永久有效(无Expired time),用于最初设定其他管理员的账号和密码。安全地,正式使用的时候应该注释掉,admin使用设置的admin账号和密码,获取临时有效的TOKEN。
#admin_token =
$ keystone-manager db_sync
我们看看14.04和16.04的数据库内容
14.04 | 16.04 |
|
|
$ sudo service keystone restart
重启,使配置有效。
Keystone 缺省是使用内置的 Eventlet 服务器来运行的,Eventlet 本身非常简单易用,但是它已经缺失了很多早已经实现的、基于互联网的网络服务器的安全功能,所以从安全性考虑,随着 Openstack 最新的版本 Kilo 发布以后,不建议使用 Eventlet 来启动 Keystone,推荐使用 Apache HTTPD。而对于使用 EventLet 的支持将从 Openstack 的 Mitaka 版本中彻底移除。(来自:在Openstack中使用HTTPD运行Keystone)
$sudo apt-get install apache2 libapache2-mod-wsgi
$sudo service keystone stop
$sudo service apache2 stop
需要注意,我们不是要下载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.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的权限中,改为
注意: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
貌似安装上去,但是实际使用时报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