openstack的keystone原理

Posted 遙遙背影暖暖流星

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了openstack的keystone原理相关的知识,希望对你有一定的参考价值。

openstack的流程图:

OpenStack概述:

NASA(美国国家航空航天局)和Rackspace共同发起以Apache许可证授权的自由软件和开放源代码项目为公有云及私有云的建设与管理提供软件的开源项目覆盖了网络、虚拟化、操作系统、服务器等各个方面

1、八种组件

2、三种模式

laaS(基础架构即服务):
提供底层IT基础设施服务,包括处理能力、存储空间、网络资源等
面向对象一般是IT管理人员

PaaS(平台即服务):
把安装好开发环境的系统平台作为一种服务通过互联网提供给用户
面向对象一般是开发人员

SaaS(软件即服务):
直接通过互联网为用户提供软件和应用程序等服务面向对象一般是普通用户

## 虚拟机启动过程如下:
1.界面或命令行通过RESTful API向keystone获取认证信息。
2. keystone通过用户请求认证信息,并生成auth-token返回给对应的认证请求。
3.界面或命令行通过RESTful API向nova-api发送一个boot instance的请求(携带auth-token )4. nova-api接受请求后向keystone发送认证请求,查看token是否为有效用户和token.
5. keystohe验证token是否有效,如有效则返回有效的认证和对应的角色(注︰有些操作需要有角色权限才能操作)。
6.通过认证后nova-api和数据库通讯。7.初始化新建虚拟机的数据库记录。
8. nova-api通过rpc.call向nova-scheduler请求是否有创建虚拟机的资源(Host lD)9. nova-scheduler进程侦听消息队列,获取nova-api的请求。
10. nova-scheduler通过查询nova数据库中计算资源的情况,并通过调度算法计算符合虚拟机创
建需要的主机。
11.对于有符合虚拟机创建的主机,nova-scheduler更新数据库中虚拟机对应的物理主机信息。12. nova-scheduler通过rpc.cast向nova-compute发送对应的创建虚拟机请求的消息。
13. nova-compute会从对应的消息队列中获取创建虚拟机请求的消息。
14. nova-compute通过rpc.call|向nova-conductor请求获取虚拟机消息。( Flavor )15. nova-conductor从消息队队列中拿到nova-compute请求消息。
16. nova-conductor根据消息查询虚拟机对应的信息。
17. nova-conductor从数据库中获得虚拟机对应信息。
18. nova-conductor把虚拟机信息通过消息的方式发送到消息队列中。
19. nova-compute从对应的消息队列中获取虚拟机信息消息。
20. nova-compute通过keystone的RESTfull API拿到认证的token,并通过HTTP请求glance-api
获取创建虚拟机所需要镜像。
21. glance-api向keystone认证token是否有效,并返回验证结果。22. token验证通过,nova-compute获得虚拟机镜像信息(URL)23. nova-compute通过keystone的RESTfull API拿到认证k的token,并通过HTTP请求neutron-
server获取创建虚拟机所需要的网络信息。
24. neutron-server向keystone认证token是否有效,并返回验证结果。25. token验证通过,nova-compute获得虚拟机网络信息。
26. nova-compute通过keystone的RESTfull API拿到认证的token,并通过HTTP请求cinder-api
获取创建虚拟机所需要的持久化存储信息。
27. cinder-api向keystone认证token是否有效,并返回验证结果。28. token验证通过,nova-compute获得虚拟机持久化存储信息。
29. nova-compute根据instance的信息调用配置的虚拟化驱动来创建虚拟机。

什么是Keystone?

Keystone在OpenStack框架中

负责身份验证,服务规则和服务令牌的功能

提供了认证服务的API,为OpenStack中的各个组件提供了认证服务,类似于一个服务的总线,或者说是整个OpenStack框架的注册表

其他的服务都是通过Keystone来注册其服务的Endpoint,也就是服务的URL路径,来实现服务之间的相互访问与调用

1.keystone的相关概念
User:指使用Openstack service的用户,可以是人、服务、系统,但凡使用了Openstack service的对象都可以称为User.
Project(Tenant):可以理解为一个人、或服务所拥有的资源集合。在一个Project(Tenant)中可以包含多个User,每一个User都会根据权限的划分来使用Project(Tenant)中的资源。比如通过Nova创建虚拟机时要指定到某个Project中,在Cinder创建卷也要指定到某个Project中。User访问Project的资源前,必须要与该Project关联,并且指定User在Project下的Role。
Role:用于划分权限。可以通过给User指定Role,使User获得Role对应的操作权限。Keystone返回给User的Token包含了Role列表,被访问的Services会判断访问它的User和User提供的Token中所包含的Role。系统默认使用管理Role admin和成员Role member
Policy : OpenStack对User的验证除了OpenStack的身份验证以外,还需要鉴别User对某个Service是否有访问权限。Policy机制就是用来控制User对Tenant中资源(包括Services)的操作权限。对于Keystone service来说,Policy就是一个JSON文件,默认是/etc/keystone/policy.json。通过配置这个文件,Keystone Service实现了对User基于Role的权限管理。
Token:是一个字符串表示,作为访问资源的令牌。Token包含了在指定范围和有效时间内可以被访问的资源。EG.在Nova中一个tenant可以是一些虚拟机,在Swift和Glance中一个tenant可以是一些镜像存储,在Network中一个tenant可以是一些网络资源。Token一般被User持有。
Credentials :用于确认用户身份的凭证
Authentication :确定用户身份的过程
Service : Openstack service ,Openstack中运行的组件服务。
Endpoint : 一个可以通过网络来访问和定位某个Openstack service的地址,通常是一个URL。比如,当Nova需要访问Glance服务去获取image时,Nova通过访问Keystone拿到Glance的endpoint,然后通过访问该endpoint去获取Glance服务。我们可以通过Endpoint的region属性去定义多个region。Endpoint 该使用对象分为三类︰
admin url->给admin用户使用,Post : 35357
internal url -> OpenStack内部服务使用来跟别的服务通信,Port : 5000
public url ->其它用户可以访问的地址,Post : 5000

创建完service后创建API EndPoint.在openstack中,每一个service都有三种end points: Admin, public,internal。Admin是用作管理用途的,如它能够修改user/tenant(project)。public是让客户调用的,比如可以部署在外网上让客户可以管理自己的云。internal是openstack内部调用的。三种endpoints 在网络上开放的权限一般也不同。Admin通常只能对内网开放,public通常可以对外网开放internal,通常只能对安装有openstack对服务的机
![在这里插入图片描述](https://img-blog.csdnimg.cn/635619b5f6524bce852f304a2f84d2cb.png?x-oss-process=im

总结:

keystone是一个中心授权组件
1、通过horizon的登录后,keystone产生了token令牌。以建立虚拟机为例,nove建立请求,发送token向glance请求镜像,当glance收到请求时不会马上返回,而是要先向keystone进行验证,验证通过则发送镜像给nove。系统建立后,nove进行下一步,需要建立网络,则向neutron发送token,请求网络,先验证再发送,以此类推。。。
2、每次服务执行前,组件都会想keystone的进行验证,确定该服务是否有权限执行
3、因为keystone的endpoint有三种模式,openstack有八个组件,所以一个服务可以有21个API EndPoint。
4、组件之间通过rest api 通信,而keystone除了进行认证,还进行rest api 的分发。

以上是关于openstack的keystone原理的主要内容,如果未能解决你的问题,请参考以下文章

第五十六课 云计算模型 openstack架构keystone基础及部署

初识openstack之5——安装Keystone

openstack常用的一些命令

openstack项目day23:openstack-keystone-keystone基础

openstack 装逼之路~keystone部署

OpenStack基础学习及keystone服务配置