目錄
1、安裝環境說明
OS:Ubuntu 14.04 LTS
Controller
- IP:10.0.0.11 / 24
- Gateway:10.0.0.1
Network
- Management IP:10.0.0.21 / 24 (eth0)
- Gateway:10.0.0.1
- Instance Tunnel IP:10.0.1.21 / 24 (eth1)
- External Interface (eth2)
- IP:不指定 IP
- 設定方式如下:(修改 /etc/network/interfaces)
auto eth2
iface eth2 inet manual
up ip link set dev $IFACE up
down ip link set dev $IFACE down
Compute 1
- Management IP:10.0.0.31 / 24
- Gateway:10.0.0.1
- Instance Tunnel IP:10.0.1.31
修改每個 node 的 /etc/hosts 檔案,並加入以下內容:
10.0.0.11 controller
10.0.0.21 network
10.0.0.31 compute1
- 使用者身分:root
2、Identity Service 概觀
Identity Service 在整個 OpenStack 架構中提供了兩項功能:
- 認證 &授權
- 提供可用服務的 API 服務端點目錄資訊
Identity Service 提供了 Role-based 的管理概念,並提供傳統的 UserName/Password & Token 的認證方式。
以下的來自官網的圖,描述了 Identity Service(Keystone) 的完整作業流程:
2.1 重要名詞說明
Identity Service 有些觀念要先清楚,列出比較容易搞混的:
2.1.1 Tenant
tenant 是 identity 服務的操作者用來將特定的 resource 或是 identity objects 區隔。
每一個 tenant 可能會對應到一個客戶,或是一個帳號,也有可能是一個專案。
2.1.2 Role
role 包含了指定功能的使用權限,管理者可以根據不同的 role 給定不同的權限,再將 role 指定給 user,每個 user 可以同時被指定為多個 role 藉以授予系統存取權限。
Keystone 中已經有一個預設的 Role,名稱為 _member_
3、安裝 Identity Service
接著要安裝認證用的服務:
apt-get -y install keystone
安裝完一卡車的套件後,這裡先為 keystone 準備儲存認證用的資料庫(MySQL),輸入以下指令:
# mysql -u root -p
Enter password: ##########
mysql> create database keystone;
Query OK, 1 row affected (0.00 sec)
mysql> grant all privileges on keystone.* to 'keystone'@'localhost' identified by 'YOURKEYSTONEDBPASSWORD';
Query OK, 0 rows affected (0.00 sec)
mysql> grant all privileges on keystone.* to 'keystone'@'%' identified by 'YOURKEYSTONEDBPASSWORD';
Query OK, 0 rows affected (0.00 sec)
mysql> exit
接著修改 keystone 設定,將資料庫指向剛剛建立的 MySQL DB,編輯 /etc/keystone/keystone.conf:
修改 [database] 區段的 connection 設定如下:
[database]
connection = mysql://keystone:YOURKEYSTONEDBPASSWORD@controller/keystone
並移除原本的 SQLite DB:
rm /var/lib/keystone/keystone.db
建立認證服務用的資料庫 table:
su -s /bin/sh -c “keystone-manage db_sync” keystone
產生 shared secret:
openssl rand -hex 10
編輯 keystone 設定(/etc/keystone/keystone.conf),加入以下兩個設定:
[DEFAULT]
admin_token = YOUR_SHARED_SECRET #填入上一個步驟中使用 openssl 指令產生的 shared secret
log_dir = /var/log/keystone
重新啟動 keystone 服務:
service keystone restart
預設 keystone 的 token 是沒有過期的設定,因此透過以下指令將 token 的過期時間設定為 1 小時:
(crontab -l -u keystone 2>&1 | grep -q token_flush) || echo ‘@hourly /usr/bin/keystone-manage token_flush >/var/log/keystone/keystone-tokenflush.log 2>&1’ >> /var/spool/cron/crontabs/keystone
安裝好 Identity Service 之後,接著就要來設定認證相關資訊了。
4、設定 user / role / tenant
在建立 user / role / tenant 之前,必須先設定好 OS_SERVICE_TOKEN & OS_SERVICE_ENDPOINT 兩個環境變數,目的是為了以管理者的身分啟用並註冊 Identity Service:
$ export OS_SERVICE_TOKEN=YOUR_ADMIN_TOKEN
$ export OS_SERVICE_ENDPOINT=http://controller:35357/v2.0
4.1 新增 User
# 新增 user - admin
$ keystone user-create --name=admin --pass=ADMIN_PASS --email=ADMIN_EMAIL
# 新增 user - demo
$ keystone user-create --name=demo --pass=DEMO_PASS --email=DEMO_EMAIL
4.2 新增 Role
# 新增 role - admin
$ keystone role-create --name=admin
Keystone 已經內建 _member_ 為預設 role,之後會將一般的帳號與 _member_ 進行連結。
4.3 新增 tenant
最後新增兩個 tenant 類型,分別是管理者(admin)以及一般使用者(demo):
# 新增 tenant - admin
$ keystone tenant-create --name=admin --description="Admin Tenant"
# 新增 tenant - demo
$ keystone tenant-create --name=demo --description="Demo Tenant"
4.4 將 user / role / tenant 進行連結
# 將 user(admin) 與 role(admin) & tenant(admin) 連結
$ keystone user-role-add --user=admin --tenant=admin --role=admin
# 將 user(admin) 與 role(_member_) & tenant(admin) 連結
$ keystone user-role-add --user=admin --role=_member_ --tenant=admin
# 將 user(demo) 與 role(_member_) & tenant(demo) 連結
$ keystone user-role-add --user=demo --role=_member_ --tenant=demo
4.5 設定 OpenStack services 之間用的認證資訊
同樣的,OpenStack 中不同的 service 也需要 username / role / tenant 來進行認證並存取其他的 service,以下建立 service 用的 username / role / tenant:
# 建立 service 用 user - service_user
$ keystone user-create --name=service_user --pass=SERVICE_USER_PASS --email=SERVICE_USER_EMAIL
# 建立 service 用 role
$ keystone role-create --name=service_role
# 建立 service 用 tenant
$ keystone tenant-create --name=service --description="Service Tenant"
# 將 user(service_user) 與 role(service_role) & tenant(service) 連結
$ keystone user-role-add --user=service_user --role=service_role --tenant=service
5、定義 services & API 服務端點
之前提過 Identity Service 其中一個重要功能是「提供可用服務的 API 服務端點目錄資訊」,因此安裝好的服務都必須向 Identity Service 註冊,就連 Identity Service 自己也不例外。
# 註冊 keystone service
$ keystone service-create --name=keystone --type=identity --description="OpenStack Identity"
# 設定 Identity Service 的 API 服務端點
$ keystone endpoint-create --service-id=$(keystone service-list | awk '/ identity / {print $2}') --publicurl=http://controller:5000/v2.0 --internalurl=http://controller:5000/v2.0 --adminurl=http://controller:35357/v2.0
6、驗證 Identity Service 是否安裝成功
為了確保 Identity Service 安裝正確,首先清除 OS_SERVICE_TOKEN & OS_SERVICE_ENDPOINT 兩個環境變數。
這兩個環境變數用途只是為了以管理者的身分設定 & 註冊 Identity Service 之用。
$ unset OS_SERVICE_TOKEN OS_SERVICE_ENDPOINT
6.1 進行 name-based 認證
$ keystone --os-username=admin --os-password=YOUR_ADMIN_PASS --os-auth-url=http://controller:35357/v2.0 token-get
這個指令會取得有效期間為一個小時(上面有設定)的 token,並搭配指定 user 的 id 資訊。
【註】有 token 資訊表示 Identity Service 正確地被安裝 & 註冊
6.2 進行 tenant-based 認證
$ keystone --os-username=admin --os-password=YOUR_ADMIN_PASS --os-tenant-name=admin --os-auth-url=http://controller:35357/v2.0 \
token-get
這個指令會取得有效期間為一個小時(上面有設定)的 token,並搭配指定 user & tenant 的 id 資訊。
【註】有 token 資訊表示 Identity Service 正確地被安裝 & 註冊
6.3 簡化指令的方式
看上面這麼一大串指令,看了頭都暈了,其實就是指定了好幾個參數,可以設定一個 bash 檔,指定所需要的環境變數,就可以將指令簡化,建立檔案 admin-openrc.sh,並填入以下內容:
export OS_USERNAME=admin
export OS_PASSWORD=YOUR_ADMIN_PASS
export OS_TENANT_NAME=admin
export OS_AUTH_URL=http://controller:35357/v2.0
透過以下指令就可以取得全新的 token:
$ source admin-openrc.sh
$ keystone token-get
最後檢視一下之前設定的 user / role / tenant 是否都有對應正確:
# 檢視目前的 user 清單
$ keystone user-list
+----------------------------------+--------------+---------+-------------------+
| id | name | enabled | email |
+----------------------------------+--------------+---------+-------------------+
| eb54ed5c89e1411a9db5cadfd825ae42 | admin | True | admin@example.com |
| bc1ae50e167f45edb064e582702c5792 | demo | True | admin@example.com |
| 877f000de0064ad0a2ef33519af6cc87 | service_user | True | admin@example.com |
+----------------------------------+--------------+---------+-------------------+
# 檢視 role 與 user(admin) 的對應資訊
$ keystone user-role-list --user admin --tenant admin
+----------------------------------+----------+----------------------------------+----------------------------------+
| id | name | user_id | tenant_id |
+----------------------------------+----------+----------------------------------+----------------------------------+
| 9fe2ff9ee4384b1894a90878d3e92bab | _member_ | afea5bde3be9413dbd60e479fddf9228 | e519b772cb43474582fa303da62559e5 |
| 5d3b60b66f1f438b80eaae41a77b5951 | admin | afea5bde3be9413dbd60e479fddf9228 | e519b772cb43474582fa303da62559e5 |
+----------------------------------+----------+----------------------------------+----------------------------------+
沒有留言:
張貼留言