前言
openstack更新頻率是挺快的,每六個月更新一次(命名是是以A-Z的方式,Austin,Bexar...Newton)。博主建議大家先可一種版本研究,等某一版本研究透徹了,在去研究新的版本。其實更新來說,也就是無非對於軟件來說的一些優化。對於用戶角度並沒有多大的改變。切記不要追着新版本走,那樣只會是丟了西瓜揀芝麻!
看一下官網的圖

我們按照Newton這個版本來部署。大家也可以上官網看下官方文檔,寫的也挺詳細。
廢話不多說,直接部署
openstack基於centos7 、redhat7 或者Ubuntu來部署的
系統信息:
1 [root@bodbayLi ~]# cat /etc/redhat-release 2 CentOS Linux release 7.2.1511 (Core) #操作系統信息 3 [root@bodbayLi ~]# uname -r 4 3.10.0-327.22.2.el7.x86_64 #內核的版本信息
First Step:准備階段
安裝官方yum源。之前在部署這個openstack的時候還要考慮各種的安裝包。后來官方直接出了自己的yum源。
yum安裝(下載軟件包到本地--->安裝--->刪除) 修改yum.conf

修改keepcache=1
修改cachedir=/newton #方便管理。並且所有的軟件包都下載到本地,可以自己制作yum源
yum -y install centos-release-openstack-newton #安裝官方的yum源 yum -y upgrade #更新 yum -y install python-openstackclient #安裝工具 yum -y install openstack-selinux #安裝openstack-selinux包自動管理openstack組件的安全策略
安裝完上面的部分,接下來部署數據庫
Second Step
因為keystone是一個認證服務也屬於一個web app,既然是認證服務就要在后端安裝一個數據庫。用來存放用戶的相關數據
yum -y install mariadb mariadb-server python2-PyMySQL
#前面兩個是屬於centos7版本mysql數據庫的名稱,后面那個是一個Python模塊。(在python當中操作mysql)
安裝好后在/etc/my.cnf.d/目錄下創建一個openstack.cnf文件。(什么名字都行但是要以.cnf結尾)
1 [mysqld] 2 bind-address = 182.92.84.106 #本機管理網絡ip 3 4 default-storage-engine = innodb 5 innodb_file_per_table 6 max_connections = 4096 7 collation-server = utf8_general_ci 8 character-set-server = utf8
保存退出,啟動mariadb
systemctl start mariadb.service #啟動mariadb並設為開機啟動。在centos6版本中啟動管理服務由之前的init.d
systemctl enable mariadb.service #在centos7中則是systemctl來管理啟動服務,千萬要記住
查看mariadb.service運行狀態

上面就是mariadb部署過程
Third Step
部署keystone
keystone關於數據庫的操作:
1 mysql -u root -p #登入數據庫 2 CREATE DATABASE keystone; #新建庫keystone 3 GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' \ 4 IDENTIFIED BY '123'; #新建本地訪問keystone庫的賬號 5 GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' \ 6 IDENTIFIED BY '123'; #新建遠程訪問keystone庫的賬號
keystone為什么要創建一個自己的數據庫?
應為keystone程序要訪問數據庫,首先自己要有一個數據庫,就來訪問自己的數據庫
注意:以后每部署一個組件都要有一個自己的數據庫,在數據庫中。比如nova也要訪問數據庫,那么數據庫中就存放一個nova的庫,里面存放一些nova相關的信息 ,catalog等
安裝軟件包
1 #keystone軟件包名openstack-keystone 2 #安裝httpd和mod_wsgi的原因是,社區主推apache+keystone 3 #openstack-keystone本質就是一款基於wsgi協議的web app,而httpd本質就是一個兼容wsgi協議的web server,所以我們需要為httpd安裝mod_wsgi模塊 4 yum -y install openstack-keystone httpd mod_wsgi
修改keyston配置文件:/etc/keystone/keystone.conf
1 #讓openstack-keystone能夠知道如何連接到后端的數據庫keystone 2 #mysql+pymysql:pymysql是一個python庫,使用python可以操作mysql原生sql 3 [database] 4 connection = mysql+pymysql://keystone:123@182.92.84.106/keystone #mysql+pmysql是由上面的Python-mysql
#用戶名:密碼@mysql地址/哪個庫 那個模塊安裝的,用pymysql來操作mysql
5 [token] #令牌 6 provider = fernet #fernet為生成token的方式(還有pki)
注意在mysql數據庫中創建密碼的時候加上了引號“123”而在配置文件中不要加上引號,不然會保錯
保存退出,並初始化數據庫
su -s /bin/sh -c "keystone-manage db_sync" keystone
之所以要初始化,是因為python的orm對象關系映射,需要初始化來生成數據庫表結構。什么是orm(Object Relation Mapping)的縮寫叫對象關系映射。
可能有的時候大家在部署的時候會遇到報錯,怎么辦,雖然我沒有遇到,但是如果各位遇到了不要慌
tail -f -n 20 /var/log/keystone/keystone.log
看看是哪一步驟出現問題解決就好。
接下來初始化Fernet key庫(生成token)
keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone keystone-manage credential_setup --keystone-user keystone --keystone-group keystone
上面的兩個步驟是keystone對自己授權的一個過程,創建了一個keystone用戶與一個keystone組。並對這個用戶和組授權。因為keystone是對其他組件認證的服務,那么它自己就合格么?所以它先要對自己進行一下認證
Fourth Step
配置web server整合keystone
修改主機名,方便操作
hostnamectl set-hostname controller
配置hosts
182.92.84.106 controller
配置http.conf/ServerName
ServerName controller
為mod_wsgi模塊添加配置文件
#直接拷貝模塊文件或者做軟連接都可以
ln -s /usr/share/keystone/wsgi-keystone.conf /etc/httpd/conf.d/
wsgi:apache關於mod_wsgi模塊的配置文件
keystone:用來連接keystone
查看wsgi-keystone.conf文件



1.上面兩個端口說明keystone要開放這兩個端口,apache才能把請求交給keystone
2.Port 5000:Wsgi守護進程,進程5個,每個進程下面一個線程,用戶keystone,組keystone。進程組/usr/bin/keystone-wsgi-public 用來產生5000端口(內部用戶與外部用戶使用)
3.Port 35357:跟上面一樣。進程組/usr/bin/keystone-wsgi-admin 用來產生35357端口(管理員使用)
Fifth Step
啟動服務
systemctl start httpd.service #啟動httpd服務
systemctl enable httpd.service #設置成開機自啟
查看服務狀態

到這里keystone就部署完了,接下來就是如何要操作它了
如何操作keystone
一.創建keystone的catalog
配置/etc/keystone/keystone.conf
[DEFAULT] admin_token = 123 #keystone自己對自己授予令牌為。雖然是可以但是這樣是危險的,后面會去解決它
設置環境變量
export OS_TOKEN=123
export OS_URL=http://182.92.84.106:35357/v3 export OS_IDENTITY_API_VERSION=3
1.第一步的值等於keystone.conf中admin_token的值。並且只要在當前終端執行命令,當前終端就是管理員用戶
2.因為現在keystone沒有提供Endpoint,所以自己手動指定一個Endpoint,以后的請求就往這個url提交。v3代表用的keystone版本為3
3.認證版本為3
為keystone創建catalog
openstack service create \ --name keystone --description "OpenStack Identity" identity
基於前兩步給的權限,創建認證服務實體

基於建立的服務實體,創建訪問該實體的三個api端點
openstack endpoint create --region RegionOne \ identity public http://182.92.84.106:5000/v3 openstack endpoint create --region RegionOne \ identity internal http://182.92.84.106:5000/v3 #前兩個為5000端口,專門處理內部和外部的訪問 #用keystone-wsgi-public
openstack endpoint create --region RegionOne \
identity admin http://182.92.84.106:35357/v3 #35357端口,專門處理admin#用keystone-wsgi-admin



可以看見上面三個的service_id一樣說明他們屬於一個服務的Endpoint
白色箭頭是訪問路徑
登錄數據庫查看keystone庫中的表

上面的步驟操作成功后,這樣keystone就可以工作了。
二.創建域,項目(租戶),用戶,角色,並把四個元素關聯在一起
在openstack中最大的資源集合就是域--->項目(租戶)--->用戶--->角色
1.創建域
1 openstack domain create --description "Default Domain" default #創建一個默認的域“default”

2.創建管理員
#創建admin項目 在“default”域中 openstack project create --domain default \ --description "Admin Project" admin

#創建admin用戶 在“default”域中 openstack user create --domain default \ --password-prompt admin #輸入密碼

#創建admin角色 openstack role create admin

#創建上述三者的關聯 openstack role add --project admin --user admin admin #不關聯用戶無法使用

第一步與第二步的作用就是keystone能夠被使用初始化的操作
大家覺得上面的兩大部分才完成一個功能有些麻煩,別急 官方最新給出了一個框架叫做Bootsrap,能夠直接完成第一步和第二步的操作
如何操作的呢 請看
三
#本質就是在為keystone創建catalog keystone-manage bootstrap --bootstrap-password 123 \ --bootstrap-admin-url http://182.92.84.106:35357/v3/ \ --bootstrap-internal-url http://182.92.84.106:35357/v3/ \ --bootstrap-public-url http://182.92.84.106:5000/v3/ \ --bootstrap-region-id RegionOne
#這個123就是上面你輸入的部分的那個密碼
#只不過用這步操作的話不用修改配置文件,不用寫admin_token,第一步與第二步的操作一點都不要去做直接就第三步
設置環境變量
export OS_USERNAME=admin #用戶名
export OS_PASSWORD=123 #就是keystone-manage中設定的--bootstrap-password
export OS_PROJECT_NAME=admin #項目名 project <-- 用戶 <--角色 若想讓用戶獲取權限必須要指定用戶所在的項目是哪個
export OS_USER_DOMAIN_NAME=Default #默認域
export OS_PROJECT_DOMAIN_NAME=Default
export OS_AUTH_URL=http://182.92.84.106:35357/v3 #認證url
export OS_IDENTITY_API_VERSION=3 #指定版本信息
驗證關聯

對比它們的ID發現是否一樣
這些ID都可以在mysql數據庫中查到

四.使用第三種方法步驟
刪除mysql keystone數據庫
重新初始化keystone數據庫
退出環境變量
修改/etc/keystone/keystone.conf/ 下的[DEFAULT] 將admin_token=123刪掉
直接操作第三步
結束后查看assignment(openstack assignment list)看是否有結果
五.測試
創建用於后期測試用的項目,用戶,租戶,建立關聯
openstack project create --domain default \ --description "Demo Project" demo
#創建項目名為demo
openstack user create --domain default \
--password-prompt demo
#創建普通用戶為demo 設置密碼
openstack role create user #創建普通用戶的角色即user
openstack role add --project demo --user demo user #建立關聯
每一個創建的過程都是這幾個步驟。但是會少了一步創建角色的過程。因為用戶就兩個,一個是admin,另一個就是user(一個項目里可以有很多admin角色和user角色)注意.角色一定是在項目中。
六。為后續的服務創建統一的項目叫service
因為keystone是一個獨立的授權組件,后面每搭建一個新的服務都需要在keystone中執行四種操作:1.建項目 2.建用戶 3.建角色 4.做關聯 並且創建catalog
#后面所有的服務(nova。glace等等)公用一個項目service,都是管理員角色admin (組件之間的通信都角色都是admin) #所以實際上后續的服務安裝關於keysotne的操作只剩2,4 openstack project create --domain default \ --description "Service Project" service
每一個組件,都要有一個訪問用戶。(比如訪問glance要有一個glance用戶,還有一個一個角色,還要有一個關聯)以后要部署glance,要在keystone中創建一個glance的catalog(service名/Endpoint)。還要有一個訪問catalog的用戶信息,這樣的話還要
創建一個域。但是現在已經有了一個默認的域 所以不需要再創建,域有了還要創建一個項目,但是現在項目也已經有了。service項目,所以不用創建了。就需要創建一個叫glance的用戶就行了(一般組件叫什么名,用戶就叫什么名)。還要創建一個角色。但是也不用創建,之前就有一個admin角色。最后就只要做一個關聯就行。以后每個組件都要這么做。就是說學會了keystone的部署,后面的組件也就部署好了

查看project

七.驗證
1.准備
出於安全考慮,關閉臨時令牌認證機制(配置文件中的admin_token和keystone-manage的--bootstrap-password都是基於該機制)
2.取消一切環境變量(退出xshell/puppy遠程連接軟件,重新連接)
3.驗證操作方法
管理員用戶admin申請token
openstack --os-auth-url http://controller:35357/v3 \ --os-identity-api-version 3 \ --os-project-domain-name default \ --os-user-domain-name default \ --os-project-name admin \ --os-username admin \ token issue

注意:一定要加上--os-identity-api-version 3
為普通用戶申請token
openstack --os-auth-url http://controller:5000/v3 \ --os-identity-api-version 3 \ --os-project-domain-name default \ --os-user-domain-name default \ --os-project-name demo \ --os-username demo \ token issue

為了以后不寫一長串的用戶信息,我們可以把它定義成為一個腳本
admin
export OS_PROJECT_DOMAIN_NAME=Default export OS_USER_DOMAIN_NAME=Default export OS_PROJECT_NAME=admin export OS_USERNAME=admin export OS_PASSWORD=123 export OS_AUTH_URL=http://182.92.84.106:35357/v3 export OS_IDENTITY_API_VERSION=3 export OS_IMAGE_API_VERSION=2
user
export OS_PROJECT_DOMAIN_NAME=Default export OS_USER_DOMAIN_NAME=Default export OS_PROJECT_NAME=demo export OS_USERNAME=demo export OS_PASSWORD=123 export OS_AUTH_URL=http://182.92.84.106:35357/v3 export OS_IDENTITY_API_VERSION=3 export OS_IMAGE_API_VERSION=2
針對不同的業務應該有不同的用戶信息,也都應該定義成腳本形式,方便管理
最后申請token的操作為
source admin
openstack token issue
