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
創建用戶
需要記錄 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
通過keystone命令創建一個新的role,並將此role賦給第一步中的一個admin用戶
創建一個角色名稱爲adminRole。請記住該命令生成的Role id
junluobj@junluobj:~$ keystone role-create --name adminRole
截止到目前,已經分別創建 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
今兒先寫到這兒了,待後續...