juno版OpenStack部署中如何添加认证服务

56次阅读
没有评论

共计 10288 个字符,预计需要花费 26 分钟才能阅读完成。

这篇文章给大家介绍 juno 版 OpenStack 部署中如何添加认证服务,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

keystone 简介

keystone 主要为了实现以下关键功能:

追踪用户和管理其权限;

提供可访问服务的目录,并提供服务的 API 端点(API endpoints)。

keystone 中的一些基本概念简介

用户(User)可使用 OpenStack 云服务的个人、系统或服务的数字化形象。(Digital representation of a person, system, or service who uses OpenStack cloud services.)

证书(Credentials)用于确认用户身份的数据。

认证(Authentication)确认一个用户身份的认证过程。

令牌(Token)一段字母和数字组成的文本,用于访问 OpenStack 的 API 和资源。

租户(Tenant)一个用来分组或隔离资源的集合。租户还可以用来分组或隔离认证对象。根据不同的服务操作者,一个租户可以对应一个顾客、一个账户、一个组织或一个项目。(A container used to group or isolate resources. Tenants also group or isolate identity objects. Depending on the service operator, a tenant may map to a customer, account, organization, or project.)

服务(Service)OpenStack 的服务,用于 Compute(nova),Object Storage(swift)或 Image Service(glance)等。它为用户访问资源,实施运作提供了一个或多个端点(endpoint)。

端点(Endpoint)一个可以通过网络来访问服务的地址,通常是一个 URL 地址。

角色(Role)一种定义好的拥有施行特定操作的权限的个人特征。

keystone 客户端(Keystone Client)一种用于 OpenStack 认证 API 的命令行交互界面。

安装和配置

keystone 服务安装在 controller 节点上。

## 配置 keystone 所使用的数据库 使用 root 身份进入数据库(密码为安装数据库步骤时设立的):

$ mysql -u root -p```
进入数据库界面后创建属于 keystone 的数据库:

CREATE DATABASE keystone;“`

把 keystone 数据库的访问权限赋予名为 keystone,来自任何主机地址的用户,并设定访问密码为 KEYSTONE_DBPASS(替换为合适的密码):

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 变更为合适的密码。退出数据库客户端。##  安装配置组件
1.  安装 keystone 包:

apt-get install keystone python-keystoneclient“`

编辑 “`

vi /etc/keystone/keystone.conf“` 文件:

在 [DEFAULT] 部分,定义 initial administration token:

[DEFAULT]
 ...
 admin_token = ADMIN_TOKEN```
  其中替换 ADMIN_TOKEN 为合适的值,可以通过 ```
# openssl rand -hex 10``` 来生成。  继续在 ```
[DEFAULT]``` 部分开启“输出详细记录日志”的选项:

[DEFAULT] … verbose = True“`

在 [database] 部分,设定数据库访问选项:

[database]
 ...
 connection = mysql://keystone:KEYSTONE_DBPASS@controller/keystone```
  把 KEYSTONE_DBPASS 替换为创建 keystone 数据库时所授权的密码。配置默认使用 SQL 的数据库连接,需要注释掉或删除。  在 ```
[token]``` 部分,配置 UUID token provider 和 SQL driver:

[token] … provider = keystone.token.providers.uuid.Provider driver = keystone.token.persistence.backends.sql.Token“`

在 [revoke] 部分,配置 SQL revocation driver:

[revoke]
 ...
 driver = keystone.contrib.revoke.backends.sql.Revoke```
  同步认证服务数据库:

keystone-manage db_sync“` 完成最后的安装

重启认证服务:

# service keystone restart```
默认 Ubuntu 会产生 SQLite 数据库,可以将其删除:

rm -f /var/lib/keystone/keystone.db“`

默认情况下,认证服务会无限量地存储过期的 token,这将导致数据库占用空间大幅度增加而且会降低认证服务的性能,用以下命令可以定期清除过期的 token:

# (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/crontabs/keystone```
#  创建租户,用户和角色
##  配置所需的环境变量
在使用 keystone 命令操作前,需要先使用临时的 administration token(即在 ```
/etc/keystone/keystone.conf``` 文件中设定的 ADMIN_TOKEN),并手动配置认证服务的地址(endpoint)。将 administration token 写入环境变量:

$ export OS_SERVICE_TOKEN=ADMIN_TOKEN“` 将 endpoint 写入环境变量:

$ export OS_SERVICE_ENDPOINT=http://controller:35357/v2.0```
##  创建租户,用户和角色
1.  创建拥有管理操作职能的管理租户,管理用户和管理角色。  创建 ```
admin``` 租户:

$ keystone tenant-create –name admin –description Admin Tenant +————-+———————————-+ | Property | Value | +————-+———————————-+ | description | Admin Tenant | | enabled | True | | id | e8cda8def37b4d32b765759f1faa5ed2 | | name | admin | +————-+———————————-+

  创建 ```
admin``` 用户:

$ keystone user-create –name admin –pass ADMIN_PASS –email EMAIL_ADDRESS +———-+———————————-+ | Property | Value | +———-+———————————-+ | email | admin@example.com | | enabled | True | | id | 13b460ca8d9e4aa094e8f4f4fff6f087 | | name | admin | | username | admin | +———-+———————————-+“` 用合适的密码代替 ADMIN_PASS。

创建 admin 角色:

$ keystone role-create --name admin
+----------+----------------------------------+
| Property | Value |
+----------+----------------------------------+
| id | 2bf07853b40b420eb9e9e2aa23ff3e9e |
| name | admin |
+----------+----------------------------------+```
  将 ```
admin``` 角色赋予给 ```
admin``` 租户和 ```
admin``` 用户。

$ keystone user-role-add –user admin –tenant admin –role admin“` 这条命令不会产生输出显示。

创建拥有特定权限的 demo 租户,demo 用户

创建 demo 租户:

$ keystone tenant-create --name demo --description  Demo Tenant 
+-------------+----------------------------------+
| Property | Value |
+-------------+----------------------------------+
| description | Demo Tenant |
| enabled | True |
| id | ef5783a270d84bb880a2c6fb85eac651 |
| name | demo |
+-------------+----------------------------------+```
  创建属于 ```
demo``` 租户的 ```
demo``` 用户 

keystone user-create –name demo –tenant demo –pass DEMO_PASS –email EMAIL_ADDRESS +———-+———————————-+ | Property | Value | +———-+———————————-+ | email | demo@example.com | | enabled | True | | id | 2a6e8190e26c4f27ba98171235a8b219 | | name | demo | | tenantId | ef5783a270d84bb880a2c6fb85eac651 | | username | demo | +———-+———————————-+“` 用合适的密码代替 DEMO_PASS

OpenStack 服务的配置方案

OpenStack 的服务都需要被赋予租户,用户和角色的性质来与其他服务进行交互。每个服务都需要创建一个或多个独立的用户,这个用户被赋予 admin 角色,并且属于 service 租户下。

创建 service 租户:

$ keystone tenant-create --name service --description  Service Tenant 
+-------------+----------------------------------+
| Property | Value |
+-------------+----------------------------------+
| description | Service Tenant |
| enabled | True |
| id | e4288b01bc084a29ad6133f882a58732 |
| name | service |
+-------------+----------------------------------+```
#  创建服务实体和 API 端点(service entity and API endpoint)##  配置所需的环境变量
具体操作如上一步骤所述。##  创建服务实体和 API 端点
1.  创建服务实体
  认证服务会将 OpenStack 环境中的所有服务登记在目录中,所有服务都通过这个目录来定位环境中的其他服务。  创建认证服务的服务实体:

$ keystone service-create –name keystone –type identity
–description OpenStack Identity +————-+———————————-+ | Property | Value | +————-+———————————-+ | description | OpenStack Identity | | enabled | True | | id | d7bbd538857b4caa9f7f9730a74b98ca | | name | keystone | | type | identity | +————-+———————————-+“`

创建服务 API 端点 认证服务会将 OpenStack 环境中每个服务对应的 API 端点登记在目录中,这个目录将用来支持各个服务之间的通信。

创建认证服务的 API 端点:

$ 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 \
--region regionOne
+-------------+----------------------------------+
| Property | Value |
+-------------+----------------------------------+
| adminurl | http://controller:35357/v2.0 |
| id | 32fb8b8934024c30bd1f0b7795a51220 |
| internalurl | http://controller:5000/v2.0 |
| publicurl | http://controller:5000/v2.0 |
| region | regionOne |
| service_id | d7bbd538857b4caa9f7f9730a74b98ca |
+-------------+----------------------------------+```
#  验证操作
1.  复位环境变量:

$ unset OS_SERVICE_TOKEN OS_SERVICE_ENDPOINT“`

以 admin 租户和用户的身份,请求一条 authentication token:

$ 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 | 2015-11-24T12:37:45Z |
| id | 1d5ebdf4e60a4f648240a20a65cbf96e |
| tenant_id | 4f7806287c9a437e9cd912504ff71727 |
| user_id | fd151acb7cc34bba8d4d9cf391ad0d06 |
+-----------+----------------------------------+```
ADMIN_PASS 为之前设定的 ```
admin``` 用户密码。3.  以 ```
admin``` 租户和用户的身份,列出租户清单:

$ 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 | +———————————-+———+———+ | 4f7806287c9a437e9cd912504ff71727 | admin | True | | d1f7caccc65840b68258997a759da07f | demo | True | | 5ab4d5c513f543cfbf8e3be97f5df5fb | service | True | +———————————-+———+———+ ADMIN_PASS 为之前设定的 admin“` 用户密码。

以 admin 租户和用户的身份,列出用户清单:

$ 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 |
+----------------------------------+-------+---------+-------------------+
| fd151acb7cc34bba8d4d9cf391ad0d06 | admin | True | admin@example.com |
| 812116bcca5b4a01981669fcef09ee11 | demo | True | demo@example.com |
+----------------------------------+-------+---------+-------------------+```
ADMIN_PASS 为之前设定的 ```
admin``` 用户密码。5.  以 ```
admin``` 租户和用户的身份,列出角色清单:

$ 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 | | 61286483662e40ba8f0a48b05fc8a451 | admin | +———————————-+———-+ ADMIN_PASS 为之前设定的 admin“` 用户密码。其中_member_的来历如下,在创建用户时:Using the –tenant option automatically assigns the member role to a user. This option will also create the member role if it does not exist.(创建时使用的命令为 keystone user-create –name demo –tenant demo –pass DEMO_PASS –email EMAIL_ADDRESS)

以 demo 租户和用户的身份,请求一条 authentication token:

$ keystone --os-tenant-name demo --os-username demo --os-password DEMO_PASS \
--os-auth-url http://controller:35357/v2.0 token-get
+-----------+----------------------------------+
| Property | Value |
+-----------+----------------------------------+
| expires | 2015-11-24T13:06:04Z |
| id | 9eca8d1dff374c2da6f358e85f0b60af |
| tenant_id | d1f7caccc65840b68258997a759da07f |
| user_id | 812116bcca5b4a01981669fcef09ee11 |
+-----------+----------------------------------+```
DEMO_PASS 为之前设定的 ```
demo``` 用户密码。7.  以 ```
demo``` 租户和用户的身份,验证无法执行 ```
admin``` 专属命令:

$ 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 客户端环境脚本创建脚本

创建文件 admin-openrc.sh,并输入以下内容:

export OS_TENANT_NAME=admin
export OS_USERNAME=admin
export OS_PASSWORD=ADMIN_PASS
export OS_AUTH_URL=http://controller: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://controller:5000/v2.0 DEMO_PASS 为之前设定的 demo“` 用户密码。

** 注:** 端口 35357 是为拥有管理权限的操作准备的,端口 5000 是为普通用户操作准备的。

启动客户端环境脚本

根据不同租户和用户,执行 $ source admin-openrc.sh 或 $ source demo-openrc.sh。

安装时出现的问题及解决方法

安装完 keystone 后,创建 Admin Tenant 时出现“Unable to establish connection to http://controller:35357/v2.0/tenants”的错误,可能是安装 keystone 时未完整安装,重新安装并更新。在验证步骤时出现(HTTP 401),有可能是密码等配置错误,导致访问权限受限,重新检查配置文件和各个用户的密码情况。

关于 juno 版 OpenStack 部署中如何添加认证服务就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-08-16发表,共计10288字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)