openstack安裝部署3——keystone安裝(僅部署在控制節點)

1. 前言介紹

Openstack的身份認證服務提供單點認證管理、授權和目錄服務。Openstack的其他服務都使用身份認證服務作爲統一的API。其他服務接收用戶請求,需要身份認證服務驗證用戶是否有申請請求的權限。
身份認證包括以下幾個組成:
Server:集中式服務器通過RESTful接口提供認證和授權服務。
Drivers:用來在外部訪問openstack身份信息。
Modules:中間件模塊運行在使用身份認證服務的openstack組件的地址空間,它們攔截服務請求,提取用戶憑證,並將他們發送至集中式服務器授權。
備註:安裝openstack身份認證時,需要註冊每個openstack組件。此外,身份認證可以追蹤哪個openstack服務已經安裝,以及他們在網絡中的位置。

2. 安裝

2.1 安裝前

安裝keystone前需要創建一個數據庫和管理員令牌

  1. 使用root連接數據庫
    mysql -u root -p

  2. 創建“keystone”數據庫
    MariaDB > CREATE DATABASE keystone;

  3. 爲訪問keystone數據庫添加權限
    MariaDB> GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' \
    IDENTIFIED BY '123456';
    MariaDB> GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' \
    IDENTIFIED BY '123456';
    退出數據庫訪問客戶端。

  4. 隨機令牌
    在初始配置期間生成一個隨機值作爲管理令牌使用
    openssl rand -hex 10
    這裏寫圖片描述
    生成的隨機值爲:b14c455ff3cfbea08fbb

2.2 安裝和配置組件

  1. 在安裝完成後禁止keystone服務自啓動
    官方文檔中使用mod_wsgi(一種Apache HTTP Server)在端口使用5000和35357上爲Openstack認證服務請求提供服務。默認情況下keystone服務也會監聽該端口,因此,官方文檔中手動禁用了keystone服務。
    # echo "manual" > /etc/init/keystone.override

  2. 安裝包
    apt-get install keystone apache2 libapache2-mod-wsgi

  3. 配置文件
    編輯配置文件 /etc/keystone/keystone.conf
    在[default]部分,添加在2.1-4中隨機生成的管理員令牌b14c455ff3cfbea08fbb
    [DEFAULT]
    ...
    admin_token = b14c455ff3cfbea08fbb
    這裏寫圖片描述

    在[database]部分,配置數據庫訪問連接,123456爲KEYSTONE_DBPASS的密碼
    [database]
    ...
    connection = mysql+pymysql://keystone:123456@controller/keystone

    [token]
    ...
    provider = fernet

  4. populate身份認證服務數據庫
    su -s /bin/sh -c "keystone-manage db_sync" keystone
  5. 初始化fernet
    keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone
    這裏寫圖片描述

2.3 配置Apache HTTP服務

  1. 編輯配置文件apache2.conf
    編輯/etc/apache2/apache2.conf配置ServerName選項【添加ServerName項】
    這裏寫圖片描述

  2. 配置文件wsgi-keystone.conf
    在文件夾/etc/apache2/sites-available/下創建配置文件wsgi-keystone.conf,填寫以下內容:

    Listen 5000Listen 35357

2.4完成安裝

  1. 重啓服務
    Service apache2 restart

  2. Ubuntu默認創建SQLite數據庫,由於這個配置使用SQL數據庫服務,因此可以選擇移除數據庫文件
    rm -f /var/lib/keystone/keystone.db

3. 創建服務

認證服務提供了一個服務的目錄和他們的位置,每一個添加到openstack環境中的服務都需要一個服務實體(entitiy)和幾個API接口。

3.1 先決條件

默認情況,認證服務數據庫不包含支持傳統身份認證和目錄服務的信息,因此需要臨時的身份認證令牌,此令牌在3.2.1-4中生成。
用戶需要通過os-token命令或者配置OS_TOKEN環境將令牌值傳遞給openstack,用戶也需要通過–os-url命令或配置OS_TURL將認證服務URL地址傳遞給openstack命令行。
出於安全考慮,除了初始化身份認證服務,不要使用臨時身份令牌。

  1. 配置身份認證令牌
    $ export OS_TOKEN=ADMIN_TOKEN
    ADMIN_TOKEN用3.2.1-4中的臨時令牌b14c455ff3cfbea08fbb替換,即:
    export OS_TOKEN=b14c455ff3cfbea08fbb

  2. 配置URL
    export OS_URL=http://controller:35357/v3

  3. 配置API版本
    export OS_IDENTITY_API_VERSION=3

3.2創建服務實例和API endpoints

身份認證服務管理openstack環境中服務的目錄(catalog),由這個目錄決定其他服務是否可用。

  1. 創建服務實例
    openstack service create --name keystone --description "OpenStack Identity" identity

    這裏寫圖片描述

    【PS:

    遇到錯誤:An unexpected error prevented the server from fulfilling your
    request. (HTTP 500) (Request-ID:
    req-c71551be-dd60-4ecf-bfbf-f1586e1b7c28)
    查看日誌/var/log/apache2/keystone.log:
    這裏寫圖片描述
    OperationalError: (sqlite3.OperationalError) no such table: service
    [SQL: u’INSERT INTO service (id, type, enabled, extra) VALUES (?, ?,
    ?, ?)’] [parameters: (‘cc597d134f9e40bebe6f0cea58e91723’,
    u’identity’, 1, ‘{“description”: “OpenStack Identity”, “name”:
    “keystone”}’)] 解決方案: 輸入命令keystone-management db_sync(keystone同步數據庫)
    參考了博客http://blog.csdn.net/zw421152835/article/details/50992732

  2. 創建API endpoints
    Openspack提供三種API endpoints:admin,internal,public。在生產環境中,三種API處於不同網段。Admin API 網絡被限制在雲管理組織內部,操作員通過其管理雲基礎設施。Internal API網絡供Openstack服務使用。Public API 網絡對互聯網是可見,所以客戶可以管理他們的雲。
    每個加入Openstack的服務都需要包含至少一個service entity,在認證服務中至少包含三種類型的API endpoint。
    創建命令如下:
    openstack endpoint create --region RegionOne identity public http://controller:5000/v3
    這裏寫圖片描述
    這裏寫圖片描述
    openstack endpoint create --region RegionOne identity internal http://controller:5000/v3
    這裏寫圖片描述
    openstack endpoint create --region RegionOne identity admin http://controller:35357/v3
    這裏寫圖片描述

4 創建域(domain),工程(projects),用戶(users),角色(roles)

keystone爲每個openstack服務提供了認證服務,認證服務包含domin,project,users,roles。
備註1:創建的任何一個角色都需要映射到每個openstack服務的配置文件目錄中的policy.json中的角色特性(roles specified)。大多數服務的默認策略授予admin role的權限。

4.1 創建“default”域

  • openstack domain create --description "Default Domain" default
    這裏寫圖片描述

4.2創建管理運營( administrative operations)的project、user、roles

  1. 創建“admin”project
    openstack project create --domain default --description "Admin Project" admin
    這裏寫圖片描述

  2. 創建“admin”用戶(用戶密碼爲:123456)
    openstack user create --domain default --password-prompt admin
    這裏寫圖片描述

  3. 創建“admin”角色
    openstack role create admin
    這裏寫圖片描述

  4. 添加“admin”角色到“admin”項目和用戶中
    openstack role add --project admin --user admin admin
    這裏寫圖片描述

4.3創建“service” project

  1. 創建一個“service”project ,該project中包含了添加到您的環境中的每個服務的唯一一個用戶。
    openstack project create --domain default --description "Service Project" service
    這裏寫圖片描述

4.4創建常規project、user、role——“demo”

常規(非管理員)的任務應該使用一個普通的無特權的項目和用戶。

  1. 創建一個“demo”project
    openstack project create --domain default --description "Demo Project" demo
    這裏寫圖片描述
  2. 創建“demo”用戶
    openstack user create --domain default --password-prompt demo
    這裏寫圖片描述

  3. 創建“user”角色
    這裏寫圖片描述

  4. 添加“user”角色到“demo”project和user
    openstack role add --project demo --user demo user

5 驗證操作

  1. 禁用臨時令牌
    出於安全考慮,禁用臨時的認證令牌機制。編輯配置文件/etc/keystone/keystone-paste.ini:將 admin_token_auth從 [pipeline:public_api] , [pipeline:admin_api], 和 [pipeline:api_v3] 三部分移除。

  2. 臨時取消環境變量 OS_TOKEN 和 OS_URL 的設置
    unset OS_TOKEN OS_URL

  3. 以“admin”用戶請求一個認證令牌
openstack --os-auth-url http://controller:35357/v3 \ 
    --os-project-domain-name default --os-user-domain-name default \  
    --os-project-name admin --os-username admin token issue

其中輸入password使用“admin”user的密碼123456,API端口使用5000該端口只支持針對認證服務API的常規訪問。
這裏寫圖片描述

6.創建openstack客戶端環境腳本

1至5使用環境變量和命令行結合方式,通過openstack客戶端與認證服務交互。爲了提高client操作的效率,Openstack通過OpenRC文件形式提供基本的客戶環境配置腳本。腳本文件不僅包含支持所有客戶端的通用配置,也支持特定配置。更多信息參見OpenStack End User Guide。

6.1 創建腳本

爲“demo”“admin”的projects和users創建客戶端環境腳本,接下來的其他部分安裝也會參考這些腳本爲客戶操作授予合適的證書。

  1. 編輯腳本 ~/admin-openrc,添加以下內容。其中OS_PASSWORD使用“admin”用戶的密碼123456
export OS_PROJECT_DOMAIN_NAME=default
export OS_USER_DOMAIN_NAME=default
export OS_PROJECT_NAME=admin
export OS_USERNAME=admin
export OS_PASSWORD=ADMIN_PASS
export OS_AUTH_URL=http://controller:35357/v3
export OS_IDENTITY_API_VERSION=3export OS_IMAGE_API_VERSION=2
  1. 編輯腳本 ~/demo-openrc,添加以下內容,其中OS_PASSWORD使用“admin”用戶的密碼123456
export OS_PROJECT_DOMAIN_NAME=default
export OS_USER_DOMAIN_NAME=default
export OS_PROJECT_NAME=demo
export OS_USERNAME=demo
export OS_PASSWORD=DEMO_PASS
export OS_AUTH_URL=http://controller:5000/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2

6.2使用腳本

  1. 以一個特殊的project和user用戶運行一個客戶端前,可以運行此腳本加載相關客戶端環境配置腳本。
    . admin-openrc
    2.請求一個認證
    openstack token issue
    【遇到問題:’NoneType’ object has no attribute ‘service_catalog’
    這裏寫圖片描述
    解決:先前設置了admin的環境變量,但是用client連接的時候,需要unset OS_SERVICE_TOKEN和OS_SERVICE_ENDPOINT,即執行命令:
    unset OS_SERVICE_TOKEN OS_SERVICE_ENDPOINT
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章