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. 大概了解了flexbox

    <!doctype html> <html> <head> <meta charset="utf-8"> <title> ...

  2. UVA 10391 stl

    https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...

  3. 【bzoj1013】 JSOI2008—球形空间产生器sphere

    www.lydsy.com/JudgeOnline/problem.php?id=1013 (题目链接) 题意 有一个n维的球体,给出球上n+1个点,求出圆心. Solution 题中给出了对于n维空 ...

  4. udp内网穿透 两个内网互联

    1,在有外网ip的机器上启动server. package udp; import java.net.DatagramPacket; import java.net.InetSocketAddress ...

  5. HD 1011 Starship Troopers(树上的背包)

    Starship Troopers Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Other ...

  6. poj1787Charlie's Change(多重背包+记录路径+好题)

    Charlie's Change Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 3720   Accepted: 1125 ...

  7. 检测ADO.net拼接字符串中非法字符

    using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Refle ...

  8. 使用servletAPI三种方式简单示例

    一.直接实现Action接口或集成ActionSupport类(推荐) public class HelloAction implements Action { @Override public St ...

  9. 网友微笑分享原创Jquery实现瀑布流特效

    首先非常感谢网友微笑的无私分享,此Jquery特效是一款非常流行和实用的瀑布流布局,核心代码只有几十行,是我见过代码量最少的瀑布流布局,非常适合网友们学习哦,希望大家好好看一下这个Jquery特效的原 ...

  10. ios 关键字 IB_DESIGNABLE IBInspectable 尝鲜

    每次都用代码定义一个属性,然后在viewDidLoad中再去设置这个属性,最常见的就是什么圆角,描边的, 现在终于可以直接像系统的属性一样在界面上设定了 界面上修改你的属性,减少代码压力