了解和使用keystone(二)安装keystone

本文详细介绍了在Ubuntu 14.04和16.04上安装Keystone服务的过程,包括切换数据库至MySQL,配置keystone.conf,同步数据库,重启服务,以及使用Apache HTTPD作为WSGI服务器的步骤。在配置HTTPD WSGI部分,强调了修改wsgi-keystone.conf文件,创建软链接,并处理可能出现的Python错误。最后提到了权限修订,允许用户获取自身信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

               

在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# lsdefault_catalog.templates  logging.conf  sso_callback_template.htmlkeystone.conf              policy.jsonkeystone-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.0416.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



           

再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.youkuaiyun.com/jiangjunshow

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值