【OpenStack】OpenStack系列2之KeyStone詳解

  1. 源碼下載、依賴安裝

    參考:http://www.oschina.net/question/565065_66271 html

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

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

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

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

    Lxml: yum remove audit github

    yum install gcc web

    yum install libxslt-devel libxml2-devel sql

    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 json

    2. 安裝keystone依賴、安裝keystone

      pip install -r requirements.txt centos

      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 &

      監聽端口分別是3535七、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
相關文章
相關標籤/搜索