keystone服务的详解
一:keystone服务
作用:
1:提供其余组件的所有认证服务,令牌的管理,所有的组件都要经过keystone服务的通过,才能使用相对应的功能,每一次使用服务的时候,都需要验证
2:用户管理:验证用户的身份合法
1:概念
项目(project):个人和服务所拥有的资源集合,在一个项目中可以包含多个用户,每个用户可以根据自己的权限来使用项目中的资源,自带admin项目
用户(user):访问openstack的对象,用户拥有证书(credentials),分配个一个项目或者多个项目,自带admin用户,拥有admin权限
证书(credentials):确认用户身份的凭证,可以是用户名和密码,用户的api和token
令牌(token):认证通过后,返回一个令牌,里面包含了在指定范围和有效时间可以被访问的资源,保存了账户和密码以及使用的权限
角色(role):用户权限的划分,可以给user指定role,使user获得role对应的操作权限,keystone返回给user的token包含了role列表,被访问service,会判断访问它的user和user提供的token中所包含的role(其实是交给了keystone,它来判断的)
服务(service):openstack中运行的组件服务
端点(endpoint):通过网络来访问和定位某个服务,是一个url。分为三类
admin-url 管理员使用的
internal-url:内部组件互相通信
public-url:其他用户访问地址
2:keystone工作的原理
非常的好理解:首先用户提交自己的信息与数据库进行校验,成功后,返回一个token和endpoint,然后用户通过token和endpoint来操作openstack中的资源
官方:
1. User/API 想创建一个实例,首先会将自己的Credentials发给Keystone。认证成功后,keystone会颁给User/API一个临时的令牌(Token)和一个访问服务的Endpoint。
2. User/API 把临时Token提交给Keystone,Keystone返回一个Tenant(Project)。
3. User/API 向Keystone发送带有特定租户的凭证(交互权限),告诉Keystone User/API在哪个项目中,Keystone收到请求后,会发送一个项目的Token到User/API (访问权限),User/API 拿着Token和Endpoint找到可访问服务。
4. 服务向keystone进行认证,Token是否合法,它允许访问使用该服务(判断用户/API中role权限)?
5. Keystone向服务提供额外的信息。User/API是允许方法服务,这个Token匹配请求,这个Token是User/API的
6. 服务执行User/API发起的请求,创建实例
7. 服务会将状态报告给用户/API。最后返回结果,实例已经创建
例子:用户登录openstack平台时,先进行验证,验证成功后,返回一个临时令牌,然后我想要使用nova服务,将令牌给keystone,然后返回一个项目的token,我拿着token和endpoint去访问服务,服务拿到token后去找keystone进行验证。成功后,服务执行用户的请求,然后将信息返回给用户
认证的分为2种
第一种:判断用户的凭证是否合法,用户初次登录系统的时候,会向keystone提交用户名,密码等验证信息,keystone会判断是否为合法用户,如果是的话,向用户发布一个令牌,用于后续的验证,里面包含了用户使用服务的权限,令牌的失效时间
第二种:判断用户的令牌是否合法,当用户已经登陆到openstack后,使用任何组件,都要提交令牌,提供的服务将令牌给keystone进行认证,是否合法,认证成功后,服务就会响应用户的请求
二:keystone服务的操作
1:域的操作
#创建域 openstack domain create qq #修改域 openstack domain set --disable --name ww qq #查看域的详细信息 openstack domain show ww #删除域(域的状态必须是关掉的) openstack domain delete ww
2:项目的操作
在创建项目时,要指定域,不指定域的话,就是默认的域,删除的时候,也要指定域,从哪个域中删除的
#创建项目 openstack project create aa #修改项目(目前,只能修改名字,不能修改域) openstack project set --name ee aa #查看项目的详细信息 openstack proejct show ee #删除项目 openstack project delete ee --domain default
3:用户的操作
在创建用户的时候,需要指定域(不指定就是默认域),删除的时候,也不要域
#创建用户,需要添加密码 openstack user create --domain default --password 000000 --email qq.com pp #修改用户(用户的姓名,密码,邮箱) [root@controller ~]# openstack user set --password 111111 --name ww pp #查看用户的详细信息 [root@controller ~]# openstack user show ww #删除用户 [root@controller ~]# openstack user delete ww
4:角色的操作
角色就是一群用户的集合,在这个项目里有没有样的权限(操作)
#创建角色 [root@controller ~]# openstack role create xx #绑定角色(就是用户绑定项目的某个角色) [root@controller ~]# openstack role add --project project --user pp xx #撤销权限(就是用户取消在项目中某个角色) [root@controller ~]# openstack role remove --project project --user pp xx #查看角色的详细信息 [root@controller ~]# openstack role show xx #删除角色 [root@controller ~]# openstack role delete xx
5:服务的操作
#创建服务(服务包括服务的类型和服务的名字) [root@controller ~]# openstack service create --name ww oo #修改服务(名字) [root@controller ~]# openstack service set --name ss oo #查看服务的详细信息 [root@controller ~]# openstack service show oo #删除服务 [root@controller ~]# openstack service delete oo
6:端点操作
端点就是一个服务的url(访问服务的ip地址)
#创建端点 openstack endpoint create --region RegionOne qq publice http://controller:9292 #修改端点 openstack endpoint set --region WQWE endpoint_id #查看端点的详细信息 openstack endpoint show endpoint_id #删除端点 openstack endpoint delete endpoint——id
三:图解