OpenStack Identity(Keystone)身份服务-体系结构与中间件

本文详细介绍了OpenStackIdentity(Keystone)服务的功能,包括验证、服务目录、组件、中间件以及关键概念如租户、用户、角色等。文章还探讨了Keystone的组件、中间件设计及其在验证过程中的作用。

OpenStack Identity(Keystone)服务为运行OpenStack Compute上的OpenStack云提供了认证和管理用户、帐号和角色信息服务,并为OpenStack Object Storage提供授权服务。

 

Keystone体系结构
Keystone 有两个主要部件:验证和服务目录


验证:提供了一个基于令牌的验证服务,主要有以下几个概念:
租户(Tenant)
使用OpenStack相关服务的一个组织。一个租户映射到一个Nova的“project-id”,在对象存储中,一个租户可以有多个容器。根据不同的安装方式,一个租户可以代表一个客户、帐号、组织或项目。
用户(User)
代表一个个体,OpenStack以用户的形式来授权服务给它们。用户拥有证书(credentials),且可能分配给一个或多个租户。经过验证后,会为每个单独的租户提供一个特定的令牌。
证书(credentials)
为了给用户提供一个令牌,需要用证书来唯一标识一个Keystone用户的密码或其它信息
令牌(token)
一个令牌是一个任意比特的文本,用于与其它OpenStack服务来共享信息,Keystone以此来提供一个central location,以验证访问OpenStack服务的用户。一个令牌可以是“scoped”或“unscoped”。一个scoped令牌代表为某个租户验证过的用户,而unscoped令牌则仅代表一个用户。令牌的有效期是有限的,可以随时被撤回。
角色(Role)
一个角色是应用于某个租户的使用权限集合,以允许某个指定用户访问或使用特定操作。角色是使用权限的逻辑分组,它使得通用的权限可以简单地分组并绑定到与某个指定租户相关的用户。


服务目录(Service Catalog)
Keystone为OpenStack安装提供了一个REST API端点列表并以此作为决策参考。主要的概念包括:
服务(Service)
一个OpenStack服务,例如nova、swift、glance或keystone。一个服务可以拥有一个或多个端点,通过它用户可以与OpenStack的服务或资源交互。
端点(Endpoint)
一个可以通过网络访问的地址(典型地,一个URL),代表了OpenStack服务的API接口。端点也可以分组为模板,每个模板代表一组可用的OpenStack服务,这些服务是跨区域(regions)可用的。
模板(Template)
一个端点集合,代表一组可用的OpenStack服务端点。

 

Keystone的组件
Keystone包含一个命令行接口,可以与Keystone API交互以管理keystone和相关服务。
keystone - 运行keystone-admin和keystone-service
keystone-admin - 操作keystone的管理API
keystone-service - 用于验证的,面向用户的AP
keystone-manage - 管理keystone的命令行接口
Keystone还包括WSGI中间件以为Nova和Swift提供验证服务。
Keystone使用一个内置的SQLite数据库 - 为验证用户,将来也可能使用一个外部LDAP服务来代替存储证书

 

中间件(Middleware)
Keystone中间件位于OpenStack服务前面,处理进来的请求验证。中间件的设计遵循如下的规范。
中间件的源代码位于Keystone/middleware。
中间件支持两个接口:WSGI和REST/HTTP。


REST & HTTP API
如果进来一个未经认证的调用,中间件将响应一个401 Unautorized错误。根据每HTTP的标准,它也会返回一个WWW-Authenticate包头以通知调用者支持哪个协议。对于Keystone验证,响应的语法格式如下:
WWW-Authenticate: Keystone uri="url to Keystone server"The client can then make the necessary calls to the Keystone server, obtain a token, and retry the call with the token.
令牌使用 X-Auth-Toke包头传递。

 

WSGI API(包头)
当成功验证后中间件经为下行的WSGI应用发送如下包头:
X-Identity-Status
提供请求是否被验证的信息。
X-Tenant
提供了租户ID(在Keystone中以URL的形式出现)。在Keysotne转为采用ID/Name模式之前,它为租户提供了对任意遗留实现的支持。
X-Tenant-Id
唯一不变的租户ID。
X-Tenant-Name
唯一但可变的租户名字。
X-User
用于登录的用户名。
X-Roles
分配给用户的角色。

转载于:https://my.oschina.net/amoshuang/blog/83694

<think>嗯,用户遇到了关于OpenStack Keystone服务的问题,执行systemctl status和start命令时显示服务未找到。我需要仔细分析可能的原因,并提供解决方案。 首先,用户可能没有安装Keystone服务。在基于RHEL的系统上,软件包名称通常是openstack-keystone使用yumdnf安装。需要检查是否已正确安装。 其次,软件包名称可能因发行版不同而有所变化。例如,Ubuntu上的包名可能不同,但用户使用的是CentOS/RHEL,所以应确认正确的包名和仓库是否启用。 另外,用户可能安装了Keystone但没有启用启动服务。需要提醒用户使用systemctl enable和start命令,并确认安装后是否进行了必要的配置,比如数据库设置、Fernet密钥生成和Apache配置,因为现代OpenStack版本可能将Keystone作为Apache模块运行,而不是独立的服务。 此外,如果用户从源代码安装,服务文件可能不在标准位置,需要手动创建。者,用户可能误删了服务文件,需要重新安装软件包。 最后,建议用户检查安装步骤,确认是否遗漏了某些环节,并查看日志文件以获取更多信息。需要分步骤引导用户逐一排查,确保问题得到解决。</think>当遇到`openstack-keystone.service`服务未找到的情况时,通常由以下原因导致: --- ### **1. 未安装 Keystone 服务** #### 现象特征 - 执行 `systemctl status/start` 命令时提示 **"Unit not found"** - 系统中缺少 `/usr/lib/systemd/system/openstack-keystone.service` 文件 #### 解决方法 **步骤 1:确认软件包是否安装** ```bash rpm -qa | grep openstack-keystone ``` - 若没有输出结果,说明未安装 **步骤 2:安装 Keystone 软件包** ```bash yum install openstack-keystone httpd mod_wsgi -y ``` - 注意:现代 OpenStack 版本(如 Queens+)通常将 Keystone 集成到 Apache 中,需同时安装 `httpd` 和 `mod_wsgi` --- ### **2. 服务名称不匹配** #### 现象特征 - 不同发行版安装方式可能导致服务名称差异 - 例如:部分环境使用 `keystone.service` 而非 `openstack-keystone.service` #### 解决方法 **尝试通用服务名查询** ```bash systemctl list-unit-files | grep -i keystone ``` --- ### **3. 服务未启用未配置** #### 现象特征 - 已安装软件包但未完成初始化配置 - 未生成 systemd 服务文件 #### 解决方法 **步骤 1:检查配置文件完整性** ```bash ls /etc/keystone/keystone.conf ``` **步骤 2:执行数据库初始化**(需先配置数据库连接) ```bash su -s /bin/sh -c "keystone-manage db_sync" keystone ``` **步骤 3:生成 Fernet 密钥** ```bash keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone keystone-manage credential_setup --keystone-user keystone --keystone-group keystone ``` **步骤 4:启动 Apache 服务**(替代传统 systemd 服务) ```bash systemctl enable httpd --now ``` --- ### **4. 软件源问题** #### 现象特征 - 使用非标准软件源导致包名不一致 - 例如:从源码安装时未生成服务文件 #### 解决方法 **验证软件源配置** ```bash yum repolist | grep openstack ``` - 确保已启用正确的 OpenStack 仓库(如 `centos-openstack-zed`) --- ### **5. 服务文件被误删除** #### 现象特征 - 其他服务管理正常,仅 Keystone 异常 - `/usr/lib/systemd/system/` 目录下无相关服务文件 #### 解决方法 **重新安装软件包** ```bash yum reinstall openstack-keystone -y ``` --- ### **关键日志检查位置** | 日志路径 | 作用 | |---------|------| | `/var/log/httpd/keystone_*.log` | Apache 整合后的 Keystone 日志 | | `/var/log/keystone/keystone.log` | 传统独立服务日志(若存在) | | `/var/log/messages` | 系统服务启动错误 | --- ### **总结处理流程** ```bash # 1. 确认安装 yum install openstack-keystone httpd mod_wsgi -y # 2. 完成基础配置 keystone-manage db_sync keystone-manage fernet_setup ... keystone-manage bootstrap ... # 3. 启动 Apache 服务 systemctl enable httpd --now # 4. 验证服务状态 curl -s http://controller:5000/v3/ | python -m json.tool ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值