practice_keystone - meetbill/op_practice_book GitHub Wiki

keystone

简介

keystone 中的概念

  • User —— 使用 OpenStack Service 的的对象被称为用户,这里的用户可以是人、服务、系统。

  • Role —— 用来划分权限。给User指定Role的过程,就是给User指定权限的过程。可以简单理解为公司内部职位和职员的关系。公司职员在不同的岗位有不同的权限。在OpenStack中,Keystone返回给User的Token中包含了Role列表,被访问的Service会判断访问它的User和User提供的Token中的Role。系统默认使用 Role 是 admin(管理) 和 member(成员) 。

  • Project (Tenant)—— 可以理解为一个人或者服务所拥有的资源集合。一个Project中可以包含多个User, 每一个User都可以根据分配的权限来使用Project中的资源。比如使用Nova创建的虚拟机要被指定到某个Project中,Cinder创建的卷也要指定到某个Project中,User访问Project中的资源前,需要先与Project关联,并指定User在Project中的Role。

  • Policy —— Openstack对User的验证除了身份验证,还需要鉴别 User 对某个Service是否有访问权限。Policy用来定义什么角色对应什么权限。对Keystone来说,Policy其实是一个JSON文件,默认是 /etc/keystone/policy.json 。通过Policy,Keystone实现了对User的权限管理。

  • Token —— 令牌,使用一个字符串表示。Token中包含了在指定的范围和指定的时间内可以被访问的资源。Token一般被用户持有。

  • Credentials —— 用于确认用户身份的凭证。

  • Authentication —— 确定用户身份的过程。

  • Service —— 指Openstack中运行的组件服务。

  • EndPoint —— 一个可以通过网络来访问和定位某个OpenStack Service的地址,通常表现为一个URL。EndPoint 分三种:

    • Admin Url —— 供admin用户使用,Port:35357
    • Internal Url —— OpenStack 内部服务使用,Port: 5000
    • Public Url —— 供其他用户使用,Port: 5000

    需要注意的是,虽然这里分了三种 URL, 在使用 EndPoint 访问的时候,用户的权限是和URL无关的,用户的权限只和 Role 有关,和用户访问哪一个URL无关。

安装手册

安装中问题

(1)创建keystone身份认证服务组件失败

[root@localhost ~]# openstack service create   --name keystone --description "OpenStack Identity" identity
An unexpected error prevented the server from fulfilling your request. (HTTP 500) (Request-ID: req-bf416d0b-f752-457b-b5b4-8fda97ce93ab)

日志

[root@localhost ~]# tail -f /var/log/keystone/keystone.log 
2017-07-16 17:48:27.603 21074 ERROR keystone.common.wsgi ProgrammingError: (pymysql.err.ProgrammingError) (1146, u"Table 'keystone.service' doesn't exist") [SQL: u'INSERT INTO service (id, type, enabled, extra) VALUES (%(id)s, %(type)s, %(enabled)s, %(extra)s)'] [parameters: {'type': u'identity', 'enabled': 1, 'id': '16f0eb934de74ccd8a4352a1bc0a8e95', 'extra': '{"description": "OpenStack Identity", "name": "keystone"}'}]

解决

#keystone-manage db_sync
然后再执行
# openstack service create   --name keystone --description "OpenStack Identity" identity