注意:该部分只在控制节点
一、安装和配置
这一章描述了怎样在控制结点安装和配置Openstack身份认证服务
配置前的准备
在你配置 OpenStack 身份认证服务前,你必须创建一个数据库和管理员令牌。
1. 完成下面的步骤以创建数据库:
a. 以 root 用户身份通过数据库客户端连接到数据库服务:
$ mysql -u root -p
b. 创建 keystone 数据库:
CREATE DATABASE keystone;
c. 为 keystone 数据库赋予恰当的访问权限:
GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' IDENTIFIED BY 'KEYSTONE_DBPASS';
GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' IDENTIFIED BY 'KEYSTONE_DBPASS';
将 KEYSTONE_DBPASS 替换为实际的密码。
d. 退出数据库客户端。
quit;
2. 生成一个随机值在初始的配置中作为管理员的令牌。
$ openssl rand -hex 10
二、安装和配置组件
1. 运行以下命令来安装包。
# yum install openstack-keystone python-keystoneclient
2. 编辑 /etc/keystone/keystone.conf ,并完成下列操作:
a. 在 [DEFAULT] 段中,对管理员令牌进行配置。
[DEFAULT]
...
admin_token = ADMIN_TOKEN
将 ADMIN_TOKEN 替换为上一步中生成的随机字符串。
b. 在 [database] 段,配置数据库访问相关参数:
[database]
...
connection = mysql://keystone:KEYSTONE_DBPASS@控制器/keystone
将 KEYSTONE_DBPASS 替换为实际的数据库用户的密码。
c. 在 [token] 部分,设置 UUID 令牌的提供者和 SQL 驱动。
[token]
...
provider = keystone.token.providers.uuid.Provider
driver = keystone.token.persistence.backends.sql.Token
d. 在 [revoke] 部分,配置 SQL 的撤回驱动:
[revoke]
...
driver = keystone.contrib.revoke.backends.sql.Revoke
e. (可选配置)可以在 [DEFAULT] 段中开启详细日志配置,为后期的故障排除提供帮助:
[DEFAULT]
...
verbose = True
3. 生成通用的证书和私钥文件,并修改这些文件的访问权限:
# keystone-manage pki_setup --keystone-user keystone --keystone-group keystone
# chown -R keystone:keystone /var/log/keystone
# chown -R keystone:keystone /etc/keystone/ssl
# chmod -R o-rwx /etc/keystone/ssl
4. 初始化身份认证服务的数据库:
#keystone-manage db_sync
三、完成安装
1. 启动身份认证服务,并将该服务配为系统启动时自动启动:
# systemctl enable openstack-keystone.service
# systemctl start openstack-keystone.service
2. 身份认证服务默认的情况会永久保存已经过期的身份凭证。过期凭证的累积会增加数据
库的体积甚至减低整个服务的性能,特别是在那些资源紧缺的环境中。
建议使用 cron 配置计划任务每个小时定时清理过期的身份凭证:
# (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
四、创建租户、用户和角色
1. 配置管理员令牌:
$ export OS_SERVICE_TOKEN=ADMIN_TOKEN
将其中的 ADMIN_TOKEN 替换为您在 “安装和配置”一节 [30] 中生成的管理员令牌。例
如:
$ export OS_SERVICE_TOKEN=294a4c8a8a475f9b9836
2. 配置入口点:
$ export OS_SERVICE_ENDPOINT=http://控制器:35357/v2.0
创建租户、用户和角色
1. 创建管理员租户、用户和角色以在您的环境中执行管理员操作:
a. 创建 admin 租户:
$ keystone tenant-create --name admin --description "Admin Tenant"
+-------------+----------------------------------+
| Property | Value |
+-------------+----------------------------------+
| description | Admin Tenant |
| enabled | True |
| id | 6f4c1e4cbfef4d5a8a1345882fbca110 |
| name | admin |
+-------------+----------------------------------+
b. 创建 admin 用户:
$ keystone user-create --name admin --pass ADMIN_PASS --email EMAIL_ADDRESS
+----------+----------------------------------+
| Property | Value |
+----------+----------------------------------+
| email | admin@example.com |
| enabled | True |
| id | ea8c352d253443118041c9c8b8416040 |
| name | admin |
| username | admin |
+----------+----------------------------------+
将其中的 ADMIN_PASS 替换为您要设置的一个合适的密码,其中的 EMAIL_ADDRESS
替换为合适的 e-mail 地址。
c. 创建 admin 角色:
$ keystone role-create --name admin
+----------+----------------------------------+
| Property | Value |
+----------+----------------------------------+
| id | bff3a6083b714fa29c9344bf8930d199 |
| name | admin |
+----------+----------------------------------+
d. 将 admin 角色赋予给 admin 租户和用户:
$ keystone user-role-add --user admin --tenant admin --role admin
2. 创建一个 demo 租户和用户,用于环境中的一般操作:
a. 创建 demo 租户:
$ keystone tenant-create --name demo --description "Demo Tenant"
+-------------+----------------------------------+
| Property | Value |
+-------------+----------------------------------+
| description | Demo Tenant |
| enabled | True |
| id | 4aa51bb942be4dd0ac0555d7591f80a6 |
| name | demo |
+-------------+----------------------------------+
b. 在 demo 租户下创建 demo 用户:
$ keystone user-create --name demo --tenant demo --pass DEMO_PASS --email EMAIL_ADDRESS
+----------+----------------------------------+
| Property | Value |
+----------+----------------------------------+
| email | demo@example.com |
| enabled | True |
| id | 7004dfa0dda84d63aef81cf7f100af01 |
| name | demo |
| tenantId | 4aa51bb942be4dd0ac0555d7591f80a6 |
| username | demo |
+----------+----------------------------------+
将其中的 DEMO_PASS 替换为您要设置的一个合适的密码,其中的 EMAIL_ADDRESS 替
换为合适的 e-mail 地址。
3. OpenStack 服务也需要租户、用户和角色来与其他服务交互。每个服务一般需要在
service 租户下创建一个或多个用户,并赋予 admin 的角色。
• 创建 service 租户:
$ keystone tenant-create --name service --description "Service Tenant"
+-------------+----------------------------------+
| Property | Value |
+-------------+----------------------------------+
| description | Service Tenant |
| enabled | True |
| id | 6b69202e1bf846a4ae50d65bc4789122 |
| name | service |
+-------------+----------------------------------+
创建服务实体和 API 端点
创建好租户、用户和角色后,您必须为身份认证服务创建 service 实体和 API 端点。
配置前的准备
• 如 “创建租户、用户和角色”一节 [32] 中所描述的内容,设置 OS_SERVICE_TOKEN 和
OS_SERVICE_ENDPOINT 环境变量。
创建服务实体和 API 端点
1. 身份认证服务管理了一个关于您 OpenStack 环境中的服务的目录。服务使用这个目录来
查找您环境中的其他服务。
创建服务实体和身份认证服务:
$ keystone service-create --name keystone --type identity --description "OpenStack Identity"
+-------------+----------------------------------+
| Property | Value |
+-------------+----------------------------------+
| description | OpenStack Identity |
| enabled | True |
| id | 15c11a23667e427e91bc31335b45f4bd |
| name | keystone |
| type | identity |
+-------------+----------------------------------+
2. 身份认证服务管理了一个与您环境相关的 API 端点的目录。服务使用这个目录来决定如
何与您环境中的其他服务进行通信。
创建身份认证服务的 API 端点:
$ keystone endpoint-create --service-id $(keystone service-list | awk '/ identity / {print $2}') --publicurl http://控制器:5000/v2.0 --internalurl http://控制器:5000/v2.0 \
--adminurl http://控制器:35357/v2.0 --region regionOne
+-------------+----------------------------------+
| Property | Value |
+-------------+----------------------------------+
| adminurl | http://controller:35357/v2.0 |
| id | 11f9c625a3b94a3f8e66bf4e5de2679f |
| internalurl | http://controller:5000/v2.0 |
| publicurl | http://controller:5000/v2.0 |
| region | regionOne |
| service_id | 15c11a23667e427e91bc31335b45f4bd |
+-------------+----------------------------------+
验证操作
这个部分描述如何验证身份认证服务的操作。
1. 取消 OS_SERVICE_TOKEN 和 OS_SERVICE_ENDPOINT 临时环境变量的设置:
$ unset OS_SERVICE_TOKEN OS_SERVICE_ENDPOINT
2. 使用admin 租户和用户,需要一个认证的令牌:
$ keystone --os-tenant-name admin --os-username admin --os-password ADMIN_PASS --os-auth-url http://controller:35357/v2.0 token-get
+-----------+----------------------------------+
| Property | Value |
+-----------+----------------------------------+
| expires | 2014-10-10T12:50:12Z |
| id | 8963eb5ccd864769a894ec316ef8f7d4 |
| tenant_id | 6f4c1e4cbfef4d5a8a1345882fbca110 |
| user_id | ea8c352d253443118041c9c8b8416040 |
+-----------+----------------------------------+
将其中的 ADMIN_PASS 替换为您在身份认证服务中为 admin 用户设置的密码。如果包含
特殊字符,您可能需要使用单引号 (') 将密码引用。
3. 使用 admin 租户和用户,列出租户以验证 admin 租户和用户能够执行只有管理员才能执
行的命令行,且身份认证服务包含您在 “创建租户、用户和角色”一节 [32] 中创建的
租户:
$ keystone --os-tenant-name admin --os-username admin --os-password ADMIN_PASS --os-auth-url http://controller:35357/v2.0 tenant-list
+----------------------------------+----------+---------+
| id | name | enabled |
+----------------------------------+----------+---------+
| 6f4c1e4cbfef4d5a8a1345882fbca110 | admin | True |
| 4aa51bb942be4dd0ac0555d7591f80a6 | demo | True |
| 6b69202e1bf846a4ae50d65bc4789122 | service | True |
+----------------------------------+----------+---------+
4. 使用 admin 租户和用户,列出用户以验证身份认证服务包含您在 “创建租户、用户和
角色”一节 [32] 中创建的用户:
$ keystone --os-tenant-name admin --os-username admin --os-password ADMIN_PASS \
--os-auth-url http://controller:35357/v2.0 user-list
+----------------------------------+---------+---------+---------------------+
| id | name | enabled | email |
+----------------------------------+---------+---------+---------------------+
| ea8c352d253443118041c9c8b8416040 | admin | True | admin@example.com |
| 7004dfa0dda84d63aef81cf7f100af01 | demo | True | demo@example.com |
+----------------------------------+---------+---------+---------------------+
5. 使用 admin 租户和用户,列出角色以验证 身份认证服务包含您在 “创建租户、用户和
角色”一节 [32] 中创建的角色:
$ keystone --os-tenant-name admin --os-username admin --os-password ADMIN_PASS \
--os-auth-url http://controller:35357/v2.0 role-list
+----------------------------------+----------+
| id | name |
+----------------------------------+----------+
| 9fe2ff9ee4384b1894a90878d3e92bab | _member_ |
| bff3a6083b714fa29c9344bf8930d199 | admin |
+----------------------------------+----------+
将其中的 DEMO_PASS 替换为您在身份认证服务中为 demo 用户所设置的密码。
7. 使用 demo 租户和用户,尝试列出用户以验证您不能执行只有管理员才能执行的命令
行:
$ keystone --os-tenant-name demo --os-username demo --os-password DEMO_PASS \
--os-auth-url http://controller:35357/v2.0 user-list
You are not authorized to perform the requested action, admin_required. (HTTP 403)
创建 OpenStack 客户端环境脚本
1. 编辑 admin-openrc.sh 文件并添加下列内容:
export OS_TENANT_NAME=admin
export OS_USERNAME=admin
export OS_PASSWORD=ADMIN_PASS
export OS_AUTH_URL=http://控制器:35357/v2.0
将其中的 ADMIN_PASS 替换为您在身份认证服务中为 admin 用户设置的密码。
2. 编辑 demo-openrc.sh 文件并添加下列内容:
export OS_TENANT_NAME=demo
export OS_USERNAME=demo
export OS_PASSWORD=DEMO_PASS
export OS_AUTH_URL=http://控制器:5000/v2.0
将其中的 DEMO_PASS 替换为您在身份认证服务中为 demo 用户设置的密码。
加载客户端环境脚本
• 使用特定租户和用户运行客户端,您可以在运行之前简单地加载相关客户端脚本。例
如,加载身份认证服务的位置和 admin 租户及用户的凭证:
$ source admin-openrc.sh