1、keystone簡介
python
Keystone(OpenStack Identity Service)是OpenStack框架中,負責身份驗證、服務規則和服務令牌的功能, 它實現了OpenStack的Identity API。Keystone相似一個服務總線, 或者說是整個Openstack框架的註冊表, 其餘服務經過keystone來註冊其服務的Endpoint(服務訪問的URL),任何服務之間相互的調用, 須要通過Keystone的身份驗證, 來得到目標服務的Endpoint來找到目標服務。mysql
2、keystone基本概念介紹sql
1.User --> User即用戶,他們表明能夠經過keystone進行訪問的人或程序。Users經過認證信息(credentials,如密碼、API Keys等)進行驗證。數據庫
2.Tenant --> Tenant即租戶,它是各個服務中的一些能夠訪問的資源集合。例如,在Nova中一個tenant能夠是一些機器,在Swift和Glance中一個tenant能夠是一些鏡像存儲,在Quantum中一個tenant能夠是一些網絡資源。Users默認的老是綁定到某些tenant上。swift
3.Role --> Role即角色,Roles表明一組用戶能夠訪問的資源權限,例如Nova中的虛擬機、Glance中的鏡像。Users能夠被添加到任意一個全局的 或 租戶內的角色中。在全局的role中,用戶的role權限做用於全部的租戶,便可以對全部的租戶執行role規定的權限;在租戶內的role中,用戶僅能在當前租戶內執行role規定的權限。網絡
4.Service --> Service即服務,如Nova、Glance、Swift。根據前三個概念(User,Tenant和Role)一個服務能夠確認當前用戶是否具備訪問其資源的權限。可是當一個user嘗試着訪問其租戶內的service時,他必須知道這個service是否存在以及如何訪問這個service,這裏一般使用一些不一樣的名稱表示不一樣的服務。在上文中談到的Role,實際上也是能夠綁定到某個service的。例如,當swift須要一個管理員權限的訪問進行對象建立時,對於相同的role咱們並不必定也須要對nova進行管理員權限的訪問。爲了實現這個目標,咱們應該建立兩個獨立的管理員role,一個綁定到swift,另外一個綁定到nova,從而實現對swift進行管理員權限訪問不會影響到Nova或其餘服務。框架
5.Endpoint --> Endpoint即爲端點,咱們若是須要訪問一個服務,則必須知道他的endpoint。所以,在keystone中包含一個endpoint模板(endpoint template,在安裝keystone的時候咱們能夠在conf文件夾下看到這個文件),這個模板提供了全部存在的服務endpoints信息。一個endpoint template包含一個URLs列表,列表中的每一個URL都對應一個服務實例的訪問地址,而且具備public、private和admin這三種權限。public url能夠被全局訪問(如http://compute.example.com),private url只能被局域網訪問(如http://compute.example.local),admin url被從常規的訪問中分離。curl
3、keystone流程ide
4、keystone安裝性能
1.在控制節點上安裝OpenStack身份認證服務和python-keystoneclient
# yum install -y openstack-keystone python-keystoneclient
2.身份認證服務須要用數據庫來存儲相關信息,因此要在配置文件中指定當地數據庫的位置。
# openstack-config --set /etc/keystone/keystone.conf database connection mysql://keystone:keystone@controller/keystone
3.用root帳戶登陸數據庫,建立keystone用戶和相關數據庫並授予訪問權限
mysql> CREATE DATABASE keystone;
mysql> GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' IDENTIFIED BY 'keystone';
mysql> GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' IDENTIFIED BY 'keystone';
mysql> FLUSH PRIVILEGES;
mysql> exit;
4.填充keystone數據庫
# su -s /bin/sh -c "keystone-manage db_sync" keystone
5.定義一個受權令牌看成在身份服務和其餘OpenStack服務的共享祕鑰,使用openssl來生成一個隨機令牌,並將其存儲到配置文件。
# ADMIN_TOKEN=$(openssl rand -hex 10)
# echo $ADMIN_TOKEN > token_key
# openstack-config --set /etc/keystone/keystone.conf DEFAULT admin_token $ADMIN_TOKEN
6.默認狀況下,keystone使用PKI token。建立簽名祕鑰和證書以及限制對生成的數據訪問
# keystone-manage pki_setup --keystone-user keystone --keystone-group keystone
# chown -R keystone:keystone /etc/keystone/ssl
# chmod -R o-rwx /etc/keystone/ssl
7.啓動身份認證服務和配置開機啓動
# service openstack-keystone start
# chkconfig openstack-keystone on
8.默認狀況下,身份認證服務會無限期存儲數據庫中過時的令牌,過時的令牌將大幅增長數據庫的大小和可能會減小服務的性能,特別是在測試環境或者有限的資源下的狀況下。咱們建議配置一個週期性任務來清除每小時過時的令牌
# (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/keystone
5、建立users,tenant,role
在安裝完身份認證服務後,咱們得設置user、tenant、role進行身份驗證;這些都是用於容許訪問服務和端點。
一般,你將使用一個用戶名和密碼進行身份驗證服務,可是,因爲你尚未建立任何用戶,因此你必須使用受權令牌(即以前咱們保存在token_key文件中隨機字符)。你能夠經過--os-token選項或者設置OS_SERVICE_TOKEN環境變量來成功使用keystone命令。設置OS_SERVICE_TOKEN以及OS_SERVICE_ENDPOINT指定身份認證服務正在運行。ADMIN_TOKEN換成你的受權令牌:
# export OS_SERVICE_TOKEN=$ADMIN_TOKEN
# export OS_SERVICE_ENDPOINT=http://controller:35357/v2.0
1.建立一個管理用戶
根據如下步驟建立管理用戶、角色、租戶,你將使用這些帳戶跟OpenStack雲進行交互。
默認狀況下,身份認證服務會建立一個特殊的_member_角色,openstack dashboard將會自動向用戶授予訪問這個角色的權限。你要給admin用戶訪問權限除了admin role外。
(1)建立admin用戶
# keystone user-create --name=admin --pass=openstack --email=353764437@qq.com
(2)建立admin角色
# keystone role-create --name=admin
(3)建立admin租戶
# keystone tenant-create --name=admin --description="Admin Tenant"
(4)利用user-role-add選項將admin用戶、admin角色、admin租戶鏈接在一塊兒
# keystone user-role-add --user=admin --tenant=admin --role=admin
(5)鏈接admin用戶、_member_角色、admin租戶
# keystone user-role-add --user=admin --role=_member_ --tenant=admin
2.建立一個普通用戶
根據如下步驟建立一個普通用戶、租戶,並將它們與_member_角色鏈接。你將使用該帳戶做爲非管理員在每日中與openstack雲交互。你還能夠重複這個過程來建立額外的雲用戶並設置不一樣的用戶名和密碼。當建立這些用戶的時候跳過建立承租者步驟。
(1)建立demo用戶
# keystone user-create --name=demo --pass=openstack --email=353764437@qq.com
(2)建立demo租戶
# keystone tenant-create --name=demo --description="Demo Tenant"
(3)鏈接demo用戶、_member_角色和demo租戶
# keystone user-role-add --user=demo --role=_member_ --tenant=demo
3.建立一個服務租戶
openstack服務還須要一個用戶名、租戶和角色訪問其餘的openstack服務。基本安裝中,openstack服務一般共享一個租戶命名的服務。
(1)建立服務租戶
# keystone tenant-create --name=service --description="Service Tenant"
6、定義服務和API端點
(1)爲身份驗證建立一個服務條目
# keystone service-create --name=keystone --type=identity --description="OpenStack Identity"
(2)爲身份驗證服務指定一個API端點經過返回的服務ID,當你指定一個端點,你必須爲public API,internal API和admin API提供URLs。在該指導中,使用controller主機名。注意,身份驗證服務爲管理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
7、驗證身份驗證的安裝
(1)爲了驗證身份服務的安裝和配置是否正確,清除OS_SERVICE_TOKEN和OS_SERVICE_ENDPOINT環境變量的值:
# unset OS_SERVICE_TOKEN OS_SERVICE_ENDPOINT
(2)你如今可使用普通用戶基於名稱的身份驗證。使用admin用戶和你爲改帳戶設置的密碼來請求身份驗證令牌
# keystone --os-username=admin --os-password=openstack --os-auth-url=http://controller:35357/v2.0 token-get
(3)驗證受權行爲。爲此,驗證受權的租戶
# keystone --os-username=admin --os-password=openstack \
--os-tenant-name=admin --os-auth-url=http://controller:35357/v2.0 \
token-get
(4)你能夠在操做系統中設置--os-*變量來簡化命令行的用法。爲管理憑證和管理端點,建立admin-openrc.sh文件,內容以下:
export OS_USERNAME=admin
export OS_PASSWORD=openstack
export OS_TENANT_NAME=admin
export OS_AUTH_URL=http://controller:35357/v2.0
(5)source該文件使環境變量生效
# source admin-openrc.sh
(6)驗證你的admin-openrc.sh文件配置是否正確,運行同樣的命令除了--os-*參數。
# keystone token-get
命令返回一個令牌並指定的ID用戶,則證實你配置的環境變量正確
(7)驗證你的管理員帳戶已受權執行管理命令
# keystone user-list
# keystone user-role-list --user admin --tenant admin
注意:上面這張圖少截了前面id部分
至此,身份驗證服務安裝完畢!