您现在的位置 >> Hadoop教程 >> Hadoop实战 >> 专题  
 

OpenStack身份管理Identity-keystone之安装配置指导

【作者:Hadoop实战专家】【关键词:创建一个 服务 命令 需要 】 【点击:92557次】【2013-12-3】
首先我们创建一个默认tenant(租户),名字叫openstackDemo。译者备注:Keystone的服务编录类似于注册表,在这里我们把OpenStack所有服务的endpoint(终端)写入服务编录中,服务之间的调用需要经过Keystone的验证,并通过这个服务编录找到目标服务的终端(endpoint)位置。  

相关热门搜索:服务器虚拟化技术 服务器虚拟化

大数据标签:bigdata

1.此篇文章适合安装指导
2.测试一下自己看完是否能得到总体的安装步骤
3.测试自己能记得几个命令
例如如何手动创建数据库,如何创建不同的角色
安装与配置Identity服务
1.安装Identity服务
你可以安装Identity服务在任何能被其他服务主机访问的服务器上,以root身份运行如下命令:
# yum  install  openstack-utils   openstack-keystone
备注:原文档仅提供安装命令,但该安装方式需要设置yum源,以下为个人补充的添加yum源方法,方法来源于Fedora项目。

1. $ sudo rpm -Uvh http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-7.noarch.rpm

复制代码
安装后,你需要删除sqlite数据库并修改配置文件将其指向MySQL数据库。这样的配置更容易部署多个Keystone前段指向相同的后端数据库服务器。
删除/var/lib/keystone目录下的keystone.db文件。
备注:据译者亲身实验,使用以上的yum源安装时该文件并不会产生,省去了删除文件的步骤。
配置生产环境的数据库存储来取代默认的目录功能以备份服务及终端数据,这里以MySQL为例。
安装MySQL(需要root权限):

1. # yum  install  mysql   mysql-server

2.

复制代码
安装过程中会提示为mysql的root帐号设置密码,根据提示设置密码。
设置Mysql为开机启动进程:

1. # chkconfig  --level  2345  mysqld  on

2. # service  mysqld  start

复制代码
以下系列命令将创建一个名为"keystone”的数据库,以及一个名为"keystone”的mysql用户名,该用户拥有访问keystone数据库的所有权限。默认,密码与用户名同名。
在Fedora,RHEL,CentOS系统上,你可以通过openstack-db命令创建Keystone数据库。

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

2.

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

1. $ mysql  -u  root  -p

2.

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

1. mysql> CREATE  DATABASE  keystone;

2.

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

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

复制代码
退出MySQL数据库: mysql> quit
回想以下,我们在OpenStack第二天文档中对云环境的构思中建设云控制节点的IP为192.168.106.130。
现在一个Keystone已经安装完成,你可以通过主配置文件修改配置(/etc/keystone/keystone.conf),以及通过命令行初始化数据。默认Keystone的数据保存在sqlite中,在/etc/keystone/keystone.conf修改如下一行connection定义来改变数据存储位置:

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

2.

复制代码
备注:据译者亲身实验,现在的keystone版本默认就将数据库指向了本机的MySQL数据库。
同时,要确保keystone.conf文件中配置了合适的服务标识符,你可以使用自己的随机字串,像下面这样:

1. admin_token = 012345SECRET99TOKEN012345

2.

复制代码
或者通过命令行设置随机字串:

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

2. $ 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服务,并设置为开机启动项。

1. $ sudo  service  keystone  restart  &&  sudo  chkconfig  keystone  on

2.

复制代码
译者备注:在新的版本中keystone的启动脚本不是keystone,而是openstack-keystone,所以实际工作中你需要将以上命令修改为sudo  service  openstack-keystone  restart  &&  sudo  chkconfig   openstack-keystone   on
最后初始化新的keystone数据库,需要root权限:

1. # keystone-manage   db_sync

2.

复制代码
2.2.配置Identity服务
设置租户,用户与角色,你最少需要定义一个租户、用户、角色以通过Identity服务的身份验证与授权获得其他服务。
脚本配置:
在Fedora,RHEL或CentOS系统上,你可以通过运行脚本更新数据。

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

2.

复制代码
Keystone项目提供了一份部署客户、用户、角色的bash脚本,样本数据在https://github.com/openstack/key ... ools/sample_data.sh。
译者注:系统命令openstack-keystone-sample-data运行的就是位于/usr/share/openstack-keystone目录下的sample_data.sh脚本。
此外,任何用户pyton工具的分布,都可以通过keystone客户端的API运行keystone-init脚本完成初始化动作。

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

复制代码
这个初始化脚本需要使用PyYAML,通过https://github.com/nimbis/keysto ... er/keystone-init.py页面,你可以看到脚本做了哪些工作。
为你的服务器编辑config.yaml文件中的IP地址,你可以在config.yaml目录下运行以下命令快速替换:

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

2.

复制代码
译者备注:sed将把config.yaml文件中所有的192.168.206.130替换为172.16.150.12,生成一份新的config.yaml,老的文件自动备份为config.yaml.bak。
使用root身份运行脚本:

1. # ./keystone-init.py  config.yaml

2.

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

1. $ keystone --token 012345SECRET99TOKEN012345 \

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

3.   tenant-create   \

4. --name openstackDemo   \

5. --description "Default Tenant"   \

6. --enabled true

复制代码

1.png (27.61 KB, 下载次数: 0)

  

2014-2-9 01:08 上传

创建名为adminUser的默认用户:

1. $keystone --token 012345SECRET99TOKEN012345 \

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

3. user-create \

4. --tenant_id  b5815b046cfe47bb891a7b64119e7f80 \

5. --name adminUser \

6. --pass secretword --enabled true

复制代码

2.jpg (45.16 KB, 下载次数: 0)

  

2014-2-9 01:09 上传

译者备注:英文原文此处有误,命令创建的是adminUser,结果显示name的值为admin。
创建默认角色,admin与memberRole

1. $keystone --token 012345SECRET99TOKEN012345 \

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

3. role-create  \

4. --name  admin

5.

复制代码

3.png (26.06 KB, 下载次数: 0)

  

2014-2-9 01:09 上传

1. $keystone --token 012345SECRET99TOKEN012345 \

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

3. role-create \

4. --name memberRole

5.

复制代码

4.png (26.06 KB, 下载次数: 0)

  

2014-2-9 01:10 上传

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

1. $ keystone --token 012345SECRET99TOKEN012345 \

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

3. user-role-add \

4. --user a4c2d43f80a549a19864c89d759bb3fe \

5. --tenant_id b5815b046cfe47bb891a7b64119e7f80 \

6. --role e3d9d157cc95410ea45d23bbbc2e5c10

复制代码
这条命令没有输出。
创建一个服务租户,这个租户中包括我们已知的所有服务的服务目录。

1. $keystone --token 012345SECRET99TOKEN012345 \

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

3. tenant-create \

4. --name service \

5. --description "Service Tenant" \

6. --enabled true

复制代码

5.jpg (21.93 KB, 下载次数: 0)

  

2014-2-9 01:11 上传

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

1. $keystone --token 012345SECRET99TOKEN012345  \

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

3. user-create  \

4. --tenant_id  eb7e0c10a99446cfa14c244374549e9d  \

5. --name glance \

6. --pass glance \

7. --enabled true

复制代码

6.png (71.63 KB, 下载次数: 0)

  

2014-2-9 01:11 上传

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

1. $keystone --token 012345SECRET99TOKEN012345  \

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

3. user-role-add \

4. --user 46b2667a7807483d983e0b4037a1623b \

5. --tenant_id eb7e0c10a99446cfa14c244374549e9d \

6. --role e3d9d157cc95410ea45d23bbbc2e5c10

复制代码
这个命令没有输出。
在Service租户中创建一个Nova Service用户:

1. $keystone --token 012345SECRET99TOKEN012345  \

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

3. user-create \

4. --tenant_id eb7e0c10a99446cfa14c244374549e9d \

5. --name nova \

6. --pass nova \

7. --enabled true

复制代码

7.png (69.98 KB, 下载次数: 0)

  

2014-2-9 01:12 上传

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

1. $keystone --token 012345SECRET99TOKEN012345 \

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

3. user-role-add  \

4. --user 54b3776a8707834d983e0b4037b1345c  \

5. --tenant_id eb7e0c10a99446cfa14c244374549e9d  \

6. --role e3d9d157cc95410ea45d23bbbc2e5c10

复制代码
这条命令没有输出。
在Service租户中创建EC2 Service用户:

1. $keystone --token 012345SECRET99TOKEN012345  \

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

3. user-create  \

4. --tenant_id eb7e0c10a99446cfa14c244374549e9d  \

5. --name ec2  \

6. --pass ec2 \

7. --enabled true

复制代码

8.png (68.57 KB, 下载次数: 0)

  

2014-2-9 01:13 上传

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

1. $keystone --token 012345SECRET99TOKEN012345 \

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

3. user-role-add  \

4. --user 32e7668b8707834d983e0b4037b1345c  \

5. --tenant_id eb7e0c10a99446cfa14c244374549e9d \

6. --role e3d9d157cc95410ea45d23bbbc2e5c10

复制代码
这条命令没有输出。
在Service租户中创建Object Storage服务用户:

1. $keystone --token 012345SECRET99TOKEN012345 \

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

3. user-create \

4. --tenant_id eb7e0c10a99446cfa14c244374549e9d \

5. --name swift \

6. --pass swiftpass  \

7. --enabled true

复制代码

9.png (67.06 KB, 下载次数: 0)

  

2014-2-9 01:14 上传

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

1. $keystone --token 012345SECRET99TOKEN012345 \

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

3. user-role-add \

4. --user 4346677b8909823e389f0b4037b1246e \

5. --tenant_id eb7e0c10a99446cfa14c244374549e9d \

6. --role e3d9d157cc95410ea45d23bbbc2e5c10

复制代码
这条命令没有输出。
后面我们还需要创建服务的定义。
为了使Keystone内置的S3 API与Swift兼容,请确保在keystone.conf文件中定义一个新的过滤器并启用:
定义过滤:

1. [filter:s3_extension]

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

复制代码
更新admin_api管道: 将

1. [pipeline:admin_api]

2. pipeline = token_auth admin_token_auth xml_body json_body debug ec2_extension crud_extension admin_service

3.

复制代码
更改为:

1. [pipeline:admin_api]

2. pipeline = token_auth admin_token_auth xml_body json_body debug ec2_extension s3_extension crud_extension admin_service

3.

复制代码
2.3.定义服务
Keystone还担任着服务编录的角色,为其他的OpenStack系统指定哪里有相关的API终端位置。尤其是OpenStack的控制面板(Dashborad)更需要这个编录的服务。
译者备注:Keystone的服务编录类似于注册表,在这里我们把OpenStack所有服务的endpoint(终端)写入服务编录中,服务之间的调用需要经过Keystone的验证,并通过这个服务编录找到目标服务的终端(endpoint)位置。
使用keystone定义服务的方式有两种:
使用模版文件定义服务
使用后端数据库定义服务
使用模版文件的方式因为其比较简单,但除非是像DevStack这样的开发环境否则我们并不推荐使用这种模式。使用模版文件不支持通过keystone命令对服务编录执行CRUD操作,但不妨碍你使用service-list命令。而后端数据库则是一种更可靠的、高可用、提供数据冗余的方式。这节我们将描述如何使用后端数据库架构服务编录,你需要将/etc/keystone/keystone.conf文件中的[catalog]选项修改为如下这种配置:

1. [catalog]

2. driver = keystone.catalog.backends.sql.Catalog

复制代码
Keystone服务编录条目的要素
对于目录中的每个服务条目,你都需要执行两个keystone操作:
1).使用keystone  service-create命令为服务创建数据库条目,命令选项如下:
--name                            服务名称(如:nova,ec2,glance,keystone)
--type                            服务类型(如:compute,ec2,image,idnetity)
--description                     服务描述(如:"Nova Compute Servece”)
2).使用keystone  endpoint-create命令创建数据库条目,描述客户端如果连接不同类型的服务,即指定各个服务的终端位置,命令选项如下:
--region                       你为OpenStack云取的区域名称(如:RegionOne)
--service_id                   通过keystone   service-create命令返回的服务ID(如:935fd37b6fa74b2f9fba6d907fa95825)
--publicurl                    服务终端(endpoint)对公网提供的URL(如:http://192.168.206.130:9292/v1或http://192.168.202.130:8774/v2%(tenat_id)s)
--internalurl                  服务终端对内提供的URL(典型案例是使用与publicurl相同的值)
--adminurl                     提供服务管理界面的URL
Keystone允许URL使用变量,这些变量在运行期间会自动替换为正确的,例如使用类似于tenant_id这样的变量。你可以使用%(变量名)或$(变量名)标识正在使用变量。
创建keystone服务与服务终端(service endpoints)
这里我们会定义服务及其终端。
定义Identity服务:

1. $ keystone --token 012345SECRET99TOKEN012345 \

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

3. service-create \

4. --name=keystone \

5. --type=identity \

6. --description="Keystone Identity Service"

复制代码

10.png (28.88 KB, 下载次数: 0)

  

2014-2-9 01:17 上传

1. $ keystone --token 012345SECRET99TOKEN012345 \

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

3. endpoint-create \

4. --region RegionOne \

5. --service_id=15c11a23667e427e91bc31335b45f4bd \

6. --publicurl=http://192.168.206.130:5000/v2.0 \

7. --internalurl=http://192.168.206.130:5000/v2.0 \

8. --adminurl=http://192.168.206.130:35357/v2.0

9.

复制代码
定义Compute服务,需要为不同的租户(tenant)需要独立的endpoint,这里我们使用上节创建的service租户(tenant)。

1. $ keystone --token 012345SECRET99TOKEN012345 \

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

3. service-create \

4. --name=nova \

5. --type=compute \

6. --description="Nova Compute Service"

复制代码

11.png (30.35 KB, 下载次数: 0)

  

2014-2-9 01:18 上传

1. $ keystone --token 012345SECRET99TOKEN012345 \

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

3. endpoint-create \

4. --region RegionOne \

5. --service_id=abc0f03c02904c24abdcc3b7910e2eed \

6. --publicurl='http://192.168.206.130:8774/v2/%(tenant_id)s' \

7. --internalurl='http://192.168.206.130:8774/v2/%(tenant_id)s' \

8. --adminurl='http://192.168.206.130:8774/v2/%(tenant_id)s'

复制代码

12.png (47.93 KB, 下载次数: 0)

  

2014-2-9 01:18 上传

定义卷(Volume)服务,不同的tenant需要独立的endpoint:

1. $ keystone --token 012345SECRET99TOKEN012345 \

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

3. service-create \

4. --name=volume \

5. --type=volume \

6. --description="Nova Volume Service"

复制代码

13.png (34.55 KB, 下载次数: 0)

  

2014-2-9 01:19 上传

1. $ keystone --token 012345SECRET99TOKEN012345 \

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

3. endpoint-create \

4. --region RegionOne \

5. --service_id=1ff4ece13c3e48d8a6461faebd9cd38f \

6. --publicurl='http://192.168.206.130:8776/v1/%(tenant_id)s' \

7. --internalurl='http://192.168.206.130:8776/v1/%(tenant_id)s' \

8. --adminurl='http://192.168.206.130:8776/v1/%(tenant_id)s'

复制代码

14.png (47.84 KB, 下载次数: 0)

  

2014-2-9 01:20 上传

定义镜像服务(Image service):

1. $ keystone --token 012345SECRET99TOKEN012345 \

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

3. service-create \

4. --name=glance \

5. --type=image \

6. --description="Glance Image Service"

复制代码

15.png (31.23 KB, 下载次数: 0)

  

2014-2-9 01:20 上传

1. $ keystone --token 012345SECRET99TOKEN012345 \

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

3. endpoint-create \

4. --region RegionOne \

5. --service_id=7d5258c490144c8c92505267785327c1 \

6. --publicurl=http://192.168.206.130:9292/v1 \

7. --internalurl=http://192.168.206.130:9292/v1 \

8. --adminurl=http://192.168.206.130:9292/v1

复制代码

16.png (69.03 KB, 下载次数: 0)

  

2014-2-9 01:21 上传

定义EC2兼容服务:

1. $ keystone --token 012345SECRET99TOKEN012345 \

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

3. service-create \

4. --name=ec2 \

5. --type=ec2 \

6. --description="EC2 Compatibility Layer"

复制代码

17.png (24.71 KB, 下载次数: 0)

  

2014-2-9 01:22 上传

1. $ keystone --token 012345SECRET99TOKEN012345 \

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

3. endpoint-create \

4. --region RegionOne \

5. --service_id=181cdad1d1264387bcc411e1c6a6a5fd \

6. --publicurl=http://192.168.206.130:8773/services/Cloud \

7. --internalurl=http://192.168.206.130:8773/services/Cloud \

8. --adminurl=http://192.168.206.130:8773/services/Admin

复制代码

18.png (42.35 KB, 下载次数: 0)

  

2014-2-9 01:22 上传

定义Object Storage服务:

1. $ keystone --token 012345SECRET99TOKEN012345 \

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

3. service-create \

4. --name=swift \

5. --type=object-store \

6. --description="Object Storage Service"

复制代码

19.png (25.65 KB, 下载次数: 0)

  

2014-2-9 01:23 上传

1. $ keystone --token 012345SECRET99TOKEN012345 \

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

3. endpoint-create \

4. --region RegionOne \

5. --service_id=272efad2d1234376cbb911c1e5a5a6ed \

6. --publicurl 'http://127.0.0.1:8080/v1/AUTH_%(tenant_id)s' \

7. --adminurl 'http://127.0.0.1:8080/' \

8. --internalurl 'http://127.0.0.1:8080/v1/AUTH_%(tenant_id)s'

复制代码

21.png (47.92 KB, 下载次数: 0)

  

2014-2-9 01:23 上传

Keystone的日志文件为/var/log/keystone.log,如果需要排除可以查看该文件。
三、验证
安装curl,一个运行REST API请求的命令行工具,同时还需要安装openssl,通过yum安装可以解决依赖包问题:

1. # yum  install  curl   openssl

复制代码
你可以运行如下命令,确保你的Identity服务可以正常工作:

1. curl -d '{"auth": {"tenantName": "adminTenant", "passwordCredentials":{"username": "adminUser", "password": "secretword"}}}'   \

2. -H "Content-type:application/json" http://192.168.206.130:35357/v2.0/tokens | python -mjson.tool

复制代码
作为adminUser用户,你将收到如下响应:

1. {

2. "access": {

3. "serviceCatalog": {},

4. "token": {

5. "expires": "2012-04-12T00:40:12Z",

6. "id": "cec68088d08747639c682ee5228106d1"

7. },

8. "user": {

9. "id": "6b0141904f09480d810a5949d79ea0f3",

10. "name": "adminUser",

11. "roles": [],

12. "roles_links": [],

13. "username": "adminUser"

14. }

15. }

16. }

复制代码
或者你可以运行以下命令:

1. curl -d '{"auth": {"tenantName": "openstackDemo", "passwordCredentials":{"username": "adminUser", "password": "secretword"}}}' \

2. -H "Content-type:application/json" http://192.168.206.130:35357/v2.0/tokens | python -mjson.tool

复制代码
你会收到类似于如下的信息:

1. {

2. "access": {

3. "serviceCatalog": {},

4. "token": {

5. "expires": "2012-04-12T00:41:21Z",

6. "id": "a220bfdf313b404fa5e063fcc7cc1f3e",

7. "tenant": {

8. "description": "Default Tenant",

9. "enabled": true,

10. "id": "50af8cc655c24ada96f73010c96b70a2",

11. "name": "openstackDemo"

12. }

13. },

14. "user": {

15. "id": "6b0141904f09480d810a5949d79ea0f3",

16. "name": "adminUser",

17. "roles": [],

18. "roles_links": [],

19. "username": "adminUser"

20. }

21. }

22. }

复制代码
这里另外还有一种快速的方法判断Keystone是否工作正常。首先,需要设置如下环境变量:

1. export ADMIN_TOKEN=012345SECRET99TOKEN012345

2. export OS_USERNAME=adminUser

3. export OS_PASSWORD=secretword

4. export OS_TENANT_NAME=openstackDemo

5. export OS_AUTH_URL=http://127.0.0.1:5000/v2.0/

复制代码
通过输入keystone  user-list命令,你可以看到用户列表。

1. $ keystone user-list

复制代码

22.png (51.13 KB, 下载次数: 0)

  

2014-2-9 01:26 上传

来自群组: openstack技术组

大数据系列相关文章:

最新评论
自由梦2014-09-10 11:37:56
at org.apache.hadoop.mapreduce.Job.waitForCompletion(Job.java:1286)
晃晃悠悠2014-09-10 08:08:20
3、温州--弃房已超千套 涉资产愈64亿;
潘潘2014-09-10 08:54:00
收费的我还找了好久呢
2014-09-09 07:18:21
先觉的问题
Marry2014-09-08 09:03:08
@︶ㄣ武oоО :你确认你可以连接上嘛?
 
  • Hadoop生态系统资料推荐