(原创)OpenStack服务如何使用Keystone (二)--

系统 2002 0

  (一) Keystone端的操作

  (二) 如何在OpenStack服务上部署Keystone中间件

  (三) 详细配置keystonemiddleware

 

  部署OpenStack时一般先安装Keystone服务, 一旦Keystone运行, 管理员搭建起服务目录, 形成OpenStack系统的框架. 创建"服务用户"和服务目录在 上一篇随笔 中有详细的介绍.

  配置OpenStack服务与Keystone协同工作, 需要在这些服务上部署"keystonemiddleware"(即Keystone中间件), 通过该中间件完成令牌验证等需要和与Keystone交互的功能.

  Keystone中间件的大体工作流程:

  1. 客户端向服务发送服务请求是会携带从Keystone那里获得的令牌;

  2. Keystone中间件会查询并验证这个令牌的有效性, 并采取相应的措施;

  3. Keystone中间件会从有效的令牌中提取诸如用户名, 用户ID, 项目名, 项目ID, 角色等信息, 并将这些信息以header的形式传递给"下游"的OpenStack服务.

  配置Keystone中间件并不是工作的全部, 我们将在下文进行详细的介绍.

  Keystone中间件的"身份"和普通用户的身份不同. Keystone中间件部署在OpenStack服务的Paste管道上, 代表服务拦截用户的HTTP请求, 验证用户提供的令牌是否真实有效, 并判断用户是否具有相应的权限. 因此Keystone中间件的 "身份" 实质是其部署在OpenStack服务在Keystone服务端的身份. Keystone中间件是一个特殊的Keystone用户.

 

  下面介绍如何部署和配置Keystone中间件:

  1. 安装代码. 在OpenStack服务所在主机上安装"keystonemiddleware"项目代码, 可采用pip, easy_install工具或从GitHub下载源码等多种方式安装. Git项目和Pypi包均名为"keystonemiddleware".

 

  2. 定义Paste过滤器. 在OpenStack服务的Paste部署文件(如:api-paste.ini)中,设置如下的WSGI组件:

      
        [
      
      
        filter:authtoken
      
      
        ]
      
      
        

paste.filter_factory 
      
      = keystonemiddleware.auth_token:filter_factory
    

 

  3. 安装Keystone中间件. 将2中定义的Paste过滤器 "authtoken" 添加到Paste管道的适当位置, 完成在OpenStack服务上部署Keystone中间件. 

 

  4. 配置Keystone中间件. Keystone中间件的配置项包括Keystone服务的URL, 中间件用户名, 密码等. 具体的配置项我们在下一篇随笔中进行详细介绍. Keystone中间件有两种配置方法, 一是在第2步定义过滤器时紧随工厂函数设置. 另一种是将配置信息统一写入到OpenStack服务的主配置 *.conf文件中, 保持Paste部署文件简洁. 需注意当两处进行了重复配置时, Paste配置文件中的配置项起决定作用. 

  注意两种方法的细微差别:

  (1) 在Paste部署文件中配置Keystone中间件,

      
        [
      
      
        filter:authtoken
      
      
        ]
      
      
        

paste.filter_factory 
      
      =
      
         keystonemiddleware.auth_token:filter_factory

identity_uri 
      
      = http://
      
        identity_url
      
      :35357
      
        /

admin_user 
      
      =
      
        
           nova
        
        

admin_password 
      
      =
      
        
           password
        
        

...
      
    

  这种方式的好处的是简单方便, Keystone中间件的部署与配置点相同.

 

  (2) 在*.conf配置文件中配置Keystone中间件,

      
        [
      
      
        DEFAULT
      
      
        ]
      
      
        

...

auth_strategy
      
      =
      
        keystone

...




      
      
        [
      
      
        keystone_authtoken
      
      
        ]
      
      
        

identity_uri 
      
      = http://
      
        identity_url
      
      :35357
      
        /

admin_user 
      
      =
      
        
           nova
        
         

admin_password 
      
      = 
      
        password
        
...

  即首先要到*.conf文件的  [ DEFAULT ]  段落下找到  auth_strategy  字段, 设置为"keystone". 接着到  [ keystone_authtoken ]  段落下, 配置项同(1).

  可采取这些流程配置Keystone中间件的OpenStack服务包括: Nova, Neutron, Cinder, Glance等. 具体的配置文件分别是,

  Nova:   nova.conf 和 api-paste.ini

  Neutron:  neutron.conf 和 api-paste.ini

  Cinder:    cinder.conf 和 api-paste.ini

  Glance:    glance-api.conf 和glance-api-paste.ini

  对象存储服务Swift略有不同. Swift默认的认证授权组件"tempauth"已经逐渐被社区弃用, 推荐一致地使用Keystone. Swift的默认配置目录中没有Paste部署文件, 因此对Keystone中间件的部署和配置都在Swift的proxy-server.conf文件中完成.

  在Swift的proxy-server.conf文件中查找如下段落, 注意其中的 "tempauth"中间件,

      
        [
      
      
        pipeline:main
      
      
        ]
      
      
        

pipeline 
      
      = ... tempauth ... proxy-server
    

  这里Swift默认使用自带的Paste过滤器  tempauth , 要使用Keystone中间件, 就要将这个Paste管道中的  tempauth  替换成如下的两个Paste过滤器:

      
        [
      
      
        pipeline:main
      
      
        ]
      
      
        

pipeline 
      
      = ... authtoken keystoneauth ... proxy-server
    

  在文件proxy-server.conf中配置Paste过滤器  authtoken  和  keystoneauth  :

      
        [
      
      
        filter:authtoken
      
      
        ]
      
      
        

# paste.filter_factory 
      
      =
      
         keystonemiddleware.auth_token:filter_factory

# auth_uri 
      
      = http://keystonehost:5000
      
        /

# admin_user 
      
      =
      
         swift

# admin_password 
      
      =
      
         password

...




      
      
        [
      
      
        filter:keystoneauth
      
      
        ]
      
      
        

# use 
      
      =
      
         egg:swift#keystoneauth

...

# operator_roles 
      
      = admin,
      
         swiftoperator

...

# reseller_admin_role 
      
      =
      
         ResellerAdmin


      
      
        ...

# default_domain_id 
      
      =
      
         default


      
      
        ...

# allow_names_in_acls 
      
      = true
    

  配置文件模板会默认注释掉所有配置项, 管理员根据旁边的说明取消注释, 将配置项设置成适当的值, 这样就完成了在Swift上部署Keystone中间件的工作.

  前文介绍了OpenStack的主要服务如何整合Keystone, 部署Keystone中间件. 这里还要简单说明OpenStack的Dashboard如何与Keystone整合.

  Horizon是 OpenStack 的 Web UI, 为了使用第三版的 Keystone API, 我们需要在 Horizon 的 openstack_dashboard/local/local_settings.py 文件中做如下改动:

  1. 在配置项  OPENSTACK_API_VERSIONS  中添加  "identity": 3  

  2. 将配置项  OPENSTACK_KEYSTONE_URL  的URL以  /v3/  结尾.

  至此就完成了Keystone中间件的部署, 本文没有涉及OpenStack的所有项目, 但是OpenStack不同服务的相似性很高, 后上马的项目尊重前期项目得出的一致性经验. 我们以OpenStack最核心的服务入手, 介绍了如何将其与Keystone服务整合. 接下来, 详细配置Keystone中间件 .

(原创)OpenStack服务如何使用Keystone (二)---部署和配置Keystone中间件


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论