Skip to content

Latest commit

 

History

History
356 lines (335 loc) · 13.5 KB

ubuntu_keystone_install.md

File metadata and controls

356 lines (335 loc) · 13.5 KB

Keystone 安裝與設定

本章節會說明與操作如何安裝Identity服務到OpenStack Controller節點上,並設置相關參數與設定。若對於Keystone不瞭解的人,可以參考Keystone 身份驗證套件章節

安裝前準備

我們需要在 Database 底下建立儲存 Keystone 資訊的資料庫,利用mysql指令進入:

mysql -u root -p

建立Keystone 資料庫與使用者:

CREATE DATABASE keystone;
GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' IDENTIFIED BY 'KEYSTONE_DBPASS';
GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' IDENTIFIED BY 'KEYSTONE_DBPASS';

這邊若KEYSTONE_DBPASS要更改的話,可以更改。

完成後,透過quit指令離開資料庫,並透過openssl建立一個隨機的admin token:

openssl rand -hex 10

# 會產生如下密碼
e0cae61b16320e8569fd

安裝與設置Keystone套件

首先我們設定安裝完成後,不要自動開啟服務:

echo "manual" | sudo tee /etc/init/keystone.override

Kilo 的Keystone 遺棄了Eventlet,改用WSGIserver 來代替。所以本教學關閉使用 keystone 服務。

再來透過apt-get安裝keystone套件:

sudo apt-get install keystone python-openstackclient apache2 libapache2-mod-wsgi memcached python-memcache

安裝完後,編輯/etc/keystone/keystone.conf,將ADMIN_TOKEN替換為上一步中,產生的隨機字串:

[DEFAULT]
admin_token = e0cae61b16320e8569fd

[database]部分修改如下:

[database]
# connection = sqlite:////var/lib/keystone/keystone.db
connection = mysql://keystone:[email protected]/keystone

[memcache]部分修改如下:

[memcache]
servers = localhost:11211

[token]部分修改如下:

[token]
provider = uuid
driver = memcache

[revoke]部分修改如下:

[revoke]
driver = sql

完成後同步資料庫:

sudo keystone-manage db_sync

設置Apache HTTP伺服器

編輯/etc/apache2/apache2.conf的ServerName設為controller

ServerName 10.0.0.11

再來建立/etc/apache2/sites-available/wsgi-keystone.conf,修改為以下:

Listen 5000
Listen 35357

<VirtualHost *:5000>
    WSGIDaemonProcess keystone-public processes=5 threads=1 user=keystone display-name=%{GROUP}
    WSGIProcessGroup keystone-public
    WSGIScriptAlias / /var/www/cgi-bin/keystone/main
    WSGIApplicationGroup %{GLOBAL}
    WSGIPassAuthorization On
    <IfVersion >= 2.4>
      ErrorLogFormat "%{cu}t %M"
    </IfVersion>
    LogLevel info
    ErrorLog /var/log/apache2/keystone-error.log
    CustomLog /var/log/apache2/keystone-access.log combined
</VirtualHost>

<VirtualHost *:35357>
    WSGIDaemonProcess keystone-admin processes=5 threads=1 user=keystone display-name=%{GROUP}
    WSGIProcessGroup keystone-admin
    WSGIScriptAlias / /var/www/cgi-bin/keystone/admin
    WSGIApplicationGroup %{GLOBAL}
    WSGIPassAuthorization On
    <IfVersion >= 2.4>
      ErrorLogFormat "%{cu}t %M"
    </IfVersion>
    LogLevel info
    ErrorLog /var/log/apache2/keystone-error.log
    CustomLog /var/log/apache2/keystone-access.log combined
</VirtualHost>

完成後,開啟身份驗證服務虛擬主機:

sudo ln -s /etc/apache2/sites-available/wsgi-keystone.conf /etc/apache2/sites-enabled

建立WSGI元件目錄結構:

sudo mkdir -p /var/www/cgi-bin/keystone

從網路上下載WSGI元件到該目錄底下:

sudo curl http://git.openstack.org/cgit/openstack/keystone/plain/httpd/keystone.py?h=stable/liberty | sudo tee /var/www/cgi-bin/keystone/main /var/www/cgi-bin/keystone/admin

透過chownchmod調整目錄權限:

sudo chown -R keystone:keystone /var/www/cgi-bin/keystone
sudo chmod 755 /var/www/cgi-bin/keystone/*

重新開啟Http服務:

sudo service apache2 restart

刪除預設產生的SQLite資料庫:

sudo  rm -f /var/lib/keystone/keystone.db

建立服務實體和 API 端點

首先透過export設定 OS_TOKEN 環境變數,輸入 openssh 建立的字串與 API URL:

export OS_TOKEN=e0cae61b16320e8569fd
export OS_URL=http://10.0.0.11:35357/v3
export OS_IDENTITY_API_VERSION=3

建立服務實體和身份驗證服務:

openstack service create  --name keystone --description "OpenStack Identity" identity

會看到產生類似以下資訊:

+-------------+----------------------------------+
| Field       | Value                            |
+-------------+----------------------------------+
| description | OpenStack Identity               |
| enabled     | True                             |
| id          | 4ddaae90388b4ebc9d252ec2252d8d10 |
| name        | keystone                         |
| type        | identity                         |
+-------------+----------------------------------+

OpenStack 是動態產生ID 的,因此看到的輸出會跟範例中的輸出不同。

身份驗證服務管理了一個與環境相關的API 端點的目錄。服務使用這個目錄來決定如何與環境中的其他服務進行溝通。透過以下建立一個API端點:

openstack endpoint create --publicurl http://10.0.0.11:5000/v2.0 \
--internalurl http://10.0.0.11:5000/v2.0 \
--adminurl http://10.0.0.11:35357/v2.0 \
--region RegionOne identity

會看到產生類似以下資訊:

+--------------+----------------------------------+
| Field        | Value                            |
+--------------+----------------------------------+
| adminurl     | http://10.0.0.11:35357/v2.0     |
| id           | dd69029787b04bb890d9e6ef6624f082 |
| internalurl  | http://10.0.0.11:5000/v2.0      |
| publicurl    | http://10.0.0.11:5000/v2.0      |
| region       | RegionOne                        |
| service_id   | 317ef3c6861d40a3b5a04b8d14b4b276 |
| service_name | keystone                         |
| service_type | identity                         |
+--------------+----------------------------------+

添加到OpenStack環境中的每個服務,都需要一個或多個服務實體和身份驗證服務的一個API端點。

建立Projects、Users與Roles

驗證服務會對每一個Openstack的服務提供身份驗證。驗證服務使用domains, projects (tenants), users, 和roles的組合。在環境中,為了進行管理操作,我們要建立admin的Project、User和Role:

# 建立 admin Project(tenant)
openstack project create --description "Admin Project" admin

# 建立 admin User
openstack user create --password passwd --email [email protected] admin

# 建立 admin Role
openstack role create admin

# 將 admin role 加到 project與user
openstack role add --project admin --user admin admin

# 建立 service project
openstack project create --description "Service Project" service

為了驗證,我們建立一個沒有特權的使用者demo

# 建立 demo Project(tenant)
openstack project create --description "Demo Project" demo

# 建立 demo User
openstack user create --password demo --email [email protected] demo
openstack role create user
openstack role add --project demo --user demo user

你可以重複此過程來建立其他的 Projects 和 Users。

驗證操作

在安裝其他服務之前,我們要確認 Keystone 的是否沒問題。首先取消OS_TOKENOS_URL環境變數:

unset OS_TOKEN OS_URL

透過admin來驗證Identity v2.0,請求一個token,記得輸入設定的密碼,這邊範例為passwd

openstack --os-auth-url http://10.0.0.11:35357 --os-project-name admin --os-username admin --os-auth-type password  token issue

成功後,會看到以下資訊:

+------------+----------------------------------+
| Field      | Value                            |
+------------+----------------------------------+
| expires    | 2015-06-23T15:36:06Z             |
| id         | 995e854225fc45efac11e3bdc705a675 |
| project_id | cf8f9b8b009b429488049bb2332dc311 |
| user_id    | a2cdc03624c04bb0bd7437f6e9f7913e |
+------------+----------------------------------+

接下來驗證Identity v3.0,因為v3.0增加了對包含Project與User的Domain的支援。Project與User可以在不同的Domain使用相同名稱,因此要使用v3.0 API,請求至少必須顯示包含default domain或者User ID。為了簡化驗證,這邊用default domain,這樣範例可以用使用者帳號名稱,而不是透過ID,指令如下:

openstack --os-auth-url http://10.0.0.11:35357  --os-project-domain-id default --os-user-domain-id default  --os-project-name admin --os-username admin --os-auth-type password  token issue

成功的話,會如上資訊一樣。

+------------+----------------------------------+
| Field      | Value                            |
+------------+----------------------------------+
| expires    | 2015-06-23T15:48:32.147152Z      |
| id         | 67ef08f69381404a8ccaf2a4725b58d5 |
| project_id | cf8f9b8b009b429488049bb2332dc311 |
| user_id    | a2cdc03624c04bb0bd7437f6e9f7913e |
+------------+----------------------------------+

接下來透過admin來列出所有的project (tenant),來驗證admin權限:

openstack --os-auth-url http://10.0.0.11:35357  --os-project-name admin --os-username admin --os-auth-type password  project list

成功的話,會看到類似以下資訊:

+----------------------------------+---------+
| ID                               | Name    |
+----------------------------------+---------+
| 675b421d5f794e10b924bffcfba6b3ab | demo    |
| b1214dcf4156464d8c6df2c20fd51e73 | service |
| cf8f9b8b009b429488049bb2332dc311 | admin   |
+----------------------------------+---------+

也可以透過admin來列出所有user

openstack --os-auth-url http://10.0.0.11:35357  --os-project-name admin --os-username admin --os-auth-type password  user list

成功會看到類似以下資訊:

+----------------------------------+-------+
| ID                               | Name  |
+----------------------------------+-------+
| a2cdc03624c04bb0bd7437f6e9f7913e | admin |
| f884a294541346d48b7e071b64011c97 | demo  |
+----------------------------------+-------+

然後列出所有role

openstack --os-auth-url http://10.0.0.11:35357  --os-project-name admin --os-username admin --os-auth-type password role list

成功會看到以下資訊,這會隨著role的不同,而改變:

+----------------------------------+-------+
| ID                               | Name  |
+----------------------------------+-------+
| 5ba17be99c624ba99046c8fddef812c2 | admin |
| d3fd2f8c04a64e6e9fe56bff410e5fe2 | user  |
+----------------------------------+-------+

接下來我們透過demo來驗證權限,先利用v3.0來獲取token

openstack --os-auth-url http://10.0.0.11:5000  --os-project-domain-id default --os-user-domain-id default  --os-project-name demo --os-username demo --os-auth-type password  token issue

成功會看到回傳以下資訊:

+------------+----------------------------------+
| Field      | Value                            |
+------------+----------------------------------+
| expires    | 2015-06-23T15:55:20.322970Z      |
| id         | eabfa1621ea74747942feac618267d41 |
| project_id | 675b421d5f794e10b924bffcfba6b3ab |
| user_id    | f884a294541346d48b7e071b64011c97 |
+------------+----------------------------------+

注意!這邊採用5000 port是因為該port允許正常的存取(非管理用) Keystone API。

透過demo來嘗試獲取擁有權限的操作:

openstack --os-auth-url http://10.0.0.11:5000  --os-project-domain-id default --os-user-domain-id default  --os-project-name demo --os-username demo --os-auth-type password  user list

若請求成功,會看到錯誤資訊:

ERROR: openstack You are not authorized to perform the requested action: admin_required

若以上都正確,代表keystone應該是正常的被執行了。

建立一個 Client 端腳本

我們會分別為admindemo建立腳本,來方便我們做操作與驗證,首先建立admin檔案為admin-openrc.sh,並加入以下參數:

export OS_PROJECT_DOMAIN_ID=default
export OS_USER_DOMAIN_ID=default
export OS_PROJECT_NAME=admin
export OS_TENANT_NAME=admin
export OS_USERNAME=admin
export OS_PASSWORD=passwd
export OS_AUTH_URL=http://10.0.0.11:35357/v3

注意!OS_PASSWORD記得修改為設定密碼,這邊採用passwd

再來建立demodemo-openrc.sh,並加入以下參數:

export OS_PROJECT_DOMAIN_ID=default
export OS_USER_DOMAIN_ID=default
export OS_PROJECT_NAME=demo
export OS_TENANT_NAME=demo
export OS_USERNAME=demo
export OS_PASSWORD=demo
export OS_AUTH_URL=http://10.0.0.11:5000/v3

注意!OS_PASSWORD記得修改為設定密碼,這邊採用demo

完成後,可以透過source來加入環境變數:

source admin-openrc.sh

試看看直接請求keystone指令:

openstack token issue

成功的話,會看到以下資訊:

+------------+----------------------------------+
| Field      | Value                            |
+------------+----------------------------------+
| expires    | 2015-06-23T16:05:15.848947Z      |
| id         | 241fe6e046df47d6bd1a8f15c7f4f9b5 |
| project_id | cf8f9b8b009b429488049bb2332dc311 |
| user_id    | a2cdc03624c04bb0bd7437f6e9f7913e |
+------------+----------------------------------+