Keystone 介紹
Keystone作用:
- 用戶與認證:用戶權限與用戶行為跟蹤;
- 服務目錄:提供一個服務目錄,包括所有服務項和相關Api的斷點
- SOA相關知識
Keystone主要兩大功能用戶認證和服務目錄(相當於一個注冊中心)
- 用戶認證名詞介紹
User:用戶
它是用一個數字代表使用openstack雲服務的一個人、系統、或服務。身份驗證服務將會驗證傳入的由用戶聲明將調用的請求
一個租戶可以有多個用戶
一個用戶可以屬於一個或多個租戶
用戶對租戶和操作權限由用戶在租戶中承擔的角色來決定。
Project:項目
它是各個服務中的一些可以訪問的資源集合或者說叫資源組。它是一個容器,用於組織和隔離資源,或標識對象。
Token:令牌
Role:角色
代表一組用戶可以訪問的資源權限,例如Nova中的虛擬機、Glance中的鏡像。
- 服務目錄兩大名詞介紹
Service:服務
Service即服務,如Nova、Glance、Swift。根據前三個概念(User,Project和Role)一個服務可以確認當前用戶是否具有訪問其資源的權限。但是當一個user嘗試着訪問其租戶內的service時,他必須知道這個service是否存在以及如何訪問這個service。
Endpoint:端點
Endpoint翻譯為“端點”,我們可以理解它是一個服務暴露出來的訪問點,如果需要訪問一個服務,則必須知道他的endpoint。Endpoint的每個URL都對應一個服務實例的訪問地址,並且具有public、orivate和admin這三種權限。pubic url可以完全被全局訪問,private url只能被局域網訪問,admin url被從常規的訪問中分離。
KeyStone安裝
yum install -y openstack-keystone httpd mod_wsgi memcached python-memcached
提示: wsgi是python一個cgi的接口
KeyStone配置
編輯文件/etc/keystone/keystone.conf,我們管理keystone只需要修改keystone的配置文件即可。
備注:在配置文件里面以[xxx]里面的內容叫做配置欄目(類似於mysql配置文件[mysqld])
- 在[DEFAULT]部分,定義初始管理令牌的值,我們使用openssl生成一個隨機值。
[root@linux-node1 ~]# openssl rand -hex 10 07081849f55281652 [root@linux-node1 ~]# vim /etc/keystone/keystone.conf [DEFAULT] admin_token = 07081849f55281652dac
提示:keystone默認沒有用戶,需要進行創建用戶。這樣我們在配置文件中加入admin_token,在沒有用戶的情況下可以使用admin_token進行訪問。還可以設置不用用戶名和密碼。簡單來說admin_token就是初始化時候超級管理員的用戶。
- 在[database]部分,配置數據庫訪問:
[database] connection = mysql+pymysql://keystone:keystone@192.168.137.11/keystone
提示:用戶名:密碼@數據庫地址/庫名稱
- 在[token]部分,配置Fernet UUID令牌的提供者
提供令牌有四種方式[fernet|pkiz|pki|uuid]默認是uuid。
[token] provider = fernet driver = memcache
默認是存儲在sql中,我們需要將它修改為memcache
- 在[memcache]部分,配置memcache的連接地址和端口
[memcache] servers = 192.168.137.11:11211
初始化數據庫
su -s /bin/sh -c "keystone-manage db_sync" keystone
自動找到keystone配置文件里的mysql連接,來幫我們創建數據庫中的表。
- 我們為什么要使用keystone用戶去同步數據庫呢?
因為同步數據庫會在/var/log/keystone目錄下去寫日志,如果使用root權限同步,當keystone用戶啟動服務時讀取這個日志文件,那么它將無法進行讀取(權限問題),會出現啟動錯誤的情況。
檢查表是否創建成功
mysql -h 192.168.137.11 -ukeystone -pkeystone -e "use keystone;show tables;"
提示:如果查看表的時候發現沒有,通過日志/var/log/keystone/keystone.log排查報錯信息。
初始化Fernet keys
創建相關的證書
keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone
執行完命令之后會在/etc/keystone下生成fernet-keys目錄,它的權限是keystone里面存放這一些相關證書。
提示:我們要注意/etc/keystone目錄下文件的權限。
memcached啟動和設置
systemctl enable memcached.service systemctl start memcached.service
查看配置文件/etc/sysconfig/memcached
- PORT="11211" # 端口號
- USER="memcached" # 用戶
- MAXCONN="1024" # 最大連接數
- CACHESIZE="64" # 大小64MB
netstat -ntlp檢查服務端口是否存在
apache配置
- 配置/etc/httpd/conf/httpd.conf文件,配置ServerName 選項為控制節點
[root@linux-node1 ~]# vim /etc/httpd/conf/httpd.conf ServerName 192.168.137.11:80
- 創建配置文件/etc/httod/conf.d/wsgi-keystone.conf
[root@linux-node1 ~] vim /etc/httpd/conf.d/wsgi-keystone.conf Listen 5000 Listen 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>
- apache啟動並設置開機自啟動
systemctl enable httpd.service systemctl start httpd.service
- netstat -ntlp檢查服務端口是否存在
查看日志 /var/log/keystone/keystone.log 是否有報錯信息
- 排錯,開啟debug模式
vim /etc/keystone/keystone.conf [DEFAULT] debug = true