[openstack][G版]keystone源码学习

本文探讨了Keystone的源码结构,特别是其采用的manager和driver模式,允许灵活的存储方式替换。Keystone的验证机制包括密码和token,支持插件化扩展。此外,介绍了Catalog模块在构建服务目录和端点注册中的作用。Keystone在OpenStack项目中的应用是通过WSGI中间件实现,以Nova为例,使用authtoken filter进行认证。最后提到了Keystone V3 API的变化及未完成的实现,并提供了相关文档链接。
摘要由CSDN通过智能技术生成
       Keystone项目的主要目的是给整个openstack的各个组件(项目)提供一个统一的验证方式。用户管理,身份验证是几乎所有的软件管理都要处理的问题,Keystone对于通常的应用场景所不同的是他要解决分布式环境下的统一认证。

       Keystone的程序结构也是采用openstack通常所用的manager,driver方式,这中方式的一个好处是driver可以被灵活的替换,通过配置的方式动态替换。Keystone 的实现方式同其他openstack项目不太一样的是,他使用了了一个python语言的特性   

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

让driver中的方法直接融入进manager类。在keystone中,验证数据的存储方式都有很多种,有sql数据库形式,kvs形式(Dict在内存中存储)等,一种driver就是对应一种存储形式。

      简单介绍一下各个模块的功能,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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值