一、安裝和配置KeyStone
1. 為KeyStone配置數據庫
- 使用數據庫客戶端,以root用戶連接到數據庫中:
mysql -u root -p
- 創建KeyStone數據庫:
CREATE DATABASE keystone;
- 為KeyStone用戶授權:
GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' IDENTIFIED BY 'KEYSTONE_DBPASS';
GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' IDENTIFIED BY 'KEYSTONE_DBPASS';
2. 安裝KeyStone
- KeyStone服務的監聽端口是5000和35357,配置Apache HTTP服務監聽這兩個端口,為了避免端口沖突,在Ubuntu上禁止KeyStone開機自啟動:
echo "manual" > /etc/init/keystone.override
- 安裝與Keystone相關的軟件包:
apt-get install keystone python-openstackclient apache2 libapache2-mod-wsgi memcached python-memcache
3. 修改KeyStone的配置文件keystone.conf
修改/etc/keystone/keystone.conf
小技巧:將原文件備份,使用命令cat backup_file | grep -v '^#' > new_file
可以生成新文件,并去掉注釋,即cat /etc/keystone/keystone.conf.bak | grep -v '^#' > /etc/keystone/keystone.conf
- 隨機生成一個16進制的token:
openssl rand -hex 10
- 修改[default]部分,配置初始的令牌管理:
admin_token = ADMIN_TOKEN
ADMIN_TOKEN是剛才所生成的隨機值 - 修改[database]部分,配置數據庫的連接:
connection = mysql://keystone:KEYSTONE_DBPASS@controller/keystone
- 修改[memcache],配置Memcache 服務:
servers = localhost:11211
11211是memecahced服務器的默認端口號 - 修改[token]部分,配置UUID令牌的提供者和memcached的持久化驅動:
provider = keystone.token.providers.uuid.Provider
driver = keystone.token.persistence.backends.memcache.Token
- 修改[revoke] 部分, 配置SQL的撤回驅動:
driver = keystone.contrib.revoke.backends.sql.Revoke
可選:為了方便做問題診斷,在[DEFAULT]部分,配置詳細的日志輸出:
verbose = True
- 為keystone數據庫填充數據:
su -s /bin/sh -c "keystone-manage db_sync" keystone
4. 配置 Apache HTTP server
- 編輯/etc/apache2/apache2.conf,配置ServerName選項為控制節點hostname:
ServerName controller
- 創建/etc/apache2/sites-available/wsgi-keystone.conf文件,添加如下內容:
Listen 5000 Listen 35357 <VirtualHost *:5000> WSGIDaemonProcess keystone-public processes=5 threads=1 user=keystone display-name=%{GROUP} WSGIProcessGroup keystone-public WSGIScriptAlias / /var/www/cgi-bin/keystone/main WSGIApplicationGroup %{GLOBAL} WSGIPassAuthorization On <IfVersion >= 2.4> ErrorLogFormat "%{cu}t %M" </IfVersion> LogLevel info ErrorLog /var/log/apache2/keystone-error.log CustomLog /var/log/apache2/keystone-access.log combined </VirtualHost> <VirtualHost *:35357> WSGIDaemonProcess keystone-admin processes=5 threads=1 user=keystone display-name=%{GROUP} WSGIProcessGroup keystone-admin WSGIScriptAlias / /var/www/cgi-bin/keystone/admin WSGIApplicationGroup %{GLOBAL} WSGIPassAuthorization On <IfVersion >= 2.4> ErrorLogFormat "%{cu}t %M" </IfVersion> LogLevel info ErrorLog /var/log/apache2/keystone-error.log CustomLog /var/log/apache2/keystone-access.log combined </VirtualHost>
- 啟用身份認證服務的虛擬主機:
ln -s /etc/apache2/sites-available/wsgi-keystone.conf /etc/apache2/sites-enabled
- 為WSGI組件創建目錄結構:
mkdir -p /var/www/cgi-bin/keystone
- 拷貝WSGI組件到當前創建好的目錄/var/www/cgi-bin/keystone下:
curl http://git.openstack.org/cgit/openstack/keystone/plain/httpd/keystone.py?h=stable/kilo | tee /var/www/cgi-bin/keystone/main /var/www/cgi-bin/keystone/admin
- 設置目錄和文件的權限:
chown -R keystone:keystone /var/www/cgi-bin/keystone
chmod 755 /var/www/cgi-bin/keystone/*
- 重啟apache http server:
service apache2 restart
- 刪除ubuntu默認創建的SQLite數據庫:
rm -f /var/lib/keystone/keystone.sqlite
二、配置服務實體與API端點
1. 配置認證服務的服務實體
- 設置操作系統臨時環境變量:校驗令牌:
export OS_TOKEN=ADMIN_TOKEN
- 設置操作系統臨時環境變量:端點URL:
export OS_URL=http://controller:35357/v2.0
- 為認證服務創建服務實體:
openstack service create --name keystone --description "OpenStack Identity" identity
- 配置認證服務的API端點:
openstack endpoint create --publicurl http://controller:5000/v2.0 --internalurl http://controller:5000/v2.0 --adminurl http://controller:35357/v2.0 --region RegionOne identity
三、創建項目(租戶)、用戶和角色
- 創建admin租戶:
openstack project create --description "Admin Project" admin
- 創建admin用戶:
openstack user create --password-prompt admin
- 創建admin角色:
openstack role create admin
- 添加admin角色到admin租戶和用戶:
openstack role add --project admin --user admin admin
四、創建服務項目
- 位其他的OpenStack服務創建服務項目:
openstack project create --description "Service Project" service
五、創建普通項目和用戶
- 創建demo項目:
openstack project create --description "Demo Project" demo
- 創建demo用戶:
openstack user create --password-prompt demo
- 創建demo角色:
openstack role create user
- 添加user角色到demo租戶和用戶:
openstack role add --project demo --user demo user
六、校驗安裝
1. 校驗安裝前的準備
- 基于安全的原因,先臨時禁止校驗令牌的機制。編輯/etc/keystone/keystone-paste.ini:
移除admin_token_auth從[pipeline:public_api], [pipeline:admin_api], [pipeline:api_v3]部分 - 取消設置的操作系統環境變量:
unset OS_TOKEN OS_URL
2. 使用admin用戶校驗安裝
- 以admin用戶,從2.0版本的認證API申請一個校驗令牌:
openstack --os-auth-url http://controller:35357 --os-project-name admin --os-username admin --os-auth-type password token issue
3.0版本的認證API支持域名,以admin用戶申請一個校驗令牌:
openstack --os-auth-url http://controller:35357 --os-project-domain-id default --os-user-domain-id default --os-project-name admin --os-username admin --os-auth-type password token issue
- 以admin用戶,校驗admin用戶是否有權限云查看認證服務中所包含的項目:
openstack --os-auth-url http://controller:35357 --os-project-name admin --os-username admin --os-auth-type password project list
- 以admin用戶,查看認證服務中的用戶是否創建成功:
openstack --os-auth-url http://controller:35357 --os-project-name admin --os-username admin --os-auth-type password user list
- 以admin用戶,查看認證服務中的角色是否創建成功:
openstack --os-auth-url http://controller:35357 --os-project-name admin --os-username admin --os-auth-type password role list
3. 使用demo用戶校驗安裝
- 以demo用戶,從v3版本的認證API中申請校驗令牌:
openstack --os-auth-url http://controller:5000 --os-project-domain-id default --os-user-domain-id default --os-project-name demo --os-username demo --os-auth-type password token issue
- 以demo用戶,嘗試能否執行只有管理用戶才能執行的查看用戶的操作:
openstack --os-auth-url http://controller:5000 --os-project-domain-id default --os-user-domain-id default --os-project-name demo --os-username demo --os-auth-type password user list
七、創建OpenStack客戶端腳本
1. 創建admin用戶的腳本
創建和編輯文件admin-openrc.sh,加入如下內容:
export OS_PROJECT_DOMAIN_ID=default
export OS_USER_DOMAIN_ID=default
export OS_PROJECT_NAME=admin
export OS_TENANT_NAME=admin
export OS_USERNAME=admin
export OS_PASSWORD=ADMIN_PASS
export OS_AUTH_URL=http://controller:35357/v3
2. 創建demo用戶的腳本
創建和編輯文件demo-openrc.sh,加入如下內容:
export OS_PROJECT_DOMAIN_ID=default
export OS_USER_DOMAIN_ID=default
export OS_PROJECT_NAME=demo
export OS_TENANT_NAME=demo
export OS_USERNAME=demo
export OS_PASSWORD=DEMO_PASS
export OS_AUTH_URL=http://controller:5000/v3
3. 測試腳本
- 加載腳本:
source admin-openrc.sh
- 測試腳本:
openstack token issue