Openstack 中文手册-部署Identity服务02
<本文转自 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> 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
创建名为adminUser的默认用户:
$keystone --token 012345SECRET99TOKEN012345 \
--endpoint http://192.168.206.130:35357/v2.0 \
user-create \
--tenant_id b5815b046cfe47bb891a7b64119e7f80 \
--name adminUser \
--pass secretword --enabled true
备注:英文原文此处有误,命令创建的是adminUser,结果显示name的值为admin。
创建默认角色,admin与memberRole
$keystone --token 012345SECRET99TOKEN012345 \
--endpoint http://192.168.206.130:35357/v2.0 \
role-create \
--name admin
$keystone --token 012345SECRET99TOKEN012345 \
--endpoint http://192.168.206.130:35357/v2.0 \
role-create \
--name memberRole
通过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
在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
在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
在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
在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
在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