Openstack 02 - Keystone

1.前言

上一篇我们介绍了Openstack的整体架构,了解了Openstack包含的服务及服务之间的关系.从这一篇开始我们深入到Openstack各个服务(模块)内部,深入了解下Openstack的设计及通信方式,从而更加深入地了解Openstack的设计.

2.Keystone

Keystone是openstack的identity service,主要提供两种服务:

1) 用户、角色、租户的管理

2) 其他服务的认证与授权管理、服务API权限控制.

keystone为各个服务提供认证服务,需要与各个模块交互.比如在创建虚拟机的过程中,keystone首先需要为用户提供认证服务,其次需要为nova,neutron,swift等服务提供认证服务.下图展示了创建虚拟机过程中,各个相关的模块交互的情形.


通过上图,我们可以发现,在调用每一个服务之前,都必须由keystone对Token进行校验,校验通过则调用目标服务.这种机制是如何实现的呢?其实是采用了Filter的机制.这种机制类似于Spring中的Filter的概念,也类似ASP.NET MVC中的Filter的概念.通过这种AOP的机制,可以很好地实现对请求的拦截.对于Openstack来说,使用的是OSGI的机制,关于OSGI,请参考:OSGI介绍

下面介绍下各个模块和keystone的交互关系.


Keystone 里面涉及到的相关的概念:
1)User
User可简单的理解为用户,用户携带信物(token)能够访问openstack各个服务和资源。
2)Tenant
Tenant即租户,早期版本又称为project,它是各个服务中的一些可以访问的资源集合。比如通过nova创建虚拟机时要指定到某个租户中,在cinder创建卷也要指定到某个租户中。用户访问租户的资源前,必须与该租户关联,并且指定该用户在该租户下的角色。
3)Role
Role即角色,可以理解为VIP等级,用户的Role越高,在openstack中能访问的服务和资源就更多。
4)Service
Service即服务,如Nova、Glance、Swift、heat、ceilometer等。Nova提供云计算的服务,Glance提供镜像管理服务,Swift提供对象存储服务,heat提供资源编排服务,ceilometer则是提供告警计费服务,cinder提供块存储服务。
5)Endpoint
Service的显得太抽象笼统。Endpoint则具体化Service。Endpoint翻译为“端点”,我们可以理解它是一个服务暴露出来的访问点,如果需要访问一个服务,则必须知道他的endpoint,而endpoint一般为url,我们知道了服务的url,我们就可以访问它。Endpoint 的url具有public、private和admin这三种权限。public url可以被全局访问,private url只能被局域网访问,admin url被从常规的访问中分离。
6)Token
Token即是信物、令牌,用户通过用户名和密码获取在某个租户下的token,通过token,可以实现单点登录。
7)Credentials
该术语可以简单的理解为用户和密码。

keystone支持多种认证方式:

1) Certificates for PKI

PKI(Public Key Infrastructure) 是一种公钥加密的机制.类似Https加密的机制.

2) Httpd 和 X.509

3) LDAP 协议

4) 第三方的认证




### OpenStack Keystone 服务单元文件缺失解决方案 当遇到 OpenStack Keystone 的服务单元文件丢失问题时,可以按照以下方法排查并解决问题。 #### 1. 验证服务状态 首先确认 `keystone` 服务的状态是否存在异常。可以通过以下命令检查服务是否正常运行: ```bash systemctl status openstack-keystone.service ``` 如果返回提示找不到该服务,则说明可能缺少相应的服务单元文件[^1]。 --- #### 2. 安装或重新安装 Keystone 软件包 Keystone 的服务单元文件通常由其软件包提供。如果发现服务单元文件确实不存在,尝试重新安装 Keystone 软件包来恢复必要的配置文件。 对于基于 Debian/Ubuntu 的系统,执行以下命令: ```bash apt-get install --reinstall openstack-keystone ``` 而对于 CentOS/RHEL 系统,可使用以下命令: ```bash yum reinstall openstack-keystone ``` 这一步会确保所有必需的服务单元文件被正确部署到 `/usr/lib/systemd/system/openstack-keystone.service` 或其他默认路径下[^2]。 --- #### 3. 手动创建服务单元文件 如果上述方法未能修复问题,或者由于某些原因无法通过重装解决,可以选择手动创建服务单元文件。以下是标准的 `openstack-keystone.service` 文件内容: ```ini [Unit] Description=OpenStack Identity Service (keystone) After=syslog.target network.target remote-fs.target nss-lookup.target [Service] Type=simple User=root ExecStart=/usr/bin/keystone-all --config-file /etc/keystone/keystone.conf Restart=on-abort [Install] WantedBy=multi-user.target ``` 将此内容保存至 `/etc/systemd/system/openstack-keystone.service` 后刷新 systemd 并启动服务: ```bash systemctl daemon-reload systemctl start openstack-keystone.service systemctl enable openstack-keystone.service ``` --- #### 4. 检查日志以定位潜在错误 即使解决了服务单元文件的问题,仍需验证 Keystone 是否能成功初始化。查看相关日志可以帮助进一步诊断问题所在: ```bash journalctl -u openstack-keystone.service cat /var/log/keystone/keystone.log ``` 这些日志记录可能会揭示更深层次的原因,例如数据库连接失败或其他依赖项未满足的情况[^3]。 --- #### 5. 数据库同步与环境变量设置 有时 Keystone 可能因数据库表结构不一致而报错。此时应先完成数据库迁移操作后再重启服务: ```bash su -s /bin/sh -c "keystone-manage db_sync" keystone ``` 另外注意检查环境变量是否已正确定义,特别是涉及身份认证所需的参数如 `OS_TOKEN`, `OS_URL` 和 `ADMIN_PASSWORD` 等[^4]。 --- ### 总结 以上方案涵盖了从基础层面检测到高级调试技巧的一系列措施,能够有效应对大多数情况下发生的 Keystone 服务不可用状况。若仍有疑问,请提供更多上下文信息以便深入分析。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值