openstack之keystone部署

前言python

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

  看一下官網的圖linux

  

  咱們按照Newton這個版原本部署。你們也能夠上官網看下官方文檔,寫的也挺詳細。web

 

廢話很少說,直接部署sql

openstack基於centos7 、redhat7 或者Ubuntu來部署的shell

系統信息:數據庫

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:準備階段apache

安裝官方yum源。以前在部署這個openstack的時候還要考慮各類的安裝包。後來官方直接出了本身的yum源。bootstrap

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
相關文章
相關標籤/搜索