1. 源码下载、依赖安装

    参考:http://www.oschina.net/question/565065_66271

    https://github.com/yongluo2013/osf-openstack-training/blob/master/installation/openstack-icehouse-for-centos65.md

    http://www.aboutyun.com/thread-11404-1-1.html

    1. 安装git、setuptools、pip、gcc等(yum install gcc python-devel -y)

      Mysql: yum -y install mysql-devel mysql zlib zlib-devel openssl

    Lxml: yum remove audit

    yum install gcc

    yum install libxslt-devel libxml2-devel

    1. Git下载keystone源码

      git clone -b stable/icehouse https://github.com/openstack/keystone.git

      git clone -b stable/icehouse https://github.com/openstack/python-keystoneclient.git

    2. 安装keystone依赖、安装keystone

      pip install -r requirements.txt

      python setup.py install

    3. 配置keystone数据库连接、日志级别

      mkdir -p /etc/keystone/

      cp -r etc/keystone.conf /etc/keystone/

      修改数据库连接:

      connection=mysql://keystone:openstack@controller0/keystone

      修改日志配置:

      debug=true

      verbose=true

      use_stderr=false

      log_dir=/opt/stack/keystone/log

      log_file=keystone.log

      修改ADMIN_TOKEN:

    ADMIN_TOKEN=$(openssl rand -hex 10)

    echo $ADMIN_TOKEN

    admin_token=38eb8c44ca677eec1d67

    export OS_SERVICE_TOKEN=`echo $ADMIN_TOKEN`

    export OS_SERVICE_ENDPOINT=http://controller0:35357/v2.0

    1. 安装配置mysql、建库、权限设置、数据库初始化

      安装mysql:

    yum install -y mysql mysql-server MySQL-python

    配置mysql:

    vi /etc/my.cnf

    [mysqld]

    bind-address = 0.0.0.0

    default-storage-engine = innodb

    innodb_file_per_table

    collation-server = utf8_general_ci

    init-connect = 'SET NAMES utf8'

    character-set-server = utf8

    启动mysql,设置开机自启:

    service mysqld start

    chkconfig mysqld on

    设置mysql密码:

    mysql_secure_installation root/openstack

    创建数据库,设置权限:

    mysql -uroot -popenstack -e "CREATE DATABASE keystone;"

    mysql -uroot -popenstack -e "GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' IDENTIFIED BY 'openstack';"

    mysql -uroot -popenstack -e "GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'controller0' IDENTIFIED BY 'openstack';"

    mysql -uroot -popenstack -e "GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' IDENTIFIED BY 'openstack';"

    初始化keystone数据表:

    su -s /bin/sh -c "keystone-manage db_sync"

    1. 设置keystone开机自启

      keystone-all &

      监听端口分别是35357、5000,对应于admin、public的端口。

      vi /etc/init.d/keystone

    #!/bin/sh

    # chkconfig: 35 70 30

    # description: keystone

    /opt/stack/keystone/bin/keystone-all

    chmod +x /etc/init.d/keystone

    chkconfig --level 35 keystone on

    service keystone start

    1. Keystone测试

      创建租户/Project:

      keystone tenant-create --name=admin --description="Admin Tenant"

      keystone tenant-create --name=service --description="Service Tenant"

      创建管理员用户:

      keystone user-create --name=admin --pass=admin --email=admin@example.com

      创建管理员角色:

      keystone role-create --name=admin

      关联租户-用户-角色:

      keystone user-role-add --user=admin --tenant=admin --role=admin

      创建服务:

      keystone service-create --name=keystone --type=identity --description="Keystone Identity Service"

      创建服务的endpoints:

      keystone endpoint-create \

      > --service-id=$(keystone service-list | awk '/ identity / {print $2}') \

      > --publicurl=http://controller0:5000/v2.0 \

      > --internalurl=http://controller0:5000/v2.0 \

      > --adminurl=http://controller0:35357/v2.0

    2. 验证服务安装是否正确

      unset OS_SERVICE_TOKEN OS_SERVICE_ENDPOINT

      设置PKI:

    keystone-manage pki_setup --keystone-user keystone --keystone-group keystone

    chown -R keystone:keystone /etc/keystone/ssl

    chmod -R o-rwx /etc/keystone/ssl

    unset OS_SERVICE_TOKEN OS_SERVICE_ENDPOINT

    命令行方式获取token:

    keystone --os-username=admin --os-password=admin --os-auth-url=http://controller0:35357/v2.0 token-get

    keystone --os-username=admin --os-password=admin --os-tenant-name=admin --os-auth-url=http://controller0:35357/v2.0 token-get

    也可以使用接口方式获取token(curl –i选项可以打印返回消息头):

    curl -d '{"auth": {"tenantName": "admin", "passwordCredentials":{"username": "admin", "password": "admin"}}}' -H "Content-type: application/json" http://10.20.0.88:35357/v2.0/tokens | python -mjson.tool

    GET方法使用如下:

    curl -H "Content-type: application/json" http://10.20.0.88:35357/v2.0/ | python -mjson.tool

    命令行方式使用——指定用户名密码方式:

    keystone --os-tenant-name admin --os-username admin --os-password admin --os-auth-url http://controller0:35357/v2.0 role-list

  2. Keystone架构
    1. keystone设计

    2. 默认regionOne,select * from endpoint;可知。可使用多region共享keystone、dashboard方案,根据地理位置不同分别部署独立完整的openstack环境,包括控制节点、计算节点、网络节点等,但同时多个region共享一个keystone、dashboard,这样我们可以使用统一的账户信息与统一的管理平台。
  3. Keystone源码解读
    1. 基础知识
      1. eventlet:
        1. http://www.open-open.com/lib/view/open1382234530214.html

          http://gashero.iteye.com/blog/442177

          http://bingotree.cn/?p=281

          http://eventlet.net/doc/index.html

          http://blog.csdn.net/gaoxingnengjisuan/article/details/12913275

        2. python协程库,轻量级线程,多线程方式编写异步网络应用程序
      2. wsgi:
        1. http://blog.sina.com.cn/s/blog_8a18c33d01019xle.html

          http://gashero.iteye.com/blog/443885

        2. Web服务器与应用程序接口,是一个规范。让应用程序运行在任何兼容wsgi的web服务器上。注意eventlet与wsgi的集成。
      3. Wsgiref与webob:

        http://www.cnblogs.com/btchenguang/archive/2012/08/31/2664895.html

        http://www.verydemo.com/demo_c122_i18733.html

        http://blog.csdn.net/bluefire1991/article/details/13614243

        http://blog.csdn.net/bluefire1991/article/details/14065723

      4. 消息队列、消息队列框架、rpc、rpc回调:
        1. http://blog.csdn.net/hackerain/article/details/7880121

          http://blog.csdn.net/hackerain/article/details/7888672

      5. http://blog.csdn.net/hackerain/article/details/7908990

    2. 源码解读、调试
      1. keystone-paste.ini文件:该文件由application, filter, pipeline, composite等定义段落组成。composite是第一层调度者,它粗略地根据不同的url类型将请求分配到不同的pipeline上。每一个pipeline由若干filter和一个application组成。正如其名,filter按照其在pipeline中的先后顺序依次对http请求进行过滤,包括对参数进行格式化处理等操作。application位于pipeline的末尾,每一个pipeline只有一个application。最终通过所有filter的请求被application进一步调度到系统实现上每一个模块的路由层(routers),路由层根据HTTP请求方法和具体的请求路径,将HTTP请求分发给对应的控制层(controllers),controllers集中实现业务逻辑,并通过调用更低的驱动层完成底层的工作,如数据库的读写等等。这些构成了composite, pipeline, filter, application和keystone实现间的逻辑关系。keystone-paste.ini文件从一个高层次定义了keystone所需的composite会将哪些类型的url交由由哪些pipeline, 每一个pipeline由哪些filter和app组成,以及具体到每一个filter和app是由系统源码的哪一个部分实现的,事实上,从下文的分析可以看出,每一个filter在实现上都对应着一个特定的类,而每一个application在实现上则对应着一个具体的方法。
      2. 当用户以HTTP POST方式请求http://localhost:5000/v3/auth/tokens这个url时,意味着用户希望进行身份认证,同时获得keystone签发的Token。当然,用户需要在自己的HTTP请求中给出一些自己的身份信息,这样keystone才能据以判断该用户是否是系统合法的用户,并根据其拥有的角色和权限为其签发token。
      3. 该application将会实现第二层路由(第一层由keystone-paste.ini文件中的composite字段实现),此次路由将具体的请求处理工作进一步分发到系统的各个模块上,比如代码中的assignment,auth, catalog等等。由具体的模块根据请求的具体路径和内容完成具体功能。
      4. 配置库:

        http://www.cnblogs.com/xinyuyuanm/archive/2013/05/19/3087323.html

      5. 请求处理流程
        1. 讲的比较好:

          http://demo.netfoucs.com/napolunyishi/article/details/42501579

        2. POST- keystone-paste.ini- composite初步分发- pipeline处理流程- user_crud_extension-调用UserController-调用具体的Driver操作数据库
  4. Keystone高可靠性、高可用性设计
    1. HAProxy+Apache+Keystone+DBCluster/memcache

【OpenStack】OpenStack系列2之KeyStone详解的更多相关文章

  1. ASP.NET MVC深入浅出系列(持续更新) ORM系列之Entity FrameWork详解(持续更新) 第十六节:语法总结(3)(C#6.0和C#7.0新语法) 第三节:深度剖析各类数据结构(Array、List、Queue、Stack)及线程安全问题和yeild关键字 各种通讯连接方式 设计模式篇 第十二节: 总结Quartz.Net几种部署模式(IIS、Exe、服务部署【借

    ASP.NET MVC深入浅出系列(持续更新)   一. ASP.NET体系 从事.Net开发以来,最先接触的Web开发框架是Asp.Net WebForm,该框架高度封装,为了隐藏Http的无状态模 ...

  2. Hexo系列(三) 常用命令详解

    Hexo 框架可以帮助我们快速创建一个属于自己的博客网站,熟悉 Hexo 框架提供的命令有利于我们管理博客 1.hexo init hexo init 命令用于初始化本地文件夹为网站的根目录 $ he ...

  3. 【OpenStack】OpenStack系列4之Glance详解

    下载安装 参考:http://www.linuxidc.com/Linux/2012-08/68964.htm http://www.it165.net/os/html/201402/7246.htm ...

  4. Signalr系列之虚拟目录详解与应用中的CDN加速实战

    目录 对SignalR不了解的人可以直接移步下面的目录 SignalR系列目录 前言 前段时间一直有人问我 在用SignalR 2.0开发客服系统[系列1:实现群发通讯]这篇文章中的"/Si ...

  5. 转载爱哥自定义View系列--文字详解

    FontMetrics FontMetrics意为字体测量,这么一说大家是不是瞬间感受到了这玩意的重要性?那这东西有什么用呢?我们通过源码追踪进去可以看到FontMetrics其实是Paint的一个内 ...

  6. 转载爱哥自定义View系列--Paint详解

    上图是paint中的各种set方法 这些属性大多我们都可以见名知意,很好理解,即便如此,哥还是带大家过一遍逐个剖析其用法,其中会不定穿插各种绘图类比如Canvas.Xfermode.ColorFilt ...

  7. kubernetes系列07—Pod控制器详解

    本文收录在容器技术学习系列文章总目录 1.Pod控制器 1.1 介绍 Pod控制器是用于实现管理pod的中间层,确保pod资源符合预期的状态,pod的资源出现故障时,会尝试 进行重启,当根据重启策略无 ...

  8. Cobaltstrike系列教程(三)-beacon详解

    0x000--前文 Cobaltstrike系列教程(一)-简介与安装 Cobaltstrike系列教程(二)-Listner与Payload生成 heatlevel 0x001-Beacon详解 1 ...

  9. CSS系列 (05):浮动详解

    浮动的框可以向左或向右移动,直到它的外边缘碰到包含框或另一个浮动框的边框为止.由于浮动框不在文档的普通流中,所以文档的普通流中的块框表现得就像浮动框不存在一样. -- W3C 文字环绕 float可以 ...

随机推荐

  1. 0505--鲜花售卖网之“NABCD模型”

    一.NABCD 1) N (Need 需求)--(分析人:梁植淋) --简介 我们的鲜花售卖系统主要是给需要买花或者是养花的顾客提供一个购花平台,买花时通过位置识别给用户提供附近的花店购花,花店接到订 ...

  2. 使用Git进行代码管理

    Git简介 Git 是 Linux Torvalds 为了帮助管理 Linux® 内核开发而开发的一个开放源码的版本控制软件. 先讲一下如何把开源项目fork到自己的github中 1.  点击图中的 ...

  3. G-nav-04

    'use strict';define([ 'jquery'], function($) { var nav = { init : function() { $("#burger-menu& ...

  4. Http状态码集合

    忘了之前在哪里收集的了,先表示感谢. 状态码 含义 100 客户端应当继续发送请求.这个临时响应是用来通知客户端它的部分请求已经被服务器接收,且仍未被拒绝.客户端应当继续发送请求的剩余部分,或者如果请 ...

  5. Azure怎么使用ftp登录

    1.下载配置文件 2.拷贝FTP的地址 3.查看配置文件里面的用户名和密码 4.登录

  6. POJ3038 Flying Right

    Description Figuring that they cannot do worse than the humans have, Farmer John's cows have decided ...

  7. MySQL中利用外键实现级联删除、更新

    MySQL支持外键的存储引擎只有InnoDB,在创建外键的时候,要求父表必须有对应的索引,子表在创建外键的时候也会自动创建对应的索引.在创建索引的时候,可以指定在删除.更新父表时,对子表进行的相应操作 ...

  8. ajax入门详解

    l 一个实例 在开始正式讲解 Ajax之前,首先让我们先来看看Google Map使用Ajax改善其产品设计的效果. 1. 在浏览器地址栏中输入http://maps.google.com打开Goog ...

  9. 关于IntentFilter的几点注意事项:

    http://blog.csdn.net/cnnumen/article/details/8464786 IntentFilter就是用于描述intent的各种属性, 比如action, catego ...

  10. [Angularjs]视图和路由(一)

    写在前面 对单页应用来讲,视图和路由的作用可以从一个视图跳转到另外一个视图,可以合理管理用户在使用过程中看到的界面. 将视图分解成布局和模版视图,并且根据用户当前访问的URL来展示对应的视图,将会是一 ...