基於Ubuntu12.04下的Keystone源碼安裝


Keystone 概述
Keystone 作爲Openstack最早期的核心項目獨立發展,由於Openstack 採取的設計理念也是所有一切皆API,因此設計服務API的調用脫離不了Keystone。Keystone 作爲Openstack 中身份認證服務,在Openstack起到非常關鍵的作用,並且實現了Identity API 供Openstack 其他組件間進行身份驗證

Keystone 兩種認證方式
UUID認證的原理
當用戶拿着有效的用戶名和密碼去keystone認證後,keystone就會返回給他一個token,這個token就是一個uuid。以後用戶進行其他操作時,都必須出示這個token。例如當nova接到一個請求後,就會用這個token去向keystone進行請求驗證,keystone通過比對token,以及檢查token的有效期,來判斷token是否合法,然後返回給nova這一個請求是否合法。

PKI認證的原理
在keystone初始化時,keystone生成了CA的公鑰CA.pem和私鑰CA.key。同時,產生了keystone自己的公鑰keystone.pub和keystone.key,然後將keystone.pub進行了CA的簽名,生成了keystone.pem。
當用戶拿着有效的用戶名和密碼去keystone認證後,keystone就將用戶的基本信息通過keystone.key進行了加密,將這一密文作爲token返回給用戶。當用戶發出一個請求,例如nova拿到token後,首先需要拿到keystone的證書keystone.pem(這一過程只需要進行一次),然後通過keystone.pem來進行解密,獲得用戶的信息,就可以知道該用戶是否合法。
對於用戶的token還需要對token的合法時間,以及token還是否存在進行判斷。所以當nova每一次拿到token後還會先向keystone詢問一次token的失效列表,來查看token是否失效。當然這一過程對於keystone的負載還是相當輕的,所以PKI還是有效的解決了keystone成爲性能瓶頸的問題。


安裝相應的軟件包

junluobj@junluobj:~$ sudo apt-get install -y git python-dev sqlite3 libxml2-dev libxslt1-dev libsasl2-dev libsqlite3-dev libssl-dev libldap2-dev
junluobj@junluobj:~$git clone https://github.com/openstack/keystone.git
junluobj@junluobj:~$git clone https://github.com/openstack/python-keystoneclient.git keystone/client

安裝mysql數據庫

junluobj@junluobj:~$sudo apt-get install mysql-server mysql-client python-mysqldb
junluobj@junluobj:~$sudo mysql -u root -p
mysql>create database keystone;
mysql>grant all on keystone.* to 'keystone'@'%' identified by ‘redhat';

安裝keystone

junluobj@junluobj:~$python setup.py install

在此過程可能會提示缺少setuptools 模塊

junluobj@junluobj:~$sudo apt-get install python-setuptools
junluobj@junluobj:~$python setup.py install
junluobj@junluobj:~$sudo pip install -e .

修改配置文件:

junluobj@junluobj:~$sudo mkdir -p /etc/keystone
junluobj@junluobj:~$sudo cp etc/* /etc/keystone/
junluobj@junluobj:~$sudo mv /etc/keystone/keystone.conf.sample /etc/keystone/keystone.conf
junluobj@junluobj:~$sudo vim /etc/keystone/keystone.conf
#admin token=ADMIN
admin token=ADMIN
#connection=<None>
connection=mysql://root:redhat@localhost/keystone?charset=utf8
admin_endpoint
public_endpoilt

配置日誌存放路徑

junluobj@junluobj:~$sudo mkdir -p /var/log/keystone
junluobj@junluobj:~$touch /var/log/keystone/keystone.log
junluobj@junluobj:~$sudo touch /var/log/keystone/keystone.log

數據庫同步,即創建keystone相關的數據庫表

junluobj@junluobj:~$keystone-manage db_sync
junluobj@junluobj:~$echo $?

創建kestone賬戶及SSL證書

junluobj@junluobj:~$sudo useradd keystone
junluobj@junluobj:~$sudo chown -R keystone.keystone /etc/keystone/
junluobj@junluobj:~$sudo keystone-manage pki_setup --keystone-user=keystone --keystone-group=keyston

啓動keystone 服務

junluobj@junluobj:~$echo $ keystone-all -d &
junluobj@junluobj:~$echo $ps aux |grep keystone
junluobj 14911  0.0  4.0 123772 41368 pts/1    S    19:15   0:00 /usr/bin/python /usr/local/bin/keystone-all -d
junluobj 14924  0.0  0.0  13588   936 pts/1    S+   19:29   0:00 grep --color=auto keystone

現在已經完成Keystone的安裝,但現在還無法使用,因爲沒有租戶、用戶、密碼、服務等。

配置Keytone

在這裏先設置兩個環境變量

junluobj@junluobj:~$ export OS_SERVICE_TOKEN=ADMIN
junluobj@junluobj:~$ export SERVICE_ENDPOINT=http://192.168.0.103:35357/v2.0

查看用戶列表:

junluobj@junluobj:~$ keystone user-list

創建租戶

junluobj@junluobj:~$ keystone tenant-create --name adminTenant --description "Admin Tenant" --enabled true

wKiom1PHYECyPQ86AAD6p7iz7kk263.jpg


創建用戶

需要記錄 tenant id,在創建用戶時需要關聯,即將用戶關聯到哪個租戶。

 junluobj@junluobj:~$keystone user-create --tenant_id bf0df88bd9694e11951a896bde015cb0 --name admin --pass redhat --enabled true
 junluobj@junluobj:~$keystone user-create --tenant_id bf0df88bd9694e11951a896bde015cb0 --name user1 --pass redhat --enabled true

wKiom1PHYEzijD5ZAAFmw41AQAY007.jpg

通過keystone命令創建一個新的role,並將此role賦給第一步中的一個admin用戶

創建一個角色名稱爲adminRole。請記住該命令生成的Role id

junluobj@junluobj:~$ keystone role-create --name adminRole


wKiom1PHYFnBOM2-AAC7wn-6pIk761.jpg


截止到目前,已經分別創建 Tenant、User、Role,分別是:

Tenant ID: bf0df88bd9694e11951a896bde015cb0
User ID: 0a46563787a7470ebca6e0faafb41174
(admin)

Role ID: 87a6bda856014385b9f6164dc99f792d

junluobj@junluobj:~$ keystone user-role-add --user-id 0a46563787a7470ebca6e0faafb41174 \ 
> --tenant-id bf0df88bd9694e11951a896bde015cb0 \
> --role-id 87a6bda856014385b9f6164dc99f792d


通過以下兩個命令簡單測試

junluobj@junluobj:~$ keystone user-role-list --user admin --tenant adminTenant 
junluobj@junluobj:~$ keystone user-list

wKioL1PHYm6QoLmdAAFlIO9dgqs812.jpg


今兒先寫到這兒了,待後續...


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章