本博客來自於https://www.voidking.com/dev-ubuntu16-manual-openstack-keystone/
趕緊做筆記
keystone簡介
OpenStack身份識別服務集成了身份驗證,授權和服務目錄。
身份服務通常是用戶與之交互的第一個服務。一旦通過身份驗證,終端用戶就可以使用他們的身份訪問其他OpenStack服務。同樣,其他OpenStack服務利用身份服務來確保用戶是他們所說的人,並發現其他服務的位置。身份識別服務還可以與一些外部用戶管理系統(如LDAP)集成。
用戶和服務可以通過使用由身份服務管理的服務目錄來定位其他服務。顧名思義,服務目錄是OpenStack部署中可用服務的集合。每個服務可以有一個或多個端點,每個端點可以是以下三種類型之一:admin,internal或public。在生產環境中,出於安全原因,不同類型的終端類型可能會駐留在暴露給不同類型用戶的單獨網絡中。例如,公共API網絡可能從互聯網上可見,因此客戶可以管理他們的雲。管理API網絡可能僅限於管理雲基礎架構的組織中的運營商。內部API網絡可能僅限於包含OpenStack服務的主機。另外,OpenStack支持多個區域的可伸縮性。為簡單起見,本指南針對所有端點類型和默認的RegionOne區域使用管理網絡。在身份服務中創建的區域,服務和端點一起構成部署的服務目錄。部署中的每個OpenStack服務都需要一個服務條目,並在Identity服務中存儲相應的端點。這可以在Identity Service安裝和配置完成后完成。
身份服務包含以下組件:
服務器
集中式服務器使用RESTful接口提供認證和授權服務。
驅動程序
驅動程序或服務后端集成到中央服務器。它們用於訪問OpenStack外部存儲庫中的身份信息,並且可能已存在於部署OpenStack的基礎架構中(例如,SQL數據庫或LDAP服務器)。
模塊
中間件模塊運行在使用Identity服務的OpenStack組件的地址空間中。這些模塊攔截服務請求,提取用戶憑據並將其發送到中央服務器進行授權。中間件模塊和OpenStack組件之間的集成使用Python Web服務器網關接口。
安裝記錄
本節記錄如何在控制節點上安裝和配置代號為keystone的OpenStack Identity服務。出於可伸縮性的目的,此配置會部署Fernet令牌和Apache HTTP服務器來處理請求。
root用戶
為了避免權限問題,建議切換到root用戶進行操作(否則要加很多sudo)。sudo -i
數據庫配置
1、登錄mariadbmysql -uroot -p
,密碼為openstack。
2、創建keystone數據庫CREATE DATABASE keystone;
3、創建keystone用戶,密碼為openstack,並授權訪問keystone數據庫GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' IDENTIFIED BY 'openstack';
GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' IDENTIFIED BY 'openstack';
4、退出exit;
5、測試登錄
mysql -h localhost -ukeystone -p
mysql -h controller -ukeystone -p
安裝組件
1、安裝keystone、apache2和libapache2-mod-wsgiapt -y install keystone apache2 libapache2-mod-wsgi
2、vim /etc/keystone/keystone.conf
編輯配置:
1 |
# line 606: uncomment and specify Memcache Server |
3、生成keystone數據庫的數據
su -s /bin/bash keystone -c "keystone-manage db_sync"
(非root用戶執行sudo keystone-manage db_sync
)
查看日志:tail /var/log/keystone/keystone-manage.log
,看到done說明執行成功。
不放心的話,可以登錄mariadb查看keystone數據庫的數據,有數據的話說明執行成功。
如果在日志中看到報錯:
1 |
2018-06-30 18:37:40.845 4964 WARNING oslo_db.sqlalchemy.engines [-] SQL connection failed. 6 attempts left.: DBConnectionError: (pymysql.err.OperationalError) (2003, "Can't connect to MySQL server on 'controller' ([Errno 111] Connection refused)") (Background on this error at: http://sqlalche.me/e/e3q8) |
這是因為,mysql可能綁定了IP。
執行netstat -an | grep 3306
查看,如果只看到127.0.0.1,那么說明確實綁定了IP。
解決辦法是編輯50-server.cnf,把bind-address = 127.0.0.1
注釋掉,然后重啟mariadb,重新執行命令。
解決辦法二:若 keystone 數據庫同步不成功,可以查看 log 文件找到故障原因。若 utf8 故障可以用下列方法:
(1)修改/etc/mysql/mariadb.conf.d/目錄下的文件“50-client.cnf 50-mysql-clients.cnf 50-server.cnf”文件:
將 其 中 的 utf8mb4
修 改 為 utf8 (2)mariadb 修改允許遠程訪問
Sed-is/127.0.0.1/0.0.0.0/g'/etc/mysql/mariadb.conf.d/50-server.cnf
4、初始化Fernet密鑰存儲庫keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone
keystone-manage credential_setup --keystone-user keystone --keystone-group keystone
5、引導身份服務,管理密碼為openstack
1 |
keystone-manage bootstrap --bootstrap-password openstack \ |
配置apache
1、vim /etc/apache2/apache2.conf
,添加:
1 |
|
2、重啟apacheservice apache2 restart
3、新建環境變量配置keystonerc
1 |
export OS_USERNAME=admin |
4、使環境變量生效source keystonerc
5、測試echo $OS_USERNAME
使用記錄
創建域
Identity服務為每個OpenStack服務提供身份驗證服務。身份驗證服務使用域,項目,用戶和角色的組合。
1、引導身份服務步驟中已存在“默認”域,但創建新域的正式方法是:openstack domain create --description "An Example Domain" example
虛擬機中執行成功,但是實體機報錯:
1 |
Failed to discover available identity versions when contacting http://controller:5000/v3. Attempting to parse version from URL. |
netstat -an | grep 5000
,發現5000端口服務已經啟動。
查看keystone日志,沒有新的內容,說明根本沒有連接成功。
嘗試了重新導入數據,重新安裝數據庫,都失敗了。
如果看到同樣的錯誤,那么極有可能之前安裝devstack遺留的問題,最終重裝系統后再次安裝,執行成功。
2、在default域下創建service項目:openstack project create --domain default --description "Service Project" service
3、常規(非管理員)任務應使用非特權項目和用戶。創建demo項目:openstack project create --domain default --description "Demo Project" demo
4、創建demo用戶:openstack user create --domain default --password-prompt demo
按照提示設置密碼為openstack。
5、創建user角色:openstack role create user
6、將user角色添加到demo項目和demo用戶openstack role add --project demo --user demo user
7、查看域、項目、角色、用戶
1 |
openstack domain list |
驗證操作
在安裝其他服務之前驗證Identity服務的操作。
1、取消設置臨時OS_AUTH_URL和OS_PASSWORD環境變量:unset OS_AUTH_URL OS_PASSWORD
2、作為admin用戶,請求身份驗證令牌:
1 |
openstack --os-auth-url http://controller:5000/v3 \ |
3、作為demo用戶,請求身份驗證令牌:
1 |
openstack --os-auth-url http://controller:5000/v3 \ |
創建OpenStack客戶端環境腳本
前面幾節使用了環境變量和命令選項的組合,通過openstack客戶端與Identity服務進行交互。為了提高客戶端操作的效率,OpenStack支持簡單的客戶端環境腳本,也稱為OpenRC文件。這些腳本通常包含所有客戶端的常用選項,但也支持獨特的選項。
創建腳本
為admin和demo項目和用戶創建客戶端環境腳本。接下來引用這些腳本來加載客戶端操作的適當憑據。這些腳本在控制節點和計算節點都適用。
1、創建並編輯admin-openrc文件並添加以下內容:
1 |
export OS_PROJECT_DOMAIN_NAME=Default |
2、創建並編輯demo-openrc文件並添加以下內容:
1 |
export OS_PROJECT_DOMAIN_NAME=Default |
使用腳本
要將客戶端作為特定項目和用戶運行,只需在運行它們之前加載關聯的客戶端環境腳本即可。例如:
1、加載admin-openrc文件以使用Identity服務的位置以及管理項目和用戶憑據填充環境變量:. admin-openrc
或者source admin-openrc
2、請求身份驗證令牌:openstack token issue