云计算基础架构平台构建与应用基于centos6.5

(四)Keystone的安装及其配置

实训涉及节点
controller
实训目标

  1. 完成Keystone基本组件的安装;
  2. 完成Keystone数据库的创建以及授权;
  3. 完成Keystone主配置文件的修改;
  4. 完成Keystone安全与认证配置;
  5. 完成Keystone用户、租户、角色以及服务和端点的创建;
  6. 完成Keystone环境变量脚本的创建。
    1、 Keystone基本组件的安装。
[root@controller ~] # yum -y install openstack-keystone python-keystoneclient

创建Keystone数据库并授权。

[root@controller ~] # mysql -uroot -p000000
mysql> create database keystone;

创建MySQL的Keystone用户,并赋予其Keystone数据库的操作权限。

mysql>grant all privileges on keystone.* to 'keystone'@'localhost' identified by '000000';
mysql>grant all privileges on keystone.* to 'keystone'@'%' identified by '000000';

通用语法:
mysql>grant all privileges on 数据库名.表名 to ‘用户名’@’主机’ identified by ‘密码’;
2、 修改配置Keystone文件。
openstack-config出现无此命令,需下载该命令相关包。yum -y install openstack-utils。

[root@controller ~]# openstack-config --set /etc/keystone/keystone.conf database connection mysql://keystone:000000@controller/keystone

上述命令的功能是在/etc/keystone/keystone.conf文件的[database]段落中添加”connection=mysql(数据库类型)😕/keystone(登录数据库的用户名):000000(用户密码)@controller(数据库主机名)/keystone(数据库)”配置。通过vi也可以修改/etc/keystone/keystone.conf文件
需要同步数据库,为认证服务创建数据库表。

[root@controller ~] # su -s /bin/sh -c "keystone-manage db_sync" keystone

命令进行验证:

[root@controller ~] # mysql -uroot -p000000 -e "use keystone;show tables;"

通过OpenSSL服务生成一个10位长度的十六进制随机数作为token值,命令如下:

[root@controller ~] # ADMIN_TOKEN=$(openssl rand -hex 10)

将此token值写入Keystone配置文件,

[root@controller ~]#openstack-config --set /etc/keystone/keystone.conf DEFAULT admin_token $ADMIN_TOKEN

通过命令echo$ADMIN_TOKEN查看token值
3、 Keystone安全与认证配置
默认情况下,Keystone使用PKI令牌,创建签名密匙和证书,并限制对生成的数据的访问,命令如下。

[root@controller ~] # keystone-manage pki_setup --keystone-user keystone --keystone-group keystone

更改ssl目录及其下所有文件和目录的所属用户和所属组,命令如下。

[root@controller ~] # chown -R keystone:keystone /etc/keystone/ssl

去掉ssl目录及其下所有文件和目录的其他用户的所有权限,命令如下。

[root@controller ~] # chmod -R o-rwx /etc/keystone/ssl

5、 启动服务并设置开机自启

[root@controller ~] # service openstack-keystone start
[root@controller ~] # chkconfig openstack-keystone on

命令验证:

[root@controller ~] # chkconfig | grep openstack-keystone

6、 清除失效令牌。
默认情况下,认证服务无期限的在数据库中存储失效的令牌。尽管对生产环境中的审计有潜在价值,但累计的失效令牌将大幅增加数据库的大小,可能会降低服务质量,特别是在具备有限资源的测试环境下。建议使用cron配置一个周期性任务,来每小时清除失效的令牌,并输出日志,命令如下:

[root@controller ~] # (crontab -l -u keystone 2>&1 |grep -q token_flush) || echo '@hourly/usr/bin/keystone-manage token_flush>/var/log/keystone/keystone-tokenflush.log 2>&1' >> /var/spool/cron/keystone

创建用户、租户、角色
通常,需要指定一个用户名和密码通过认证服务进行身份验证。
使用授权令牌取代ADMIN_TOKEN,导入环境变量来指定身份服务正在何处运行。

[root@controller ~] # export OS_SERVICE_TOKEN=$ADMIN_TOKEN
[root@controller ~] # export OS_SERVICE_ENDPOINT=http://controller:35357/v2.0

通过env查看环境变量是否生效

[root@controller ~] # env

现在可以创建一个管理用户、角色、租户并授予用户访问权限。

[root@controller ~] # keystone user-create --name=admin --pass=000000

这里创建了一个admin用户,密码:000000

[root@controller ~] # keystone role-create --name=admin

这里创建了一个admin角色

[root@controller ~] # keystone tenant-create --name=admin --description="Admin Tenant"

这里创建了一个admin租户

[root@controller ~] # keystone user-role-add --user=admin --tenant=admin --role=admin

上述命令可以实现用户、角色和租户的连接,即将用户添加到租户中,并赋予用户相应角色即权限。这里将admin用户添加到admin租户中,并为admin用户绑定admin角色。

[root@controller ~] # keystone user-role-add --user=admin --tenant=admin --role=_member_

上述命令中,除了给admin用户赋予admin权限之外,还赋予了admin用户_member_权限。
默认情况下,认证服务会创建一个特殊的_member_角色,OpenStack的Dashboard服务需要用户拥有_member_角色。
云用户里,除了管理员之外,还有普通用户。(和上述创建管理用户基本一致)

[root@controller ~] # keystone user-create --name=demo --pass=000000
[root@controller ~] # keystone tenant-create --name=demo --description="Demo Tenant"
[root@controller ~] # keystone user-role-add --user=demo --tenant=demo --role=_member_

上述命令创建了一个demo租户,当增加额外的普通用户是不需要再重新创建租户,直接将新添加的普通用户加入到demo租户中即可。
在Openstack中,几乎所有的服务(包括Keystone服务)想要正常运行,都必须首先向Keystone服务器注册。每一个服务需要向Keystone注册两个方面的信息,即用户信息,服务(service)和端点(endpoint)信息。为方便管理,这里创建一个service租户,将本实验的所有服务都创建在service租户下,命令如下:

[root@controller ~] # keystone tenant-create --name=service --description="Service Tenant"

7、 创建服务(service)和端点(endpoint)
在OpenStack中需要在安装服务时将每一个服务在Keystone服务中进行注册登记,以便Keystone服务可以知道其他服务的安装位置同时定位它们的网络位置。所以现在必须先注册Keystone本身。此时同样需要使用OS_SERVICE_TOKEN环境变量进行身份验证。
首先创建一个服务入口,即service,命令如下:

[root@controller ~] # keystone service-create --name=keystone --type=identity --description="Openstack Identity"

Openstack使用返回的服务(service)ID来为Openstack各服务指定一个API端点(endpoint)。当创建一个端点时,需要分别为public API、internal API及admin API指定URL。可以使用IP地址或主机名。

[root@controller ~] #  keystone endpoint-create --service-id=$(keystone service-list | awk '/ identity / {print $2}') --publicurl=http://controller:5000/v2.0 --internalurl=http://controller:5000/v2.0 --adminurl=http://controller:35357/v2.0

上述命令中,“keystone service-list”的作用是列出所有已经创建的服务(service),“awk ‘/ identity / {print $2}’”的作用是通过awk筛选功能,匹配到“identity”所在行,{print $2}是指打印出第二个数值即输出第二个字段中的数值。|为Linux中的管道符,作用是将前一个命令的输出结果传递给后一个命令并作为第二个命令的条件使用。注意:Keystone服务为admin API使用了一个不同的端口35357。
8、 验证认证服务Keystone的安装(后续的服务不需要验证)
为验证Keystone服务的正确安装和配置,清除OS_SERVICE_TOKEN,以及OS_SERVICE_ENDPOINT环境变量中的值,命令如下。

[root@controller ~] # unset OS_SERVICE_TOKEN OS_SERVICE_ENDPOINT

用管理凭证和管理终端建立一个admin-openrc.sh文件

[root@controller ~] # vi admin-openrc.sh

添加:

export OS_USERNAME=admin
export OS_PASSWORD=000000
export OS_TENANT_NAME=admin
export OS_AUTH_URL=http://controller:35357/v2.0

在环境变量中导入这个文件来读取,使环境变量生效

[root@controller ~] # source admin-openrc.sh

通过Keystone命令来验证admin-openrc.sh文件是否被配置正确。

[root@controller ~] # keystone token-get

验证管理员账户是否已经被授权执行管理命令的权限。可以通过查看keystone user-list命令输出中的ID是否匹配keystone user-role-list命令中的user_id,以及管理角色是否对用户和相关租户罗列出来,这能验证我们的用户账户是否拥有绑定角色相匹配的admin权限,命令如下。

[root@controller ~] # keystone user-list
[root@controller ~] # keystone user-role-list --user=admin --tenant=admin

查看服务端点,命令如下。

[root@controller ~] # keystone endpoint-list