您好,登錄后才能下訂單哦!
OpenStack 認證服務 KeyStone [二]
openstack
時間:2016年11月23日
Keystone作用:
1.用戶與認證:用戶權限與用戶行為跟蹤;
2.服務目錄:提供一個服務目錄,包括所有服務項和相關Api的斷點
3.SOA相關知識
Keystone主要兩大功能用戶認證
服務目錄
(相當于一個注冊中心)
User
:用戶
它是用一個數字代表使用openstack云服務的一個人、系統、或服務。身份驗證服務將會驗證傳入的由用戶聲明將調用的請求
一個租戶可以有多個用戶
一個用戶可以屬于一個或多個租戶
用戶對租戶和操作權限由用戶在租戶中承擔的角色來決定。
Project
:項目
它是各個服務中的一些可以訪問的資源集合或者說叫資源組
。它是一個容器
,用于組織和隔離資源,或標識對象。
Token
:令牌
Role
:角色
代表一組用戶可以訪問的資源權限,例如Nova
中的虛擬機、Glance
中的鏡像
Service
:服務
Service即服務,如Nova、Glance、Swift。根據前三個概念(User,Tenant和Role)一個服務可以確認當前用戶是否具有訪問其資源的權限。但是當一個user嘗試著訪問其租戶內的service時,他必須知道這個service是否存在以及如何訪問這個service。
Endpoint
:端點
Endpoint翻譯為“端點”,我們可以理解它是一個服務暴露出來的訪問點,如果需要訪問一個服務,則必須知道他的endpoint。Endpoint的每個URL都對應一個服務實例的訪問地址,并且具有public、orivate和admin這三種權限。pubic url可以完全被全局訪問,private url只能被局域網訪問,admin url被從常規的訪問中分離。
安裝Openstack驗證服務KeyStone
[root@linux-node1 ~]# yum install -y openstack-keystone httpd mod_wsgi memcached python-memcached
提示: wsgi
是python一個cgi
的接口(keystone需要使用httpd
來運行)
注意!
編輯文件/etc/keystone/keystone.conf
,我們管理keystone
只需要修改keystone的配置文件即可
在配置文件里面以[xxx
]里面的內容叫做配置欄目(類似于mysql配置文件[mysqld]下面)
在[DEFAULT]
部分,定義初始管理令牌的值:
我們使用openssl
生成一個隨機值
[root@linux-node1 ~]# openssl rand -hex 101b0abfc7e9a314a0fd7f[root@linux-node1 ~]# vim /etc/keystone/keystone.conf[DEFAULT]admin_token = 1b0abfc7e9a314a0fd7f
keystone默認
沒有用戶,需要進行創建用戶。這樣我們在配置文件中加入admin_token
,在沒有用戶的情況下可以使用admin_token進行訪問。還可以設置不用用戶名和密碼。簡單來說admin_token
就是初始化時候超級管理員的用戶
在[database]
部分,配置數據庫訪問:
[database]connection = mysql+pymysql://keystone:keystone@192.168.56.11/keystone
用戶名:密碼:數據庫地址:數據庫名稱
因為我們需要將用戶密碼保存到數據庫中,所以我們要配置數據庫
配置Fernet UUID令牌的提供者
提供令牌有四種方式[fernet|pkiz|pki|uuid]
默認是uuid
[token]provider = fernetdriver = memcache
默認是存儲在sql
中,我們需要將它修改為memcache
提示:關于為什么選擇fernet
我們可以參考下方文章
Keystone幾種token生成的方式分析
http://blog.csdn.net/miss_yang_cloud/article/details/49633719
配置memcached
[memcache]servers = 192.168.56.11:11211
提示:官方默認是localhost
,但是如果是正式生產環境可能在另一臺服務器上
總結keystone有以下配置
[root@linux-node1 ~]# grep '^[a-Z]' /etc/keystone/keystone.conf[DEFAULT]admin_token = 1b0abfc7e9a314a0fd7f[database]connection = mysql +pymysql://keystone:keystone@192.168.56.11/keystone[memcached]servers = 192.168.56.11:11211[token]provider = fernetdriver = memcache
初始化數據庫
[root@linux-node1 ~]# su -s /bin/sh -c "keystone-manage db_sync" keystone
會自動找到keystone
配置文件里的mysql
連接,來幫我們創建數據庫中的表
問題:我們為什么要使用keystone用戶去同步數據庫呢?
因為同步數據庫會在/var/log/keystone
去寫一個日志,如果使用root
權限,keystone
啟動時會讀取這個日志,那么將無法進行讀取出現啟動錯誤的情況
檢查表是否創建成功
[root@linux-node1 ~]# mysql -h 192.168.56.11 -ukeystone -pkeystone -e "use keystone;show tables;"
溫馨提示:如果查看表的時候發現沒有,那么我們就應該排查/var/log/keystone.log
在群里問問題必須自己先看了沒有問題在進行提問
初始化Fernet keys;
創建相關的證書
[root@linux-node1 ~]# keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone
執行完命令之后會在/etc/keystone
下生成fernet-keys
目錄,它的權限是keystone里面存放這一些相關證書
提示:我們要注意/etc/keystone/keystone.conf
文件的權限
啟動memcached并設置開啟激動
[root@linux-node1 ~]# systemctl start memcached.service [root@linux-node1 ~]# systemctl enable memcached.service Created symlink from /etc/systemd/system/multi-user.target.wants/memcached.service to /usr/lib/systemd/system/memcached.service.
檢查
我們需要檢查是否有11211
memcached
的端口
查看配置文件
[root@linux-node1 ~]# cat /etc/sysconfig/memcachedPORT="11211" #端口號USER="memcached" #用戶MAXCONN="1024" #最大連接數CACHESIZE="64" #大小64兆OPTIONS=""
配置Http
因為我們當時是安裝了一個連接httpd
用的一個api
,簡單的來說我們要通過apache
來啟動keystone
配置/etc/httpd/conf/httpd.conf
文件,配置ServerName
選項為控制節點,如果我們不修改servername那么keystone將無法啟動
[root@linux-node1 ~]# vim /etc/httpd/conf/httpd.confServerName 192.168.56.11:80
創建文件/etc/httod/conf.d/wsgi-keystone.conf
[root@linux-node1 ~]# cat /etc/httpd/conf.d/wsgi-keystone.confListen 5000Listen 35357<VirtualHost *:5000> WSGIDaemonProcess keystone-public processes=5 threads=1 user=keystone group=keystone display-name=%{GROUP} WSGIProcessGroup keystone-public WSGIScriptAlias / /usr/bin/keystone-wsgi-public WSGIApplicationGroup %{GLOBAL} WSGIPassAuthorization On ErrorLogFormat "%{cu}t %M" ErrorLog /var/log/httpd/keystone-error.log CustomLog /var/log/httpd/keystone-access.log combined <Directory /usr/bin> Require all granted </Directory></VirtualHost><VirtualHost *:35357> WSGIDaemonProcess keystone-admin processes=5 threads=1 user=keystone group=keystone display-name=%{GROUP} WSGIProcessGroup keystone-admin WSGIScriptAlias / /usr/bin/keystone-wsgi-admin WSGIApplicationGroup %{GLOBAL} WSGIPassAuthorization On ErrorLogFormat "%{cu}t %M" ErrorLog /var/log/httpd/keystone-error.log CustomLog /var/log/httpd/keystone-access.log combined <Directory /usr/bin> Require all granted </Directory></VirtualHost>
啟動并設置開機啟動
[root@linux-node1 ~]# systemctl enable httpd.service Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service.[root@linux-node1 ~]# systemctl start httpd.service
檢查
如果沒有啟動我們要查看/var/log/keystone/keystone.log
并需要開啟debug日志
開啟debug
日志如下:
[root@linux-node1 ~]# vim /etc/keystone/keystone.conf#debug = true將false修改為true將開啟
排錯方案如下:如果服務出現異常,首先先打開debug 然后重啟服務 查看日志
以上就是keystone安裝,下面我們還需要設置keystone
因為我們要連接到keystone所以需要創建keystone用戶,keystone還需要自己進行注冊服務
連接keystone有倆種方式:
一種是使用keystone –os-username --os-password
另一種是使用環境變量
3
個環境變量1.設置admin_token環境變量
[root@linux-node1 ~]# export OS_TOKEN=1b0abfc7e9a314a0fd7fadmin_token后面的值是我們在keystone.conf里面寫的
2.設置連接到keystone的地址(配置端點URL
)
[root@linux-node1 ~]# export OS_URL=http://192.168.56.11:35357/v3設置keystone的admin(35357)端口 v3是用第三個版本
3.配置認證API版本
[root@linux-node1 ~]# export OS_IDENTITY_API_VERSION=3
通過admin
的token
設置環境變量進行操作::
[root@linux-host1 ~]# export OS_TOKEN=1b0abfc7e9a314a0fd7f #keystone配置文件中定義的token的值[root@linux-host1 ~]# export OS_URL=http://192.168.56.11:35357/v3 #keystone地址、端口和驗證版本,35357是keystone的admin端口,5000是public端口[root@linux-host1 ~]# export OS_IDENTITY_API_VERSION=3 #配置API版本的環境變量
創建default
域
[root@linux-node1 ~]# openstack domain create --description "Default Domain" Default+-------------+----------------------------------+| Field | Value |+-------------+----------------------------------+| description | Default Domain || enabled | True || id | 8af40091347e4b109d44feae01fc4356 || name | Default |+-------------+----------------------------------+--description是域的描述,最后一個是域的名稱
提示:只有在環境變量下才可以創建這個域,并且生成的ID
是隨機的
為了進行管理操作,創建管理的項目
、用戶
和角色
創建admin項目 相當于管理的,可以管理所有的云主機
[root@linux-node1 ~]# openstack project create --domain default --description "Admin Project" admin+-------------+----------------------------------+| Field | Value |+-------------+----------------------------------+| description | Admin Project || domain_id | 8af40091347e4b109d44feae01fc4356 || enabled | True || id | 026a58f98402437fa95ef4a21fbd4d1a || is_domain | False || name | admin || parent_id | 8af40091347e4b109d44feae01fc4356 |+-------------+----------------------------------+#命令格式為openstack project --domain 域 --description "描述" 項目名
創建admin用戶
密碼我們設置為admin
[root@linux-node1 ~]# openstack user create --domain default --password-prompt adminUser Password:Repeat User Password:+-----------+----------------------------------+| Field | Value |+-----------+----------------------------------+| domain_id | 8af40091347e4b109d44feae01fc4356 || enabled | True || id | a809e8be52c84732aecd8ebb93481d65 || name | admin |+-----------+----------------------------------+
提示:密碼請設置跟我一致!
創建admin角色
角色就是在一個項目里面有多個角色,我們只能創建在配置文件中設置的角色。配置路徑/etc/keystone/policy.json
[root@linux-node1 ~]# openstack role create admin+-----------+----------------------------------+| Field | Value |+-----------+----------------------------------+| domain_id | None || id | c934dad680e142d09c434e2301b2a9bf || name | admin |+-----------+----------------------------------+
添加admin角色到admin項目和用戶上
把admin
用戶添加到admin
項目并授權admin
的角色,角色就是admin
權利的集合
[root@linux-node1 ~]# openstack role add --project admin --user admin admin
小結:前三個環境變量是為了連接到keystone
上,后面的就是為了創建域
、項目
、用戶
和角色
,給域、項目、用戶和角色做了一個關聯
創建一個demo項目
demo項目就類似于我們去阿里云上注冊了一個賬號,基本流程跟創建admin是一樣的
[root@linux-node1 ~]# openstack project create --domain default --description "Demo Project" demo+-------------+----------------------------------+| Field | Value |+-------------+----------------------------------+| description | Demo Project || domain_id | 8af40091347e4b109d44feae01fc4356 || enabled | True || id | ff5398ee1b2e4d00bafd57f82dc150e6 || is_domain | False || name | demo || parent_id | 8af40091347e4b109d44feae01fc4356 |+-------------+----------------------------------+
創建demo用戶
[root@linux-node1 ~]# openstack user create --domain default --password-prompt demoUser Password:Repeat User Password:+-----------+----------------------------------+| Field | Value |+-----------+----------------------------------+| domain_id | 8af40091347e4b109d44feae01fc4356 || enabled | True || id | a78ec26501374df4a574bd3f8153d67f || name | demo |+-----------+----------------------------------+密碼設置為demo
創建角色User
[root@linux-node1 ~]# openstack role create user+-----------+----------------------------------+| Field | Value |+-----------+----------------------------------+| domain_id | None || id | 4161dec8714f468f832a55a6ec2abb9e || name | user |+-----------+----------------------------------+提示:角色一共就只有兩種,一個是admin另一個就是user了
授權
[root@linux-node1 ~]# openstack role add --project demo --user demo user把demo用戶添加到demo項目并授予user角色
創建一個service項目
我們各個服務之間需要去訪問keystone
,那么訪問keystone就需要做認證,就需要我們創建用戶,這個用戶就要屬于一個項目。所以我們要先創建一個server項目然后我們還需要給每個項目單獨創建一個用戶
[root@linux-node1 ~]# openstack project create --domain default --description "Demo Project" service+-------------+----------------------------------+| Field | Value |+-------------+----------------------------------+| description | Demo Project || domain_id | 8af40091347e4b109d44feae01fc4356 || enabled | True || id | 1c2419156c1b4214b53c50f3f075aeb3 || is_domain | False || name | service || parent_id | 8af40091347e4b109d44feae01fc4356 |+-------------+----------------------------------+
提示:我們創建server
項目是給服務用戶用的,現在我們就需要創建openstack組件
所有的服務的用戶,openstack
官方文檔是沒操作一個服務就創建一個用戶,我們在這直接創建完所有用戶
創建glance用戶
[root@linux-node1 ~]# openstack user create --domain default --password-prompt glanceUser Password:Repeat User Password:+-----------+----------------------------------+| Field | Value |+-----------+----------------------------------+| domain_id | 8af40091347e4b109d44feae01fc4356 || enabled | True || id | c57d19c6b3784c53b40c48013c11530a || name | glance |+-----------+----------------------------------+授權[root@linux-node1 ~]# openstack role add --project service --user glance admin
創建Nova用戶
[root@linux-node1 ~]# openstack user create --domain default --password-prompt novaUser Password:Repeat User Password:+-----------+----------------------------------+| Field | Value |+-----------+----------------------------------+| domain_id | 8af40091347e4b109d44feae01fc4356 || enabled | True || id | c9a1b50f0b1c42b4a218b2e8dc43078c || name | nova |+-----------+----------------------------------+[root@linux-node1 ~]# openstack role add --project service --user nova admin
創建neutron用戶并授權
[root@linux-node1 ~]# openstack user create --domain default --password-prompt neutronUser Password:Repeat User Password:+-----------+----------------------------------+| Field | Value |+-----------+----------------------------------+| domain_id | 8af40091347e4b109d44feae01fc4356 || enabled | True || id | 99939909b95f4d8aa2ad59622ae10432 || name | neutron |+-----------+----------------------------------+[root@linux-node1 ~]# openstack role add --project service --user neutron admin
創建glance用戶并授權
[root@linux-host1 ~]# openstack user create --domain default --password-prompt glanceUser Password:Repeat User Password:+-----------+----------------------------------+| Field | Value |+-----------+----------------------------------+| domain_id | f5282392070044e18b5e93299ee15b5a || enabled | True || id | 4ee18653aa5b47f293fdf8ed658b221c || name | glance |+-----------+----------------------------------+[root@linux-node1 ~]# openstack role add --project service --user glance admin
溫馨提示:如果出現錯誤可以使用以下命令進行排錯
用戶相關設置:openstack user –help
[root@linux-node1 ~]# openstack user --helpCommand "user" matches: user create user delete user list user password set user set user show
服務相關設置:
[root@linux-node1 ~]# openstack service --helpCommand "service" matches: service create service delete service list service provider create service provider delete service provider list service provider set service provider show service set service showopenstack project list查看是否有項目openstack user list 查看是否有用戶
以上就是keystone的用戶部署
keystone還有一個功能是服務注冊
,我們需要將服務注冊到上面來
創建服務
[root@linux-node1 ~]# openstack service create --name keystone --description "OpenStack Identity" identity+-------------+----------------------------------+| Field | Value |+-------------+----------------------------------+| description | OpenStack Identity || enabled | True || id | 22e86b1d085d46d58b5db1aae7f8d26d || name | keystone || type | identity |+-------------+----------------------------------+其他服務過來找的時候就會查找是否含有類似為identity
創建endpoint
前文介紹: Endpoint
翻譯為“端點
”,我們可以理解它是一個服務暴露出來的訪問點,如果需要訪問一個服務,則必須知道他的endpoint。Endpoint的每個URL都對應一個服務實例的訪問地址,并且具有public、orivate和admin
這三種權限。pubic url
可以完全被全局訪問,private url
只能被局域網訪問,admin url
被從常規的訪問中分離。
創建公有端點(public)
[root@linux-node1 ~]# openstack endpoint create --region RegionOne identity public http://192.168.56.11:5000/v3+--------------+----------------------------------+| Field | Value |+--------------+----------------------------------+| enabled | True || id | 041e59113fb84bc1955b4853719e5bdf || interface | public || region | RegionOne || region_id | RegionOne || service_id | 22e86b1d085d46d58b5db1aae7f8d26d || service_name | keystone || service_type | identity || url | http://192.168.56.11:5000/v3 |+--------------+----------------------------------+
創建私有端點(internal)
[root@linux-node1 ~]# openstack endpoint create --region RegionOne identity internal http://192.168.56.11:5000/v3+--------------+----------------------------------+| Field | Value |+--------------+----------------------------------+| enabled | True || id | 5dbf154c482144848a45314c38d86751 || interface | internal || region | RegionOne || region_id | RegionOne || service_id | 22e86b1d085d46d58b5db1aae7f8d26d || service_name | keystone || service_type | identity || url | http://192.168.56.11:5000/v3 |+--------------+----------------------------------+
創建admin
我們需要將端口改成35357
,因為keystone
比較特殊,需要單獨一個端口
[root@linux-node1 ~]# openstack endpoint create --region RegionOne identity admin http://192.168.56.11:35357/v3+--------------+----------------------------------+| Field | Value |+--------------+----------------------------------+| enabled | True || id | 30138e420b5b4625a9c8ee2bca56b2d5 || interface | admin || region | RegionOne || region_id | RegionOne || service_id | 22e86b1d085d46d58b5db1aae7f8d26d || service_name | keystone || service_type | identity || url | http://192.168.56.11:35357/v3 |+--------------+----------------------------------+溫馨提示:如果一不小心輸入錯了,需要將三個端點刪除從新創建
檢查keystone是否安裝成功
測試之前我們需要刪除刪除環境變量unset OS_TOKEN OS_URL
賬號是admin
,密碼我們設置的是admin
[root@linux-node1 ~]# openstack --os-auth-url http://192.168.56.11:35357/v3 \> --os-project-domain-name default --os-user-domain-name default \> --os-project-name admin --os-username admin token issuePassword: +------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+| Field | Value |+------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+| expires | 2016-11-17T04:51:30.580499Z || id | gAAAAABYLSlCWrN1SZuiZsXNPLo5-JosU1wrgfiwxHBTYPFqfStOZNa8jFSyYhMSPeeC5Fj1qHTJ9ct67IzqjhFcpWrsj7dkRPajxh7NbUAoJsM7aeRJTgWCx7oWQgoR5VqcItnu0ru_45we71BG_mrd9fJxRinPbbDbjEMkpGSN || | XJeOyhSCYrA || project_id | 026a58f98402437fa95ef4a21fbd4d1a || user_id | a809e8be52c84732aecd8ebb93481d65 |+------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
用這個用戶名和密碼獲取一個token
,如果可以獲取到說明正常,如果沒有獲取到說明失敗
測試demo用戶
密碼我們同樣設置的是demo
[root@linux-node1 ~]# openstack --os-auth-url http://192.168.56.11:5000/v3 \> --os-project-domain-name default --os-user-domain-name default \> --os-project-name demo --os-username demo token issuePassword: +------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+| Field | Value |+------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+| expires | 2016-11-17T04:56:37.343347Z || id | gAAAAABYLSp17aa9fPaMORIV-wpQa2cxCHfBiU5RbhlW8fPu-uIUsKuXj4gaI8NWLCj7Y3GIam8752UY0miXJxnvJ7ew3lMPpCnYLPrObmvXmo1yeKa391u9yucUbKGIX-ma- || | O0iijuy7-XNcGbKa2Ylwij3j3xbyaIUwiiRddnObNx3ZPVjTEo || project_id | ff5398ee1b2e4d00bafd57f82dc150e6 || user_id | a78ec26501374df4a574bd3f8153d67f |+------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
創建腳本
創建admin
和demo
項目和用戶創建客戶端環境變量腳本,為了以后的方便而創建
[root@linux-node1 ~]# cat admin-openstack.shexport OS_PROJECT_DOMAIN_NAME=default export OS_USER_DOMAIN_NAME=default export OS_PROJECT_NAME=admin export OS_USERNAME=adminexport OS_PASSWORD=adminexport OS_AUTH_URL=http://192.168.56.11:35357/v3export OS_IDENTITY_API_VERSION=3export OS_IMAGE_API_VERSION=2
測試腳本是否生效
創建完成后,我們下次在想驗證token
就可以直接使用命令來執行
[root@linux-node1 ~]# source admin-openstack.sh [root@linux-node1 ~]# openstack token issue+------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+| Field | Value |+------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+| expires | 2016-11-17T07:52:13.398484Z || id | gAAAAABYLVOdq_gR3JayGSrGeEnJZJHeCxAmkxpAZ9asbj8IH91-jDgImQrVprlPvMO2qXlLAAV3mShVSvEOmMoGpDaCG_ulcr0EB0xo1v- || | p171xzH3E7ke5NaNNdZWOlIfFmLACa7sA5wULKVz7kSBbS4g_h_bJq0lxr7ev4MX8FsWRnmmtGZI || project_id | 026a58f98402437fa95ef4a21fbd4d1a || user_id | a809e8be52c84732aecd8ebb93481d65 |+------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+[root@linux-node1 ~]#
編寫demo的環境
[root@linux-node1 ~]# cat demo-openstack.shexport OS_PROJECT_DOMAIN_NAME=defaultexport OS_USER_DOMAIN_NAME=defaultexport OS_PROJECT_NAME=demoexport OS_USERNAME=demoexport OS_PASSWORD=demoexport OS_AUTH_URL=http://192.168.56.11:5000/v3export OS_IDENTITY_API_VERSION=3export OS_IMAGE_API_VERSION=2[root@linux-node1 ~]# source demo-openstack.sh[root@linux-node1 ~]# openstack token issue+------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+| Field | Value |+------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+| expires | 2016-11-17T07:54:19.996447Z || id | gAAAAABYLVQc_H2-tIGst4GvEhpu03taLaXP9yE1Yru2foNEzvdW5zFErR_8nvyqkZ2-f8HoHSOpVcRvDPxbujk93uB4a0meYWRS6Ve5zYFZ7v74CbmMRkB-f7hThsTET1uazzKDXFP46gzBV3G135NT-xdjKp- || | pQv58ZNm7BVHSXVtMIES289M || project_id | ff5398ee1b2e4d00bafd57f82dc150e6 || user_id | a78ec26501374df4a574bd3f8153d67f |+------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
以后我們要執行openstack
命令,直接執行這個環境變量即可
---------以上就是keystone的配置----------
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。