(原创)OpenStack服务如何使用Keystone (二)---部署和配置Keystone中间件
(一)Keystone端的操作
(二)如何在OpenStack服务上部署Keystone中间件
部署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中间件的更多相关文章
- (原创)OpenStack服务如何使用Keystone(一)---Keystone端的操作
(一)Keystone端的操作 (二)如何在OpenStack服务上部署Keystone中间件 (三)详细配置keystonemiddleware OpenStack项目如果要使用Keystone作为 ...
- OpenStack Keystone安装部署流程
之前介绍了OpenStack Swift的安装部署,采用的都是tempauth认证模式,今天就来介绍一个新的组件,名为Keystone. 1. 简介 本文将详细描述Keystone的安装部署流程,并给 ...
- (原创)OpenStack服务如何使用Keystone(三)---详细配置Keystone中间件
(一)Keystone端的操作 (二)如何在OpenStack服务上部署Keystone中间件 (三)详细配置keystonemiddleware 前文我们介绍了如何部署Keystone中间件以及中间 ...
- openstack stein部署手册 3. keystone
# 建立数据库用户及权限 create database keystone; grant all privileges on keystone.* to keystone@'localhost' id ...
- OpenStack云计算快速入门之二:OpenStack安装与配置
原文:http://blog.chinaunix.net/uid-22414998-id-3265685.html OpenStack云计算----快速入门(2) 该教程基于Ubuntu12.04版, ...
- OpenStack三个节点icehouse-gre模式部署
一.环境准备 1.架构 创建3台虚拟机,分别作为controll节点.network节点和compute1节点. Controller节点:1processor,2G memory,5G storag ...
- OpenStack服务默认端口号
在某些部署中,例如已设置限制性防火墙的部署,您可能需要手动配置防火墙以允许OpenStack服务流量. 要手动配置防火墙,您必须允许通过每个OpenStack服务使用的端口的流量.下表列出了每个Ope ...
- 恒天云单节点部署指南--OpenStack H版本虚拟机单节点部署解决方案
本帖是openstack单节点在虚拟机上部署的实践.想要玩玩和学习openstack的小伙伴都看过来,尤其是那些部署openstack失败的小伙伴.本帖可以让你先领略一下openstack的魅力.本I ...
- openstack controller ha测试环境搭建记录(六)——配置keystone
在所有节点的hosts文件添加:10.0.0.10 myvip 在所有节点安装# yum install -y openstack-keystone python-keystoneclient# yu ...
随机推荐
- 使用windowAnimations定义Activity及Dialog的进入退出效果
看了android的源代码和资源文件,终于明白如何去修改设置Dialog和Activity的进入和退出效果了.设置Dialog首先通过getWindow()方法获取它的窗口,然后通过getAttrib ...
- DIOCP开源项目-DIOCP3重写笔记-1
这几天在在重新DIOCP3,基本工作已经初步完成,进入测试阶段,今天加入排队投递,本认为是个很简单的工作,稍微不注意,留了两个坑,调了7,8个小时,刚刚总算找到问题,记录一下, 关于排队投递的流程 这 ...
- Zookeeper session超时
1.会话概述 在ZooKeeper中,客户端和服务端建立连接后,会话随之建立,生成一个全局唯一的会话ID(Session ID).服务器和客户端之间维持的是一个长连接,在SESSION_TIMEOUT ...
- 6. 集成学习(Ensemble Learning)算法比较
1. 集成学习(Ensemble Learning)原理 2. 集成学习(Ensemble Learning)Bagging 3. 集成学习(Ensemble Learning)随机森林(Random ...
- iOS App中第一次运行添加半透明新手指引
实现方式: 在当前View上一个蒙层,然后找出需要标记的地方圈为白色,那些箭头和提示文字都是UI做出来的图上自带的. 代码: 判断是第一次运行APP后进入页面调用 -(void)newGuide { ...
- with open
再考虑一个场景,要读取文件内容,并把年龄和名字的顺序交换存成新文件age_name.txt,这时可以同时打开两个文件:with open('name_age.txt', 'r') as fread, ...
- docker探索-镜像使用(四)
前言 当运行容器时,使用的镜像如果在本地中不存在,docker 就会自动从 docker 镜像仓库中下载,默认是从 Docker Hub 公共镜像源下载. 1.查看本地主机上的镜像列表 [root@ ...
- 使用Android Studio进行NDK开发
Step1:创建native方法 很easy,仅仅须要给定义好的方法加上native关键词就可以 注意:由于该方法的详细实现是在c++中详细实现的.所以相似于接口方法不须要加{}. Step2:生成c ...
- 卡西欧(casio)Fx-5800p程序调试器||模拟器V1.0
一.[背景] 都说这个卡西欧5800p没有模拟器,模拟器其实就是个电脑上面模拟他的界面的东西,但是真正的核心,他不一定有,而且我们测量方面的编程及时有了所谓的外形模拟器也学不会的. 都说这个卡西欧58 ...
- [转]Java中的POJO类
简单的Java对象(Plain Old Java Objects)实际就是普通JavaBeans,使用POJO名称是为了避免和EJB混淆起来, 而且简称比较直接. 其中有一些属性及其getter se ...