毕业前夕->正式上班过渡期,开始学习opentack,前段时间刚刚抽空学习了下python,现在开始openstack学习之路,记录自己的学习过程:
OpenStack keystone的安装:http://blog.sina.com.cn/s/blog_4b5039210102e40k.html
Openstack,不做过多解释,让我们直入主题---Keystone。Openstack是一个SOA的架构,理论上各个子项目独立提供相关的服务,互不依赖。例如Nova提供计算服务,Swift提供对象存储服务,Glance提供镜像服务等。但是实际上(至少从Openstack目前开源实现上来看),所有组件都依赖于Keystone提供3A(Account,Authentication, Authorization)服务。除了3A之外,Keystone还对外提供服务目录(ServiceCatalog)服务,类似于UDDI服务的概念,用户(无论是Dashboard, APIClient)都需要访问Keystone获取服务列表,以及每个服务的地址(Openstack中称为Endpoint)。所以,学习Openstack第一个必须搞定的组件必然是Keystone。
首先我们先看一下Keystone的几个基本概念,灰常重要!!!以上转自:http://blog.sina.com.cn/s/blog_60f6c9680101bn75.html
(这位老兄似乎也只提供了这么一片相关文章)
keystone,glance,nova结构都非常相似,使用WSGI(网关接口)协议,webob,paste, routes几个框架,像我这样以前Python没接触过的人可能也没接触过这些东西,先可以大致了解下这几个框架,再来看源码就大致知道怎么回事了。以上转自:http://blog.csdn.net/xiangmin2587/article/details/8224042
(这位老兄还是有好几篇文章值得一看的)
[openstack][G版]keystone源码学习
Keystone项目的主要目的是给整个openstack的各个组件(项目)提供一个统一的验证方式。用户管理,身份验证是几乎所有的软件管理都要处理的问题,Keystone对于通常的应用场景所不同的是他要解决分布式环境下的统一认证。
Keystone的程序结构也是采用openstack通常所用的manager,driver方式,这中方式的一个好处是driver可以被灵活的替换,通过配置的方式动态替换。
Keystone的实现方式同其他openstack项目不太一样的是,他使用了了一个python语言的特性让driver中的方法直接融入进manager类。在keystone中,验证数据的存储方式都有很多种,有sql数据库形式,kvs形式(Dict在内存中存储)等,一种driver就是对应一种存储形式。
def__getattr__(self, name):
"""Forward calls to theunderlying driver."""
# NOTE(termie): context is the firstargument, we're going to strip
# that for now, in the futurewe'll probably do some
# logging and whatnot in thisclass
f = getattr(self.driver, name)
@functools.wraps(f)
def _wrapper(context, *args, **kw):
return f(*args, **kw)
setattr(self, name, _wrapper)
return _wrapper
简单介绍一下各个模块的功能,auth实现通过插件的方式实现验证功能,Keystone/auth/plugins目录下password.py,token.py实现了密码和token两个验证方法,你也可以通过继承AuthMethodHandler类实现自己的验证方法,作为插件插入验证链中。Catalog主要实现如构造Catalog等相关功能,实现endpoints的注册,提供endpoints的发现机制。对应于每个服务(如:identity,volume,image,compute等)都会有一个对应的endpoints,如对应compute服务的endpoints为如下格式。
{"adminurl":"http://192.168.128.8:8774/v2/$(tenant_id)s","internalurl":"http://192.168.128.8:8774/v2/$(tenant_id)s", "publicurl":"http://192.168.128.8:8774/v2/$(tenant_id)s"}
policy提供了基于规则的验证引擎和验证管理接口。Token提供对于Token的生成删除等相关功能。Trust提供级联授权的相关功能,感兴趣的朋友可以看下这个文档https://github.com/openstack/identity-api/blob/master/openstack-identity-api/src/markdown/identity-api-v3-os-trust-ext.md。
实际的openstack的项目,对于keystone的应用是通过WSGImiddleware 这种可插拔的方式来实现的,具体就是通过paste 配置实现keystone验证功能的filter或app。以nova对于keystone的使用为例,nova实际是加了authtoken这个filter,authtoken的实际是在keystone的client api (python-keystoneclient-master)keystoneclient/middleware/auth_token.py文件中实现的,其中filter_factory,app_factory调用AuthProtocol类来具体实现相关功能。(注:这里对于WSGI,和paste,以及openstack对其的实现的方式不作具体讲解了)。
Keystone V3 版本的api改动比较大,v3 api现在还没有完全实现,这里有一个v3api的文档https://github.com/openstack/identity-api/blob/master/openstack-identity-api/src/markdown/identity-api-v3.md。
以上转自:
http://www.w3c.com.cn/openstackg%E7%89%88keystone%E6%BA%90%E7%A0%81%E5%AD%A6%E4%B9%A0