OpenStack stein安裝(二)keystone

  Openstack身份驗證服務提供一個單點集成的管理認證,授權和服務目錄,當用戶交互時身份驗證服務通常的是第一個服務, 一旦通過認證,同樣,其它openstack服務利用身份驗證服務確保用戶是誰並發現部署中其它服務的位置,身份識別服務同樣也可以使用外部的用戶管理系統(如LDAP).
  使用服務目錄,身份認證服務管理的用戶和服務可以定位其它的服務,顧名思義,服務目錄是OpenStack部署中可用服務的集合。每個服務可以有一個或多個端點,每個端點可以是三種類型之一: admin、internal或public。在生產環境中,由於安全原因,不同的端點類型可能位於暴露給不同類型用戶的不同網絡上。例如,public API網絡可以從Internet上看到,這樣客戶就可以管理他們的雲。Admin API網絡可能僅限於管理雲基礎設施的組織中的操作人員。Internal API網絡可能僅限於包含OpenStack服務的主機。
  同時爲了實現可擴展性openstack同樣支持多區域,爲簡單起見,本列中對所有端點類型和默認的RegionOne區域使用管理網絡。在標識服務中創建的區域、服務和端點組成了部署的服務目錄。部署中的每個OpenStack服務都需要一個服務入口和一個相應的的端點存儲在標識服務中。這都可以在安裝和配置身份認證服務之後完成。
  身份認證服務包含下列組件:

  • Server
    一個集中的使用RESTful 接口提供認證和授權服務.
  • Drivers
    驅動程序或服務後端集成到集中的服務器。它們用於訪問OpenStack外部存儲庫中的標識信息,並且可能已經存在於部署OpenStack的基礎設施中(例如,SQL數據庫或LDAP服務器).
  • Modules
    中間件模塊運行在使用標識服務的OpenStack組件的地址空間中。這些模塊攔截服務請求,提取用戶憑證,並將其發送到中央服務器進行授權。中間件模塊和OpenStack組件之間的集成使用Python Web服務器網關接口。

準備工作

  1. 連接到數據庫,可以在本機也可以使用mysql客戶端連接
    $ mysql -u root -proot123
  2. 建立keystone數據庫
    MariaDB [(none)]> CREATE DATABASE keystone;
  3. 授予相應的權限給keystone數據庫,密碼統一爲用戶名後加123
    MariaDB [(none)]> GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' IDENTIFIED BY 'keystone123';

    安裝和配置組件

  4. 安裝包
    # yum install openstack-keystone httpd mod_wsgi
  5. 編輯文件/etc/keystone/keystone.conf並加入如下配置
    # vi /etc/keystone/keystone.conf
    [database]
    # ...
    connection = mysql+pymysql://keystone:[email protected]/keystone
    In the [token] section, configure the Fernet token provider:
    [token]
    # ...
    provider = fernet
  6. 構建數據庫
    # su -s /bin/sh -c "keystone-manage db_sync" keystone
  7. 初始化Fernet鍵庫
    # keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone
    # keystone-manage credential_setup --keystone-user keystone --keystone-group keystone
  8. 引導標識服務
    # keystone-manage bootstrap --bootstrap-password admin123 \
      --bootstrap-admin-url http://stack.flex.net:5000/v3/ \
      --bootstrap-internal-url http://stack.flex.net:5000/v3/ \
      --bootstrap-public-url http://stack.flex.net:5000/v3/ \
      --bootstrap-region-id RegionOne
  9. 如果這步出錯,如你寫錯了域名或端口等,會無法創建下面的domain, projects, users and roles, 重新配置是不能解決的,它不會覆蓋前面的配置,解決辦法是如下:
        ○ 在mysql中刪除endpoint配置,重新配置:
        MariaDB [keystone]> select * from endpoint;
        +-------------+--------------------+-----------+----------+--------------------------------+-------+---------+-----------+
        | id          | legacy_endpoint_id | interface |service_id| url                            | extra | enabled | region_id |
        +-------------+--------------------+-----------+----------+--------------------------------+-------+---------+-----------+
        | 0b6dd3a784… | NULL               | internal  | ad298…   | http://192.168.137.5:35357/v3/ | {}    |       1 | RegionOne |
        | 4f7fdb8fc6… | NULL               | public    | ad298…   | http://192.168.137.5:5000/v3/  | {}    |       1 | RegionOne |
        | 8451f154c7… | NULL               | admin     | ad298…   | http://192.168.137.5:35357/v3/ | {}    |       1 | RegionOne |
        +-------------+--------------------+-----------+----------+--------------------------------+-------+---------+-----------+
        3 rows in set (0.15 sec)
        MariaDB [keystone]> delete from endpoint where url like '%137.5%';    #配錯的url或主機
        Query OK, 3 rows affected (0.02 sec)
        MariaDB [keystone]> commit;
        ○ 處理完成後,重新配置上面的步驟

    配置Apache Server

  10. 修改文件/etc/httpd/conf/httpd.conf配置server name爲控制節點服務器的名稱
    ServerName controller1
  11. 在/etc/httpd/conf.d下建立一個軟鏈接文件指向/usr/share/keystone/wsgi-keystone.conf
    # ln -s /usr/share/keystone/wsgi-keystone.conf /etc/httpd/conf.d/

    完成安裝

  12. 允許系統引導時自動啓動服務並啓動apache服務
    # systemctl enable httpd.service
    # systemctl start httpd.service
  13. 配置管理帳號admin,可以將這個文件寫成一個腳本的方式,並source腳本

    # cat admin-openrc
    export OS_USERNAME=admin
    export OS_PASSWORD=admin123
    export OS_PROJECT_NAME=admin
    export OS_USER_DOMAIN_NAME=Default
    export OS_PROJECT_DOMAIN_NAME=Default
    export OS_AUTH_URL=http://stack.flex.net:5000/v3
    export OS_IDENTITY_API_VERSION=3
    
    # source admin-openrc

    建立域,項目,用戶和角色

    身份驗證服務爲每個OpenStack服務提供用戶的授權服務, 身份驗證服務使用域、項目、用戶和角色的組合,

  14. 同時這個“default” 域已經存在,在keystone-manage bootstrap步驟中已經創建, 我們建立一個新的域名子爲example
    #openstack domain create --description "An Example Domain" example
    +-------------+----------------------------------+
    | Field       | Value                            |
    +-------------+----------------------------------+
    | description | An Example Domain                |
    | enabled     | True                             |
    | id          | f2a3ddcdc32c411ba5d9e480c25ce8b9 |
    | name        | example                          |
    | tags        | []                               |
    +-------------+----------------------------------+
  15. 如果配置錯誤或名字寫錯了,怎麼改呢方法如下:
        ○ 先要禁用寫錯的域名
        #openstack domain set --disable exampl
        ○ 然後刪除錯誤的域名
        #openstack domain delete exampl 
  16. 建立一個項目,該項目爲每個服務都創建包含一個唯一的用戶
    # openstack project create --domain default --description "Service Project" service
    +-------------+----------------------------------+
    | Field       | Value                            |
    +-------------+----------------------------------+
    | description | Service Project                  |
    | domain_id   | default                          |
    | enabled     | True                             |
    | id          | 3e33e6c8e1d14b7b9bbf64edcafb1023 |
    | is_domain   | False                            |
    | name        | service                          |
    | parent_id   | default                          |
    | tags        | []                               |
    +-------------+----------------------------------+
  17. 常規(非管理員)的任務應該使用非特權的項目和用戶,這個列子中,我們建立一個myproject項目和myuser用戶

        ○ 建立項目名爲myproject
        #openstack project create --domain default --description "Demo Project" myproject
        +-------------+----------------------------------+
        | Field       | Value                            |
        +-------------+----------------------------------+
        | description | Demo Project                     |
        | domain_id   | default                          |
        | enabled     | True                             |
        | id          | c9fc9f23c899402aa10eaabf0c71fff5 |
        | is_domain   | False                            |
        | name        | myproject                        |
        | parent_id   | default                          |
        | tags        | []                               |
        +-------------+----------------------------------+ 
        注意:不要重複此步驟在建立這項目的用戶時
        ○ 建立myuser用戶
        #openstack user create --domain default --password-prompt myuser
        User Password:myuser123
        Repeat User Password:myuser123
        +---------------------+----------------------------------+
        | Field               | Value                            |
        +---------------------+----------------------------------+
        | domain_id           | default                          |
        | enabled             | True                             |
        | id                  | 81949d6833a04e61b79fe3a8a49cd5a5 |
        | name                | myuser                           |
        | options             | {}                               |
        | password_expires_at | None                             |
        +---------------------+----------------------------------+
        ○ 建立一個myrole角色
        #openstack role create myrole
        +-------------+----------------------------------+
        | Field       | Value                            |
        +-------------+----------------------------------+
        | description | None                             |
        | domain_id   | None                             |
        | id          | b49d96c43eaa43cfa9519614f0b84942 |
        | name        | myrole                           |
        +-------------+----------------------------------+
        ○ 添加myrole角色到myproject項目和myuser用戶
        # openstack role add --project myproject --user myuser myrole
    
    注意:你可以重複上面的步驟建立更多的項目和用戶。

    校驗操作

    在安裝其它服務之前校驗身份驗證服務是否正常安裝,執行下列命令在controller節點上。

  18. 臨時取消OS_AUTH_URL和OS_PASSWORD環境變量:
    $ unset OS_AUTH_URL OS_PASSWORD
  19. 使用admin用戶請求驗證的token:
    # openstack --os-auth-url http://stack.flex.net:5000/v3 \
    --os-project-domain-name Default --os-user-domain-name Default \
    --os-project-name admin --os-username admin token issue
    Password: admin123
    +------------+--------------------------------------------------------------+
    | Field      | Value                                                        |       +------------+--------------------------------------------------------------+
    | expires    | 2019-08-22T05:32:10+0000                                     |   
    | id         | gAAAAABdXhrKNMqos25-DjAmaD5yu1dy_-PPtmch7YOgObHg25d2V0pEO… …|
    | project_id | 67139b2bd6c64e1c88136955dbef56a0                             |                         | user_id    | 681e9f941cb249e4a5058414057c7866                             |    +------------+--------------------------------------------------------------+
  20. 使用myuser用戶請求驗證的token:
    # openstack --os-auth-url http://stack.flex.net:5000/v3 \
    --os-project-domain-name Default --os-user-domain-name Default \
    --os-project-name myproject --os-username myuser token issue
    Password: myuser123
    +------------+-------------------------------------------------------------+
    | Field      | Value                                                       |
    +------------+-------------------------------------------------------------+
    | expires    | 2019-08-22T05:34:30+0000                                    |
    | id         | gAAAAABdXhtWYuSN8TlpDjFkNFtr_eElchimIc2YUHBWmImjX5ZpZm3……. |
    | project_id | c9fc9f23c899402aa10eaabf0c71fff5                            | 
    | user_id    | 81949d6833a04e61b79fe3a8a49cd5a5                            |
    +------------+-------------------------------------------------------------+

    建立openstack客戶端環境腳本

  21. 建立腳本

    爲管理和演示項目以及用戶創建客戶機環境腳本。本指南的後續部分將引用這些腳本,以便爲客戶機操作加載適當的憑據。
        1. 建立和編輯文件admin-openrc添加如下內容:
        # cat admin-openrc
        export OS_USERNAME=admin
        export OS_PASSWORD=admin123
        export OS_PROJECT_NAME=admin
        export OS_USER_DOMAIN_NAME=Default
        export OS_PROJECT_DOMAIN_NAME=Default
        export OS_AUTH_URL=http://stack.flex.net:5000/v3
        export OS_IDENTITY_API_VERSION=3
        export OS_IMAGE_API_VERSION=2
    
        2. 建立和編輯文件demo-openrc添加如下內容:
        # cat demo-openrc
        export OS_PROJECT_DOMAIN_NAME=Default
        export OS_USER_DOMAIN_NAME=Default
        export OS_PROJECT_NAME=myproject
        export OS_USERNAME=myuser
        export OS_PASSWORD=myuser123
        export OS_AUTH_URL=http://stack.flex.net:5000/v3                                                  
        export OS_IDENTITY_API_VERSION=3
        export OS_IMAGE_API_VERSION=2
  22. 使用腳本
    要將客戶機作爲特定的項目和用戶運行, 只需在運行它們之前加載相關的客戶機環境腳本。例如:
        1. 加域admin-openrc文件構建身份驗證服務,admin項目和用戶憑據的環境變量:
        $ . admin-openrc
        2. 請求授權的token:
        $ openstack token issue
        +------------+--------------------------------------------------------------------------------+
        | Field      | Value                                                                          |
        +------------+--------------------------------------------------------------------------------+
        | expires    | 2019-08-22T05:41:10+0000                                                       |
        | id         | gAAAAABdXhzmr94abDAnVgAtAlHIOqK_1OTs2nckP98hTfWLCSdliXvE13OGERiAlPy2SbATpj-39… |
        | project_id | 67139b2bd6c64e1c88136955dbef56a0                                               |
        | user_id    | 681e9f941cb249e4a5058414057c7866                                               |
        +------------+--------------------------------------------------------------------------------+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章