openstack之keystone部署


前言

  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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM