<本文转自 http://manual.blog.51cto.com/3300438/973921>

二、安装与配置Identity服务

2.1.安装Identity服务

你可以安装Identity服务在任何能被其他服务主机访问的服务器上,以root身份运行如下命令:

$yum  install  openstack-utils   openstack-keystone

安装后,你需要删除sqlite数据库并修改配置文件将其指向MySQL数据库。这样的配置更容易部署多个Keystone前段指向相同的后端数据库服务器。

删除/var/lib/keystone目录下的keystone.db文件。

备注:据译者亲身实验,使用以上的yum源安装时该文件并不会产生,省去了删除文件的步骤。

配置生产环境的数据库存储来取代默认的目录功能以备份服务及终端数据,这里以MySQL为例。

安装MySQL(需要root权限):

$yum  install  mysql   mysql-server

安装过程中会提示为mysql的root帐号设置密码,根据提示设置密码。

设置Mysql为开机启动进程:

$chkconfig  --level  2345  mysqld  on

$ service  mysqld  start

以下系列命令将创建一个名为"keystone”的数据库,以及一个名为"keystone”的mysql用户名,该用户拥有访问keystone数据库的所有权限。默认,密码与用户名同名。

在Fedora,RHEL,CentOS系统上,你可以通过openstack-db命令创建Keystone数据库。

$ duso  openstack-db  --init   --service   keystone

也可以通过手动的方式创建数据库。

$ mysql  -u  root  -p                         

根据提示:需要输入mysql root的密码,创建keystone数据库。

mysql> CREATE  DATABASE  keystone;

接着再创建一个对新建keystone数据库具有完全权限的mysql账户,注意为用户选择安全的密码,方法参考以下命令。

mysql> GRANT  ALL  ON  keystone.*  TO   'keystone’@'%’ IDENTIFIED  BY  ‘你的密码’;

退出MySQL数据库: mysql&gt; quit

回想以下,我们在OpenStack第二天文档中对云环境的构思中建设云控制节点的IP为192.168.106.130。

现在一个Keystone已经安装完成,你可以通过主配置文件修改配置(/etc/keystone/keystone.conf),以及通过命令行初始化数据。默认Keystone的数据保存在sqlite中,在/etc/keystone/keystone.conf修改如下一行connection定义来改变数据存储位置:

connection = mysql://keystone:[密码]@192.168.206.130/keystone

同时,要确保keystone.conf文件中配置了合适的服务标识符,你可以使用自己的随机字串,像下面这样:

admin_token = 012345SECRET99TOKEN012345

或者通过命令行设置随机字串:

$ export ADMIN_TOKEN=$(openssl   rand  -hex  10)

$ sudo  openstack-config  --set   /etc/keystone/keystone.conf   DEFAULT  admin_token  $ADMIN_TOKEN

备注:export  ADMIN_TOKEN=$(openssl  rand  -hex  10)是调用openssl命令产生10位随机字串,并将结果赋予ADMIN_TOKEN全局变量;再通过openstack-config命令修改keystone.conf配置文件就admin_token参数的取值为刚刚定义的全局变量ADMIN_TOKEN的值(10位随机字串)。

下一步,重启keystone服务,并设置为开机启动项。

$ sudo  service  keystone  restart  &&  sudo  chkconfig  keystone  on

备注:在新的版本中keystone的启动脚本不是keystone,而是openstack-keystone,所以实际工作中你需要将以上命令修改为sudo  service  openstack-keystone  restart  &&  sudo  chkconfig   openstack-keystone   on

最后初始化新的keystone数据库,需要root权限:

$ keystone-manage   db_sync

2.2.配置Identity服务

设置租户,用户与角色,你最少需要定义一个租户、用户、角色以通过Identity服务的身份验证与授权获得其他服务。

脚本配置:

在Fedora,RHEL或CentOS系统上,你可以通过运行脚本更新数据。

$ sudo  ADMIN_PASSWORD=$OS_PASSWORD  SERVICE_PASSWORD=servicepass   openstack-keystone-sample-data

Keystone项目提供了一份部署客户、用户、角色的bash脚本,样本数据在https://github.com/openstack/keystone/blob/master/tools/sample_data.sh。

备注:系统命令openstack-keystone-sample-data运行的就是位于/usr/share/openstack-keystone目录下的sample_data.sh脚本。

此外,任何用户pyton工具的分布,都可以通过keystone客户端的API运行keystone-init脚本完成初始化动作。

$ git  clone  https://github.com/nimbis/keystone-init.git


这个初始化脚本需要使用PyYAML,通过https://github.com/nimbis/keystone-init/blob/master/keystone-init.py页面,你可以看到脚本做了哪些工作。

为你的服务器编辑config.yaml文件中的IP地址,你可以在config.yaml目录下运行以下命令快速替换:

$ sed  -i.bak   s/192.168.206.130/172.16.150.12/g  config.yaml

备注:sed将把config.yaml文件中所有的192.168.206.130替换为172.16.150.12,生成一份新的config.yaml,老的文件自动备份为config.yaml.bak。

使用root身份运行脚本:# ./keystone-init.py  config.yaml

手动配置

这里我们可以无需脚本、手动配置这些步骤。首先我们创建一个默认tenant(租户),名字叫openstackDemo。

$ keystone --token 012345SECRET99TOKEN012345 \

--endpoint http://192.168.206.130:35357/v2.0  \

tenant-create   \

--name openstackDemo   \

--description "Default Tenant"   \

--enabled true

Image text

创建名为adminUser的默认用户:

$keystone --token 012345SECRET99TOKEN012345 \

--endpoint http://192.168.206.130:35357/v2.0  \

user-create \

--tenant_id  b5815b046cfe47bb891a7b64119e7f80 \

--name adminUser \

--pass secretword --enabled true

Image text

备注:英文原文此处有误,命令创建的是adminUser,结果显示name的值为admin。

创建默认角色,admin与memberRole

$keystone --token 012345SECRET99TOKEN012345 \

--endpoint http://192.168.206.130:35357/v2.0  \

role-create  \

--name  admin

Image text

$keystone --token 012345SECRET99TOKEN012345 \

--endpoint http://192.168.206.130:35357/v2.0  \

role-create \

--name memberRole

Image text

通过uesr-role-add命令选项,在openstackDemo租户中为adminUser用户赋予admin的角色。

$ keystone --token 012345SECRET99TOKEN012345 \

--endpoint http://192.168.206.130:35357/v2.0 \

user-role-add \

--user a4c2d43f80a549a19864c89d759bb3fe \

--tenant_id b5815b046cfe47bb891a7b64119e7f80 \

--role e3d9d157cc95410ea45d23bbbc2e5c10

这条命令没有输出。

创建一个服务租户,这个租户中包括我们已知的所有服务的服务目录。

$keystone --token 012345SECRET99TOKEN012345 \

--endpoint http://192.168.206.130:35357/v2.0  \

tenant-create \

--name service \

--description "Service Tenant" \

--enabled true 

Image text

在Service租户中创建Glance Service用户,我们将在Keystone服务目录中为所有的服务都添加这样的用户。

$keystone --token 012345SECRET99TOKEN012345  \

--endpoint   http://192.168.206.130:35357/v2.0  \

user-create  \

--tenant_id  eb7e0c10a99446cfa14c244374549e9d  \

--name glance \

--pass glance \

--enabled true

Image text

在service租户中为用户glance分配admin的角色。

$keystone --token 012345SECRET99TOKEN012345  \

--endpoint http://192.168.206.130:35357/v2.0  \

user-role-add \

--user 46b2667a7807483d983e0b4037a1623b \

--tenant_id eb7e0c10a99446cfa14c244374549e9d \

--role e3d9d157cc95410ea45d23bbbc2e5c10

这个命令没有输出。

在Service租户中创建一个Nova Service用户:

$keystone --token 012345SECRET99TOKEN012345  \

--endpoint http://192.168.206.130:35357/v2.0  \

user-create \

--tenant_id eb7e0c10a99446cfa14c244374549e9d \

--name nova \

--pass nova \

--enabled true

Image text

在service租户中为nova用户分配admin的角色。

$keystone --token 012345SECRET99TOKEN012345 \

--endpoint http://192.168.206.130:35357/v2.0  \

user-role-add  \

--user 54b3776a8707834d983e0b4037b1345c  \

--tenant_id eb7e0c10a99446cfa14c244374549e9d  \

--role e3d9d157cc95410ea45d23bbbc2e5c10

这条命令没有输出。

在Service租户中创建EC2 Service用户:

$keystone --token 012345SECRET99TOKEN012345  \

--endpoint http://192.168.206.130:35357/v2.0  \

user-create  \

--tenant_id eb7e0c10a99446cfa14c244374549e9d  \

--name ec2  \

--pass ec2 \

--enabled true

Image text

在service租户中为ec2用户分配admin的角色:

$keystone --token 012345SECRET99TOKEN012345 \

--endpoint http://192.168.206.130:35357/v2.0  \

user-role-add  \

--user 32e7668b8707834d983e0b4037b1345c  \

--tenant_id eb7e0c10a99446cfa14c244374549e9d \

--role e3d9d157cc95410ea45d23bbbc2e5c10

这条命令没有输出。

在Service租户中创建Object Storage服务用户:

$keystone --token 012345SECRET99TOKEN012345 \

--endpoint http://192.168.206.130:35357/v2.0  \

user-create \

--tenant_id eb7e0c10a99446cfa14c244374549e9d \

--name swift \

--pass swiftpass  \

--enabled true

Image text

在service租户中为swift用户分配admin的角色:

$keystone --token 012345SECRET99TOKEN012345 \

--endpoint http://192.168.206.130:35357/v2.0 \

user-role-add \

--user 4346677b8909823e389f0b4037b1246e \

--tenant_id eb7e0c10a99446cfa14c244374549e9d \

--role e3d9d157cc95410ea45d23bbbc2e5c10

这条命令没有输出。

后面我们还需要创建服务的定义。

为了使Keystone内置的S3 API与Swift兼容,请确保在keystone.conf文件中定义一个新的过滤器并启用:

定义过滤:
[filter:s3_extension]

paste.filter_factory = keystone.contrib.s3:S3Extension.factory

更新admin_api管道:

将
[pipeline:admin_api]
pipeline = token_auth admin_token_auth xml_body json_body debug ec2_extension crud_extension admin_service

更改为:

[pipeline:admin_api]
pipeline = token_auth admin_token_auth xml_body json_body debug ec2_extension s3_extension crud_extension admin_service


blog comments powered by Disqus

Published

26 April 2013

Tags