OpenStack Identity 服务提供单点集成,用于管理身份验证、授权和服务目录。
标识服务通常是用户与之交互的第一个服务。经过身份验证后,最终用户可以使用其身份访问其他OpenStack服务。同样,其他OpenStack服务利用身份服务来确保用户是他们所说的人,并发现其他服务在部署中的位置。标识服务还可以与某些外部用户管理系统(如 LDAP)集成。
用户和服务可以使用由标识服务管理的服务目录查找其他服务。顾名思义,服务目录是 OpenStack 部署中可用服务的集合。每个服务可以有一个或多个终结点,每个终结点可以是以下三种类型之一:管理员、内部或公共。在生产环境中,出于安全原因,不同的终结点类型可能驻留在向不同类型的用户公开的单独网络上。例如,公共 API 网络可能从互联网上可见,以便客户可以管理其云。管理 API 网络可能仅限于组织内管理云基础结构的操作员。内部 API 网络可能仅限于包含 OpenStack 服务的主机。此外,OpenStack支持多个区域以实现可扩展性。为简单起见,本指南将管理网络用于所有终结点类型和默认区域。在 Identity 服务中创建的区域、服务和终结点共同构成了部署的服务目录。部署中的每个 OpenStack 服务都需要一个服务条目,其中包含存储在 Identity 服务中的相应端点。这一切都可以在安装和配置标识服务后完成。
本节介绍如何在控制器节点上安装和配置 OpenStack Identity 服务(代号为 keystone)。
安装和配置
在安装和配置标识服务之前,必须创建数据库。
用数据库连接客户端以 root
用户连接到数据库服务器:
mysql -u root -p
创建 keystone
数据库:
CREATE DATABASE keystone;
对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
。
eixt退出数据库客户端。
安全并配置组件
运行以下命令来安装包。
yum install -y openstack-keystone httpd mod_wsgi
编辑文件 /etc/keystone/keystone.conf
并完成如下动作:
vim /etc/keystone/keystone.conf
在
[database]
部分,配置数据库访问:[database] connection = mysql+pymysql://keystone:KEYSTONE_DBPASS@controller/keystone
将KEYSTONE_DBPASS
替换为你为数据库选择的密码
- 在
[token]
部分,配置Fernet UUID令牌的提供者。
[token]
provider = fernet
初始化身份认证服务的数据库:
su -s /bin/sh -c "keystone-manage db_sync" keystone
初始化Fernet key:
keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone
keystone-manage credential_setup --keystone-user keystone --keystone-group keystone
引导标识服务or Bootstrap the Identity service:
keystone-manage bootstrap --bootstrap-password ADMIN_PASS \
--bootstrap-admin-url http://controller:35357/v3/ \
--bootstrap-internal-url http://controller:5000/v3/ \
--bootstrap-public-url http://controller:5000/v3/ \
--bootstrap-region-id RegionOne
替换为管理用户的合适密码。
ADMIN_PASS
Replace with a suitable password for an administrative user.
ADMIN_PASS
配置 Apache HTTP 服务器
编辑/etc/httpd/conf/httpd.conf
文件,配置ServerName
选项为控制节点:
vim /etc/httpd/conf/httpd.conf
ServerName controller:80
创建一个链接到/usr/share/keystone/wsgi-keystone.conf
文件
ln -s /usr/share/keystone/wsgi-keystone.conf /etc/httpd/conf.d/
完成安装
启动 Apache HTTP 服务并配置其随系统启动:
systemctl enable httpd.service;systemctl start httpd.service
配置admin账户脚本
vim admin
export OS_USERNAME=admin
export OS_PASSWORD=ADMIN_PASS
export OS_PROJECT_NAME=admin
export OS_USER_DOMAIN_NAME=Default
export OS_PROJECT_DOMAIN_NAME=Default
export OS_AUTH_URL=http://controller:35357/v3
export OS_IDENTITY_API_VERSION=3
执行admin文件
. admin
创建域、项目、用户和角色
身份服务为每个 OpenStack 服务提供身份验证服务。身份验证服务使用域、项目、用户和角色的组合。
创建service
项目:
openstack project create --domain default --description "Service Project" service
+-------------+----------------------------------+
| Field | Value |
+-------------+----------------------------------+
| description | Service Project |
| domain_id | default |
| enabled | True |
| id | 7eeb20ab4a434c7f8dc13f85dd1d33be |
| is_domain | False |
| name | service |
| parent_id | default |
+-------------+----------------------------------+
常规(非管理)任务应该使用无特权的项目和用户。作为例子,本指南创建 demo
项目和用户。
创建demo
项目:
openstack project create --domain default --description "Demo Project" demo
+-------------+----------------------------------+
| Field | Value |
+-------------+----------------------------------+
| description | Demo Project |
| domain_id | default |
| enabled | True |
| id | 05a0d6348521402c94444117d753f3a5 |
| is_domain | False |
| name | demo |
| parent_id | default |
+-------------+----------------------------------+
创建demo
用户:
openstack user create --domain default --password DEMO_PASS demo
+---------------------+----------------------------------+
| Field | Value |
+---------------------+----------------------------------+
| domain_id | default |
| enabled | True |
| id | 2dd768ac5440476a8215774272f7d63e |
| name | demo |
| options | {} |
| password_expires_at | None |
+---------------------+----------------------------------+
创建 user
角色:
openstack role create user
+-----------+----------------------------------+
| Field | Value |
+-----------+----------------------------------+
| domain_id | None |
| id | 450318367c3f471aa1ef457e4f017729 |
| name | user |
+-----------+----------------------------------+
将角色添加到项目的用户:user/demo/demo
openstack role add --project demo --user demo user
验证操作
在安装其他服务之前确认身份认证服务的操作。
在控制节点上执行这些命令。
作为 admin
用户,请求认证令牌:
openstack --os-auth-url http://controller:35357/v3 \
--os-project-domain-name default --os-user-domain-name default \
--os-project-name admin --os-username admin --os-password ADMIN_PASS token issue
+------------+---------------------------------------------------------------------------------------------+
| Field | Value |
+------------+---------------------------------------------------------------------------------------------+
| expires | 2022-04-27T03:13:39+0000 |
| id | gAAAAABiaKbTPcWHmTJ2dx_wD5RsZ7WuGId9zCwatSbGEhObo3Xrngd9M-3t83Z0YbMk80TwOFFGhicugqgXdzs- |
| | mWJXpLFclwgdIKCyW89-4p0Ow86f8HFEXK0Cdx6gLQGeIgVdCgkh90ph3pgF0eIvqsIGtHkP- |
| | DlbHnJgh0ZNLUFM9Jl4-0A |
| project_id | ce0e09a6236a49cd83b0818f89399885 |
| user_id | 1e00e587279844b49ae5af63d1f9d120 |
+------------+---------------------------------------------------------------------------------------------+
作为demo
用户,请求认证令牌:
openstack --os-auth-url http://controller:5000/v3 \
--os-project-domain-name default --os-user-domain-name default \
--os-project-name demo --os-username demo --os-password DEMO_PASS token issue
+------------+---------------------------------------------------------------------------------------------+
| Field | Value |
+------------+---------------------------------------------------------------------------------------------+
| expires | 2022-04-27T03:14:25+0000 |
| id | gAAAAABiaKcB88SY-OVdh7lMI6wRsvpogBFIdkXXtqn01nlBl7i4OZYWxcFHwp0Ep5izbJ1HK_dSh7MPqX5LVc4 |
| | -y86pZGJxLLsGr5ruBmFXnw- |
| | QR_EDbUkxCq4ae4pZ4wUed4G_H8fSFJWMO_YDsxr4GMiRyUxsxUILgZFvCjF160z7kPs_7Ok |
| project_id | 05a0d6348521402c94444117d753f3a5 |
| user_id | 2dd768ac5440476a8215774272f7d63e |
+------------+---------------------------------------------------------------------------------------------+
创建 OpenStack 客户端环境脚本
创建 admin
和 demo
项目和用户创建客户端环境变量脚本。
创建和编辑 admin-openrc 文件并添加以下内容:
vim admin-openrc
export OS_PROJECT_DOMAIN_NAME=Default
export OS_USER_DOMAIN_NAME=Default
export OS_PROJECT_NAME=admin
export OS_USERNAME=admin
export OS_PASSWORD=ADMIN_PASS
export OS_AUTH_URL=http://controller:35357/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2
将ADMIN_PASS
替换为你在认证服务中为admin
用户选择的密码。
创建和编辑 demo-openrc 文件并添加以下内容:
vim demo-openrc
export OS_PROJECT_DOMAIN_NAME=Default
export OS_USER_DOMAIN_NAME=Default
export OS_PROJECT_NAME=demo
export OS_USERNAME=demo
export OS_PASSWORD=DEMO_PASS
export OS_AUTH_URL=http://controller:5000/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2
将DEMO_PASS
替换为你在认证服务中为demo
用户选择的密码。
使用脚本
使用特定租户和用户运行客户端,你可以在运行之前简单地加载相关客户端脚本。
加载admin-openrc
文件来身份认证服务的环境变量位置和admin
项目和用户证书:
. admin-openrc
请求认证令牌:
openstack token issue
+------------+---------------------------------------------------------------------------------------------+
| Field | Value |
+------------+---------------------------------------------------------------------------------------------+
| expires | 2022-04-27T04:05:00+0000 |
| id | gAAAAABiaLLcCay2ev6bh826y0nMH2zsdqPIY636rCn04PIsllcFSmA_NYDyXlgwY6ezUi10x38zGghj14PJSmESmCA |
| | h8iH1aMKGA1SNHqE_N8KtmZajPq3F_laERQnvlIqubUBfgqnrmt_G8aA1VSjnrd0UA6OPNYEa8_rXat0SXOUmMJdsIz |
| | I |
| project_id | ce0e09a6236a49cd83b0818f89399885 |
| user_id | 1e00e587279844b49ae5af63d1f9d120 |
+------------+---------------------------------------------------------------------------------------------+