天天看点

OpenStack入门修炼之Keystone服务部署与测试(8)

1.Keystone的介绍

Keystone在N版已经是V3版本。在Keystone中主要涉及以下几个概念:

User:使用服务的用户,可以是人,服务或者系统,只要是使用了openstack服务的对象都可以称为用户。当User对OpenStack进行访问时,Keystone会对其身份进行验证。

project(tenant)租户,可以理解为一个人,项目或者组织拥有的资源的合集。在一个租户中可以拥有很多个用户,这些用户可以根据权限的划分使用租户中的资源

Role:角色,用于分配操作的权限。角色可以被指定给用户,使得该用户获得角色对应的操作权限。

安全包含两部分:Authentication(认证)和 Authorization(鉴权)

Authentication 解决的是“你是谁?”的问题 

Authorization 解决的是“你能干什么?”的问题

Keystone 是借助 Role 来实现 Authorization 的:

Token:认证成功后,keystone会生成一串比特值或者字符串,用来作为访问资源的令牌,token中有可访问资源的范围和有效时间

service:服务,nova,glance都是属于一个服务,需要在keystone上进行创建,指定类型。

创建服务有一个服务,就创建一个endpoint,会根据服务类型去查找那个服务。Service 决定每个 Role 能做什么事情 ,Service 通过各自的 policy.json 文件对 Role 进行访问控制

endpoint:端点,是一个服务暴露出来的访问点,如果需要访问一个服务,就必须知道他的endpoint。每个endpoint都有三个url访问地址(admin,internal,public)。public url可以被全局访问,private url只能被局域网访问,admin url被从常规的访问中分离。User 通过 Endpoint 访问资源和执行操作

2.Keystone V3 API 新特性

Keystone V3 做出了许多变化和改进,我们选取其中较为重要的进行阐述:

将 Tenant 改称为 Project

引入 Domain 的概念

引入 Group 的概念

将 Tenant 改为 Project 并在其上添加 Domain 的概念,这更加符合现实世界和云服务的映射。

V3 利用 Domain 实现真正的多租户(multi-tenancy)架构,Domain 担任 Project 的高层容器。云服务的客户是 Domain 的所有者,他们可以在自己的 Domain 中创建多个 Projects、Users、Groups 和 Roles。通过引入 Domain,云服务客户可以对其拥有的多个 Project 进行统一管理,而不必再向过去那样对每一个 Project 进行单独管理。

Group 是一组 Users 的容器,可以向 Group 中添加用户,并直接给 Group 分配角色,那么在这个 Group 中的所有用户就都拥有了 Group 所拥有的角色权限。通过引入 Group 的概念,Keystone V3 实现了对用户组的管理,达到了同时管理一组用户权限的目的。这与 V2 中直接向 User/Project 指定 Role 不同,使得对云服务进行管理更加便捷。

OpenStack入门修炼之Keystone服务部署与测试(8)

3.Keystone服务部署过程

(1)数据库各服务库的创建和授权

tips:配置 OpenStack 身份认证服务前,必须创建一个数据库和管理员令牌。由于其余服务也需要用到数据库,此处将所有的服务所需要的库都进行创建并授权

(2)keystone服务配置:/etc/keystone/keystone.conf

(3)初始化身份认证服务的数据库,并验证是否初始化成功:

OpenStack入门修炼之Keystone服务部署与测试(8)

(4)keystone服务配置:/etc/keystone/keystone.conf

(5)查看keystone服务所有的配置

(6)初始化Fernet key:

(7)初始化命令bootstrap,初始化自动创建一个admin用户以及相关权限,直接在keystone上进行注册服务,创建endpoint。

(8)配置apache http服务器

tips:kesytone是python写的,apache有一个wsgi模块,可以通过这个模块和python进行通信。端口为5000和35357,缺省情况下,Kestone服务仍然监听这些端口

①编辑<code>/etc/httpd/conf/httpd.conf</code> 文件,配置<code>ServerName</code> 选项为控制节点:

②创建一个链接到<code>/usr/share/keystone/wsgi-keystone.conf</code>文件

③设置apache开机自启动

(9)开始使用keystone就需要进行验证,有两种方式连接Keystone:第一种方式使用参数,另外一种方式就通过环境变量方式进行连接。

(10)创建域、项目、用户、角色

为什么创建service项目?在前面已经概述到一个用户需要属于一个项目(用户组),并且要赋予一种角色(权限)进行管理服务。而其余服务需要连接keystone,需用使用用户名密码连接,那其他服务自然就需要有属于某一个项目,是什么用户,什么角色去连接Keystone。此处默认的域创建为为default,对域的概念不明白可以参考前文。

在这里:我们分别创建了service项目,并配置了默认的域为default。也创建了glance、nova、neutron、cinder用户,并赋予admin角色,使openstack的服务组件可以与Keystone进行通信。

常规(非管理)任务应该使用无特权的项目和用户。作为例子,这里采用demo项目和demo用户

创建demo项目,demo用户密码,创建use角色并赋予demo用户user角色

创建glance、nova、neutron、cinder用户,并赋予admin角色

(11)验证操作:在安装其他服务之前确认身份认证服务操作

在控制节点(192.168.56.11)上操作这些命令

①撤销临时环境变量<code>OS_AUTH_URL</code>和<code>OS_PASSWORD</code>

②作为 admin 用户,请求认证令牌:

③作为<code>demo</code> 用户,请求认证令牌:

tips:能够正常获取到tonken,说明keystone服务是正常。

(12)创建 OpenStack 客户端环境脚本

① 创建 admin 和 <code>demo</code>项目和用户创建客户端环境变量脚本

②加载<code>admin-openrc</code>文件来身份认证服务的环境变量位置和<code>admin</code>项目和用户证书:

③ 请求认证令牌:

到此,Keystone服务就算配置完成了。

OpenStack 排查问题的方法主要是通过日志。 

每个 Service 都有自己的日志文件。

Keystone 主要有两个日志: 

keystone.log 和 keystone_access.log 

保存在 /var/log/apache2/ 目录里。

如果需要得到最详细的日志信息,可以在 /etc/keystone/keystone.conf 中打开 debug 选项

总结Keystone常见的错误:

401 #验证失败,keystone相关用户账户密码设置错误,时间不同步,或者输入的项目名称不对

403 #可能未初始化OS_token变量,需要使用source命令使其生效,也可能是配置的配置文件未生效,需要重启相关服务

409 #keystone创建用户,用户已存在

500 #服务器内部错误,服务配置有问题,看日志,检查配置

503 #keystone相关账户密码设置有问题,请将相关的glance账户删除,重新创建即可

服务故障 #相关服务没有起来

Keystone的配置/etc/keystone/keystone.conf总结:

①由于Keystone需要使用数据库,需要配置数据库的连接

②由于需要将token存储到memcache,减少对数据库的访问,需要配置memcached服务器地址和端口

③由于tonken的生成是基于某种算法,此处选用的是fernet方式,需要配置令牌提供者为fernet

④在选用memcache作为缓存token的方式,需要配置驱动方式(driver)

版权声明:原创作品,谢绝转载。否则将追究法律责任

本文转自 IT_外卖小哥  51CTO博客,原文链接:http://blog.51cto.com/jinlong/2049477