分享

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

pig2 发表于 2014-2-9 01:26:10 [显示全部楼层] 只看大图 回帖奖励 阅读模式 关闭右栏 0 13614
本帖最后由 pig2 于 2014-2-9 01:30 编辑


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
复制代码
安装过程中会提示为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
复制代码
也可以通过手动的方式创建数据库。
  1. $ mysql  -u  root  -p                          
复制代码
根据提示:需要输入mysql root的密码,创建keystone数据库。
  1. mysql> CREATE  DATABASE  keystone;
复制代码
接着再创建一个对新建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
复制代码
备注:据译者亲身实验,现在的keystone版本默认就将数据库指向了本机的MySQL数据库。
同时,要确保keystone.conf文件中配置了合适的服务标识符,你可以使用自己的随机字串,像下面这样:
  1. admin_token = 012345SECRET99TOKEN012345
复制代码
或者通过命令行设置随机字串:
  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
复制代码
译者备注:在新的版本中keystone的启动脚本不是keystone,而是openstack-keystone,所以实际工作中你需要将以上命令修改为sudo  service  openstack-keystone  restart  &&  sudo  chkconfig   openstack-keystone   on
最后初始化新的keystone数据库,需要root权限:
  1. # keystone-manage   db_sync
复制代码
2.2.配置Identity服务
设置租户,用户与角色,你最少需要定义一个租户、用户、角色以通过Identity服务的身份验证与授权获得其他服务。
脚本配置:
在Fedora,RHEL或CentOS系统上,你可以通过运行脚本更新数据。
  1. $ sudo  ADMIN_PASSWORD=$OS_PASSWORD  SERVICE_PASSWORD=servicepass   openstack-keystone-sample-data
复制代码
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
复制代码
译者备注:sed将把config.yaml文件中所有的192.168.206.130替换为172.16.150.12,生成一份新的config.yaml,老的文件自动备份为config.yaml.bak。
使用root身份运行脚本:
  1. # ./keystone-init.py  config.yaml
复制代码
手动配置
这里我们可以无需脚本、手动配置这些步骤。首先我们创建一个默认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


创建名为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



译者备注:英文原文此处有误,命令创建的是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
复制代码
3.png
  1. $keystone --token 012345SECRET99TOKEN012345 \
  2. --endpoint http://192.168.206.130:35357/v2.0  \
  3. role-create \
  4. --name memberRole
复制代码
4.png

通过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


在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


在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


在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


在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


在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
复制代码
更改为:
  1. [pipeline:admin_api]
  2. pipeline = token_auth admin_token_auth xml_body json_body debug ec2_extension s3_extension crud_extension admin_service
复制代码
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/v1http://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
  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
复制代码
定义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
  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
定义卷(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
  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


定义镜像服务(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
  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
定义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
  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


定义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
  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

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





来自群组: openstack技术组

没找到任何评论,期待你打破沉寂

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条