溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

juno版OpenStack部署中如何添加認(rèn)證服務(wù)

發(fā)布時(shí)間:2021-12-23 18:10:04 來(lái)源:億速云 閱讀:120 作者:柒染 欄目:云計(jì)算

這篇文章給大家介紹juno版OpenStack部署中如何添加認(rèn)證服務(wù),內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對(duì)大家能有所幫助。

keystone簡(jiǎn)介

keystone主要為了實(shí)現(xiàn)以下關(guān)鍵功能:

  • 追蹤用戶(hù)和管理其權(quán)限;

  • 提供可訪(fǎng)問(wèn)服務(wù)的目錄,并提供服務(wù)的API端點(diǎn)(API endpoints)。

keystone中的一些基本概念簡(jiǎn)介

  • 用戶(hù)(User) 可使用OpenStack云服務(wù)的個(gè)人、系統(tǒng)或服務(wù)的數(shù)字化形象。(Digital representation of a person, system, or service who uses OpenStack cloud services. )

  • 證書(shū)(Credentials) 用于確認(rèn)用戶(hù)身份的數(shù)據(jù)。

  • 認(rèn)證(Authentication) 確認(rèn)一個(gè)用戶(hù)身份的認(rèn)證過(guò)程。

  • 令牌(Token) 一段字母和數(shù)字組成的文本,用于訪(fǎng)問(wèn)OpenStack 的API和資源。

  • 租戶(hù)(Tenant) 一個(gè)用來(lái)分組或隔離資源的集合。租戶(hù)還可以用來(lái)分組或隔離認(rèn)證對(duì)象。根據(jù)不同的服務(wù)操作者,一個(gè)租戶(hù)可以對(duì)應(yīng)一個(gè)顧客、一個(gè)賬戶(hù)、一個(gè)組織或一個(gè)項(xiàng)目。(A container used to group or isolate resources. Tenants also group or isolate identity objects. Depending on the service operator, a tenant may map to a customer, account, organization, or project.)

  • 服務(wù)(Service) OpenStack的服務(wù),用于Compute(nova),Object Storage(swift)或Image Service(glance)等。它為用戶(hù)訪(fǎng)問(wèn)資源,實(shí)施運(yùn)作提供了一個(gè)或多個(gè)端點(diǎn)(endpoint)。

  • 端點(diǎn)(Endpoint) 一個(gè)可以通過(guò)網(wǎng)絡(luò)來(lái)訪(fǎng)問(wèn)服務(wù)的地址,通常是一個(gè)URL地址。

  • 角色 (Role) 一種定義好的擁有施行特定操作的權(quán)限的個(gè)人特征。

  • keystone客戶(hù)端(Keystone Client) 一種用于OpenStack認(rèn)證API的命令行交互界面。

安裝和配置

keystone服務(wù)安裝在controller節(jié)點(diǎn)上。

##配置keystone所使用的數(shù)據(jù)庫(kù) 使用root身份進(jìn)入數(shù)據(jù)庫(kù)(密碼為安裝數(shù)據(jù)庫(kù)步驟時(shí)設(shè)立的):

mysql -u root -p```

進(jìn)入數(shù)據(jù)庫(kù)界面后創(chuàng)建屬于keystone的數(shù)據(jù)庫(kù):

CREATE DATABASE keystone;```

把keystone數(shù)據(jù)庫(kù)的訪(fǎng)問(wèn)權(quán)限賦予名為keystone,來(lái)自任何主機(jī)地址的用戶(hù),并設(shè)定訪(fǎng)問(wèn)密碼為KEYSTONE_DBPASS(替換為合適的密碼):

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變更為合適的密碼。

退出數(shù)據(jù)庫(kù)客戶(hù)端。

## 安裝配置組件
1. 安裝keystone包:

apt-get install keystone python-keystoneclient```

  1. 編輯```

vi /etc/keystone/keystone.conf```文件:

[DEFAULT]部分,定義initial administration token:

[DEFAULT]
 ...
 admin_token = ADMIN_TOKEN```

 其中替換ADMIN_TOKEN為合適的值,可以通過(guò)```
# openssl rand -hex 10```來(lái)生成。

 繼續(xù)在```
[DEFAULT]```部分開(kāi)啟“輸出詳細(xì)記錄日志”的選項(xiàng):

[DEFAULT] ... verbose = True```

[database]部分,設(shè)定數(shù)據(jù)庫(kù)訪(fǎng)問(wèn)選項(xiàng):

[database]
 ...
 connection = mysql://keystone:KEYSTONE_DBPASS@controller/keystone```
 把KEYSTONE_DBPASS替換為創(chuàng)建keystone數(shù)據(jù)庫(kù)時(shí)所授權(quán)的密碼。配置默認(rèn)使用SQL的數(shù)據(jù)庫(kù)連接,需要注釋掉或刪除。

 在```
[token]```部分,配置UUID token provider和SQL driver:

[token] ... provider = keystone.token.providers.uuid.Provider driver = keystone.token.persistence.backends.sql.Token```

[revoke]部分,配置SQL revocation driver:

[revoke]
 ...
 driver = keystone.contrib.revoke.backends.sql.Revoke```

 同步認(rèn)證服務(wù)數(shù)據(jù)庫(kù):

keystone-manage db_sync```

完成最后的安裝

重啟認(rèn)證服務(wù):

# service keystone restart```

默認(rèn)Ubuntu會(huì)產(chǎn)生SQLite數(shù)據(jù)庫(kù),可以將其刪除:

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

默認(rèn)情況下,認(rèn)證服務(wù)會(huì)無(wú)限量地存儲(chǔ)過(guò)期的token,這將導(dǎo)致數(shù)據(jù)庫(kù)占用空間大幅度增加而且會(huì)降低認(rèn)證服務(wù)的性能,用以下命令可以定期清除過(guò)期的token:

# (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```

# 創(chuàng)建租戶(hù),用戶(hù)和角色
## 配置所需的環(huán)境變量
在使用keystone命令操作前,需要先使用臨時(shí)的administration token(即在```
/etc/keystone/keystone.conf```文件中設(shè)定的ADMIN_TOKEN),并手動(dòng)配置認(rèn)證服務(wù)的地址(endpoint)。
將administration token寫(xiě)入環(huán)境變量:

$ export OS_SERVICE_TOKEN=ADMIN_TOKEN``` 將endpoint寫(xiě)入環(huán)境變量:

$ export OS_SERVICE_ENDPOINT=http://controller:35357/v2.0```

## 創(chuàng)建租戶(hù),用戶(hù)和角色
1. 創(chuàng)建擁有管理操作職能的管理租戶(hù),管理用戶(hù)和管理角色。

  創(chuàng)建```
admin```租戶(hù):

$ keystone tenant-create --name admin --description "Admin Tenant" +-------------+----------------------------------+ | Property | Value | +-------------+----------------------------------+ | description | Admin Tenant | | enabled | True | | id | e8cda8def37b4d32b765759f1faa5ed2 | | name | admin | +-------------+----------------------------------+

  創(chuàng)建```
admin```用戶(hù):

$ keystone user-create --name admin --pass ADMIN_PASS --email EMAIL_ADDRESS +----------+----------------------------------+ | Property | Value | +----------+----------------------------------+ | email | admin@example.com | | enabled | True | | id | 13b460ca8d9e4aa094e8f4f4fff6f087 | | name | admin | | username | admin | +----------+----------------------------------+``` 用合適的密碼代替ADMIN_PASS。

創(chuàng)建 admin角色:

$ keystone role-create --name admin
+----------+----------------------------------+
| Property |              Value               |
+----------+----------------------------------+
|    id    | 2bf07853b40b420eb9e9e2aa23ff3e9e |
|   name   |              admin               |
+----------+----------------------------------+```

  將```
admin```角色賦予給```
admin```租戶(hù)和```
admin```用戶(hù)。

$ keystone user-role-add --user admin --tenant admin --role admin``` 這條命令不會(huì)產(chǎn)生輸出顯示。

  1. 創(chuàng)建擁有特定權(quán)限的demo租戶(hù),demo用戶(hù)

創(chuàng)建demo租戶(hù):

$ keystone tenant-create --name demo --description "Demo Tenant"
+-------------+----------------------------------+
|   Property  |              Value               |
+-------------+----------------------------------+
| description |           Demo Tenant            |
|   enabled   |               True               |
|      id     | ef5783a270d84bb880a2c6fb85eac651 |
|     name    |               demo               |
+-------------+----------------------------------+```

  創(chuàng)建屬于```
demo```租戶(hù)的```
demo```用戶(hù)

keystone user-create --name demo --tenant demo --pass DEMO_PASS --email EMAIL_ADDRESS +----------+----------------------------------+ | Property | Value | +----------+----------------------------------+ | email | demo@example.com | | enabled | True | | id | 2a6e8190e26c4f27ba98171235a8b219 | | name | demo | | tenantId | ef5783a270d84bb880a2c6fb85eac651 | | username | demo | +----------+----------------------------------+``` 用合適的密碼代替DEMO_PASS

OpenStack服務(wù)的配置方案

OpenStack的服務(wù)都需要被賦予租戶(hù),用戶(hù)和角色的性質(zhì)來(lái)與其他服務(wù)進(jìn)行交互。每個(gè)服務(wù)都需要?jiǎng)?chuàng)建一個(gè)或多個(gè)獨(dú)立的用戶(hù),這個(gè)用戶(hù)被賦予 admin角色,并且屬于 service租戶(hù)下。

創(chuàng)建 service租戶(hù):

$ keystone tenant-create --name service --description "Service Tenant"
+-------------+----------------------------------+
|   Property  |              Value               |
+-------------+----------------------------------+
| description |          Service Tenant          |
|   enabled   |               True               |
|      id     | e4288b01bc084a29ad6133f882a58732 |
|     name    |             service              |
+-------------+----------------------------------+```

# 創(chuàng)建服務(wù)實(shí)體和API端點(diǎn)(service entity and API endpoint)
## 配置所需的環(huán)境變量
具體操作如上一步驟所述。

## 創(chuàng)建服務(wù)實(shí)體和API端點(diǎn)
1. 創(chuàng)建服務(wù)實(shí)體
  認(rèn)證服務(wù)會(huì)將OpenStack環(huán)境中的所有服務(wù)登記在目錄中,所有服務(wù)都通過(guò)這個(gè)目錄來(lái)定位環(huán)境中的其他服務(wù)。

  創(chuàng)建認(rèn)證服務(wù)的服務(wù)實(shí)體:

$ keystone service-create --name keystone --type identity
--description "OpenStack Identity" +-------------+----------------------------------+ | Property | Value | +-------------+----------------------------------+ | description | OpenStack Identity | | enabled | True | | id | d7bbd538857b4caa9f7f9730a74b98ca | | name | keystone | | type | identity | +-------------+----------------------------------+```

  1. 創(chuàng)建服務(wù)API端點(diǎn) 認(rèn)證服務(wù)會(huì)將OpenStack環(huán)境中每個(gè)服務(wù)對(duì)應(yīng)的API端點(diǎn)登記在目錄中,這個(gè)目錄將用來(lái)支持各個(gè)服務(wù)之間的通信。

創(chuàng)建認(rèn)證服務(wù)的API端點(diǎn):

$ 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 \
--region regionOne
+-------------+----------------------------------+
|   Property  |              Value               |
+-------------+----------------------------------+
|   adminurl  |   http://controller:35357/v2.0   |
|      id     | 32fb8b8934024c30bd1f0b7795a51220 |
| internalurl |   http://controller:5000/v2.0    |
|  publicurl  |   http://controller:5000/v2.0    |
|    region   |            regionOne             |
|  service_id | d7bbd538857b4caa9f7f9730a74b98ca |
+-------------+----------------------------------+```

# 驗(yàn)證操作
1. 復(fù)位環(huán)境變量:

$ unset OS_SERVICE_TOKEN OS_SERVICE_ENDPOINT```

  1. admin租戶(hù)和用戶(hù)的身份,請(qǐng)求一條authentication token:

$ keystone --os-tenant-name admin --os-username admin --os-password ADMIN_PASS \
--os-auth-url http://controller:35357/v2.0 token-get
+-----------+----------------------------------+
|  Property |              Value               |
+-----------+----------------------------------+
|  expires  |       2015-11-24T12:37:45Z       |
|     id    | 1d5ebdf4e60a4f648240a20a65cbf96e |
| tenant_id | 4f7806287c9a437e9cd912504ff71727 |
|  user_id  | fd151acb7cc34bba8d4d9cf391ad0d06 |
+-----------+----------------------------------+```
ADMIN_PASS為之前設(shè)定的```
admin```用戶(hù)密碼。

3. 以```
admin```租戶(hù)和用戶(hù)的身份,列出租戶(hù)清單:

$ keystone --os-tenant-name admin --os-username admin --os-password ADMIN_PASS
--os-auth-url http://controller:35357/v2.0 tenant-list +----------------------------------+---------+---------+ | id | name | enabled | +----------------------------------+---------+---------+ | 4f7806287c9a437e9cd912504ff71727 | admin | True | | d1f7caccc65840b68258997a759da07f | demo | True | | 5ab4d5c513f543cfbf8e3be97f5df5fb | service | True | +----------------------------------+---------+---------+ ADMIN_PASS為之前設(shè)定的 admin```用戶(hù)密碼。

  1. admin租戶(hù)和用戶(hù)的身份,列出用戶(hù)清單:

$ keystone --os-tenant-name admin --os-username admin --os-password ADMIN_PASS \
--os-auth-url http://controller:35357/v2.0 user-list
+----------------------------------+-------+---------+-------------------+
|                id                |  name | enabled |       email       |
+----------------------------------+-------+---------+-------------------+
| fd151acb7cc34bba8d4d9cf391ad0d06 | admin |   True  | admin@example.com |
| 812116bcca5b4a01981669fcef09ee11 |  demo |   True  |  demo@example.com |
+----------------------------------+-------+---------+-------------------+```
ADMIN_PASS為之前設(shè)定的```
admin```用戶(hù)密碼。

5. 以```
admin```租戶(hù)和用戶(hù)的身份,列出角色清單:

$ keystone --os-tenant-name admin --os-username admin --os-password ADMIN_PASS
--os-auth-url http://controller:35357/v2.0 role-list +----------------------------------+----------+ | id | name | +----------------------------------+----------+ | 9fe2ff9ee4384b1894a90878d3e92bab | member | | 61286483662e40ba8f0a48b05fc8a451 | admin | +----------------------------------+----------+ ADMIN_PASS為之前設(shè)定的 admin```用戶(hù)密碼。其中_member_的來(lái)歷如下,在創(chuàng)建用戶(hù)時(shí):Using the --tenant option automatically assigns the member role to a user. This option will also create the member role if it does not exist.(創(chuàng)建時(shí)使用的命令為keystone user-create --name demo --tenant demo --pass DEMO_PASS --email EMAIL_ADDRESS)

  1. demo租戶(hù)和用戶(hù)的身份,請(qǐng)求一條authentication token:

$ keystone --os-tenant-name demo --os-username demo --os-password DEMO_PASS \
--os-auth-url http://controller:35357/v2.0 token-get
+-----------+----------------------------------+
|  Property |              Value               |
+-----------+----------------------------------+
|  expires  |       2015-11-24T13:06:04Z       |
|     id    | 9eca8d1dff374c2da6f358e85f0b60af |
| tenant_id | d1f7caccc65840b68258997a759da07f |
|  user_id  | 812116bcca5b4a01981669fcef09ee11 |
+-----------+----------------------------------+```
DEMO_PASS為之前設(shè)定的```
demo```用戶(hù)密碼。

7. 以```
demo```租戶(hù)和用戶(hù)的身份,驗(yàn)證無(wú)法執(zhí)行```
admin```專(zhuān)屬命令:

$ keystone --os-tenant-name demo --os-username demo --os-password DEMO_PASS
--os-auth-url http://controller:35357/v2.0 user-list You are not authorized to perform the requested action: admin_required (HTTP 403)```

創(chuàng)建OpenStack客戶(hù)端環(huán)境腳本

創(chuàng)建腳本

  1. 創(chuàng)建文件 admin-openrc.sh,并輸入以下內(nèi)容:

export OS_TENANT_NAME=admin
export OS_USERNAME=admin
export OS_PASSWORD=ADMIN_PASS
export OS_AUTH_URL=http://controller:35357/v2.0```
ADMIN_PASS為之前設(shè)定的```
admin```用戶(hù)密碼。

2. 創(chuàng)建文件```
demo-openrc.sh```,并輸入以下內(nèi)容:

export OS_TENANT_NAME=demo export OS_USERNAME=demo export OS_PASSWORD=DEMO_PASS export OS_AUTH_URL=http://controller:5000/v2.0 DEMO_PASS為之前設(shè)定的 demo```用戶(hù)密碼。

**注:**端口35357是為擁有管理權(quán)限的操作準(zhǔn)備的,端口5000是為普通用戶(hù)操作準(zhǔn)備的。

啟動(dòng)客戶(hù)端環(huán)境腳本

根據(jù)不同租戶(hù)和用戶(hù),執(zhí)行 $ source admin-openrc.sh $ source demo-openrc.sh

安裝時(shí)出現(xiàn)的問(wèn)題及解決方法

安裝完keystone后,創(chuàng)建"Admin Tenant"時(shí)出現(xiàn)“Unable to establish connection to http://controller:35357/v2.0/tenants”的錯(cuò)誤,可能是安裝keystone時(shí)未完整安裝,重新安裝并更新。在驗(yàn)證步驟時(shí)出現(xiàn)(HTTP 401),有可能是密碼等配置錯(cuò)誤,導(dǎo)致訪(fǎng)問(wèn)權(quán)限受限,重新檢查配置文件和各個(gè)用戶(hù)的密碼情況。

關(guān)于juno版OpenStack部署中如何添加認(rèn)證服務(wù)就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI