openstack安裝(四)keystone服務的安裝上

一   認證服務

keystone是一個'授權中心','openstack每個服務'要使用keystone進行'管理認證',需要'在每個服務都配置',表明'支持keystone做認證'

'認證表明:' 是系統上的一個'合法用戶',但是'權限不確定'

##############分割線##############

在keystone創建的'用戶',我都可以授權,'授權可以訪問哪些資源',每一個'服務'都變成了'資源'

服務"=="資源

##############分割線##############

認證--->'合不合法',是不是'有效用戶,能不能登陸'-->'qq登陸'

授權--->有沒有'權限',登陸之後可以'做什麼'

#################分割線

三大功能:'認證管理','授權管理','服務目錄'

#################分割線

一箇中心化的服務器使用'RESTful 接口'來提供認證和授權服務-->'接口的規範'

keystone服務目錄

keystone是openstack'獨立的服務'(業務拆分),有自己獨立的ip和端口

35357'(admin用戶訪問)'和5000'(普通用戶-->guster)',對外提供是http服務

##########分割線##########

'假設':如果keystone不能'做服務目錄'的話,使用nova創建虛擬機,需要'其地址';使用glance服務中鏡像,需要知道glance地址,才能使用鏡像;

'現實':用戶'使用'某個opensatck的服務,需要知道它的地址,但用戶'記不住'每個服務的地址,'keystone的作用'體現出來了,'只需要記住'keystone地址就可以了

keystone'提供服務目錄'的功能-->只要你來訪問我'openstack的某個服務'keystone,我就告訴你它'服務'的地址

openstack部分服務的API 表現形式

'name'  'port'     'Resultful Api'

glance: 9292    http://x.x.x.x:9292

nova:   8774    http://x.x.x.x:8774

neutron:9696    http://x.x.x.x:9696

cinder

swift

keystone的交互過程

openstack各個服務'在創建的時候'就在keystone上做'註冊',keystone就有'相關服務的記錄信息'('有了每個服務的Resultful Api記錄');用戶後續使用某個服務'例如:glance',keystone就直接告訴其該服務的api地址

#############類比

keystone有點像'大公司的前臺('公司的架構很複雜),前臺'keystone'知道就可以,告訴我'運維保障部在哪?''負責人是誰?'

'所有的一切設計源自生活'

keystone的功能

(1)  '認證管理'

(2)  '權限管理'

(3)  '服務目錄服務管理'

服務安裝小技巧

openstack每個服務'安裝的小套路',掌握套路!

############'openstack服務的安裝步驟'

1)mysql'創庫並授權'-->因爲'OpenStack每個服務'都是獨立的-->在mysql體現爲'一個服務'對應一個'獨立的數據庫'

2)在keystone上'創建用戶',並關聯角色('授權');角色就是'一堆權限的集合'

3)openstack的'某服務'在keystone上註冊API;如果是nova,註冊nova API

4)yum安裝'該服務'的軟件包

5)'修改'服務的'配置文件'

6)'同步數據庫'

7)啓動服務

############注意

keystone'不遵守'上面的規則;原因:keystone都沒有'基礎',其它的服務就無法完成

二   安裝keystone服務

--  在配置 OpenStack 身份認證服務前,你必須創建一個'數據庫'和'管理員令牌'

--  數據庫進行操作

--  (1)用數據庫連接客戶端以 root 用戶連接到數據庫服務器

mysql -u root -p

--  (2)創建 keystone 數據庫

CREATE DATABASE keystone;

--  (3)對"keystone"數據庫授予恰當的權限:

GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' \
  IDENTIFIED BY 'KEYSTONE_DBPASS';

GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' \
  IDENTIFIED BY 'KEYSTONE_DBPASS';

-- 用合適的密碼替換 KEYSTONE_DBPASS,退出數據庫客戶端

繼續

-- 生成一個'隨機值'在'初始的配置中'作爲'管理員的令牌'-->過度的'權限不較大,不安全,keystone啓動後,不用了'

keystone不能正常工作之前'沒有配置好之前',可以設置一個管理員token,用管理員token實現'上面2)和3)'的操作,用'管理員令牌來實現'

# 產生隨即token

openssl rand -hex 10

這裏'不用隨機數值',用'固定的數值,作爲管理員token',上面的'可以不用操作'

wsgi說明

網關協議

http,nginx    php    fastcgi

http,nginx    python wsgi

支持某種語言,需要'安裝對應的模塊'

安裝keystone服務相關的軟件包

yum install openstack-keystone httpd mod_wsgi -y

# 全部都是python包

報錯解決

Error: Package: python2-oslo-middleware-3.8.1-1.el7.noarch (openstack-mitaka)
           Requires: python-jinja2
Error: Package: python2-pysaml2-3.0.2-2.el7.noarch (openstack-mitaka)
           Requires: python-zope-interface
Error: Package: python-repoze-who-2.1-1.el7.noarch (epel)
           Requires: python-zope-interface

#####################解決策略#####################

'找不到相關的依賴包':https://centos.pkgs.org/

yum install http://mirror.centos.org/centos/7/os/x86_64/Packages/python-jinja2-2.7.2-4.el7.noarch.rpm -y

yum install http://mirror.centos.org/centos/7/os/x86_64/Packages/python-zope-interface-4.0.5-4.el7.x86_64.rpm -y

修改配置文件

'編輯文件' /etc/keystone/keystone.conf 並完成如下動作

配置文件有2000多行-->把'註釋(深入研究)'和'空行'過濾

grep -Ev '^$|#' /etc/keystone/keystone.conf 

注意該文件的'權限'--> root keystone('用戶組')-->'配置文件備份'

################分割線

cp /etc/keystone/keystone.conf{,.bak}
'll /etc/keystone/keystone.conf*'
-rw-r----- 1 root keystone 73101 May 24  2017 /etc/keystone/keystone.conf
-rw-r----- 1 root root     73101 May  3 20:28 /etc/keystone/keystone.conf.bak

# 備份下

grep -Ev '#|^$' /etc/keystone/keystone.conf.bak > /etc/keystone/keystone.conf

################按區域劃分,一定要配置在'對應的區域'下面

在"[DEFAULT]"部分,定義'初始管理令牌'的值

[DEFAULT]
...
admin_token = ADMIN_TOKEN

使用前面步驟生成的'隨機數替換'ADMIN_TOKEN 值,這裏採用上面固定'沒有使用隨即字符串'

################數據庫

在 "[database]" 部分,配置數據庫訪問

[database]
...
connection = mysql+pymysql://keystone:KEYSTONE_DBPASS@controller/keystone

# 將"KEYSTONE_DBPASS"替換爲你爲數據庫選擇的密碼-->mysql+pymysql://協議連接mysql

# 告訴-->如何連接數據庫-->用什麼協議,用戶名和密碼連接controller主機的keystone數據庫

#################令牌

早期的令牌是'pki和uuid' --->'只是隨機數生成的方法'而已-->https://www.cnblogs.com/omgasw/p/12157160.html

在"[token]"部分,配置Fernet UUID令牌的提供者'新版本'

[token]
...
provider = fernet

工具包的安裝

yum install openstack-utils.noarch -y

工具來改keystone的配置文件

openstack-config --set /etc/keystone/keystone.conf DEFAULT admin_token ADMIN_TOKEN
openstack-config --set /etc/keystone/keystone.conf database connection mysql+pymysql://keystone:KEYSTONE_DBPASS@controller/keystone
openstack-config --set /etc/keystone/keystone.conf token provider fernet

'語法':openstack-config --set 修改配置文件 那個區域  鍵 值

openstack-config支持'重複執行'

 手動修改工具修改的md5sum數值對比

[root@controller keystone]# md5sum keystone.conf.bak
'd5acb3db852fe3f247f4f872b051b7a9'  keystone.conf.bak
[root@controller keystone]# md5sum keystone.conf
'd5acb3db852fe3f247f4f872b051b7a9'  keystone.conf
結果:'手動'和'工具自動化修改'是一樣的--->'md5sum 校驗 配置文件來看'

提高'自動化效率'和'錯誤出現'的概率

同步數據庫 

'初始化' '身份認證服務'的數據庫

su -s /bin/sh -c "keystone-manage db_sync" keystone

切換'keystone用戶',用sh環境;'-c執行該命令'

'說明:' 如果使用root身份,會產生一些root用戶身份的文件,keystone用戶無法使用

檢測數據庫

# 觀察是否有輸出結果

mysql -u keystone -pKEYSTONE_DBPASS  -e  'use keystone;show tables;'

# 如果沒有輸出結果,看keystone.log的日誌

vim /var/log/keystone/keystone.log

-rw-r--r-- 1 keystone keystone 4402 May  3 20:54 /var/log/keystone/keystone.log

通過'該文件的日期'可以看到是su - 執行命令生成的

#########################

報錯:'賬戶和密碼不對(數據庫無法同步)'  --->沒有進行mysql_secure'安全初始化'的原因!

初始化Fernet keys

前面的'token區域'指定了'令牌得提供者是fernet',這裏要對fernet'進行初始化'

# 執行下面命令之前,對比-->ll /etc/keystone文件前後的變化-->多了一個目錄

keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone

配置及啓動httpd服務

編輯"/etc/httpd/conf/httpd.conf" 文件,配置'ServerName' 選項爲控制節點

ServerName controller

# 等價形式--> echo "ServerName controller" >> /etc/httpd/conf/httpd.conf

# sed -i '/#ServerName www.example.com:80/a ServerName controller' /etc/httpd/conf/httpd.conf

##############分割線##############

vim '/etc/httpd/conf.d/wsgi-keystone.conf'

# apache-->多站點-->多虛擬主機

Listen 5000
Listen 35357

<VirtualHost *:5000>
    WSGIDaemonProcess keystone-public processes=5 threads=1 user=keystone group=keystone display-name=%{GROUP}
    WSGIProcessGroup keystone-public
    WSGIScriptAlias / /usr/bin/keystone-wsgi-public
    WSGIApplicationGroup %{GLOBAL}
    WSGIPassAuthorization On
    ErrorLogFormat "%{cu}t %M"
    ErrorLog /var/log/httpd/keystone-error.log
    CustomLog /var/log/httpd/keystone-access.log combined

    <Directory /usr/bin>
        Require all granted
    </Directory>
</VirtualHost>

<VirtualHost *:35357>
    WSGIDaemonProcess keystone-admin processes=5 threads=1 user=keystone group=keystone display-name=%{GROUP}
    WSGIProcessGroup keystone-admin
    WSGIScriptAlias / /usr/bin/keystone-wsgi-admin
    WSGIApplicationGroup %{GLOBAL}
    WSGIPassAuthorization On
    ErrorLogFormat "%{cu}t %M"
    ErrorLog /var/log/httpd/keystone-error.log
    CustomLog /var/log/httpd/keystone-access.log combined

    <Directory /usr/bin>
        Require all granted
    </Directory>
</VirtualHost>
# 啓動 Apache HTTP 服務並配置其隨系統啓動:

systemctl enable httpd.service

systemctl start httpd.service

nginx+uwsgi 上搭建keystone

端口檢查

80 5000 35357 -->'端口'

創建服務實體註冊API

創建服務實體--->'給服務創建一個名字'

(1)先決條件 

######## 配置認證令牌

export OS_TOKEN=ADMIN_TOKEN

將"ADMIN_TOKEN"替換爲你在 :doc:`keystone-install`章節中生成的認證令牌'最好固定'

例如:export OS_TOKEN=294a4c8a8a475f9b9836

由於之前固定,不用隨機字符串,所以就是'ADMIN_TOKEN'

######## 配置端點URL

export OS_URL=http://controller:35357/v3

######## 配置認證 API 版本

export OS_IDENTITY_API_VERSION=3

######## 檢驗

'env | grep ^OS'

OS_IDENTITY_API_VERSION=3
OS_TOKEN=ADMIN_TOKEN
OS_URL=http://controller:35357/v3

(2)創建服務實體

'創建服務實體'

openstack service create \
  --name keystone --description "OpenStack Identity" identity

# 創建一個服務;服務的名字是 keystone;description是備註描述信息;identity進行認證

(3)註冊三條API

'註冊API' -->public

openstack endpoint create --region RegionOne \
  identity public http://controller:5000/v3

'註冊了三條API','註冊的域'是 RegionOne;和identify認證服務管理,'類型'是public;'v{number}'可以進行'版本兼容'-->openstack升級,舊的API調用

公共,遊客'guest'用的

'服務和服務之間'API的調用地址 -->'internal'

openstack endpoint create --region RegionOne \
  identity internal http://controller:5000/v3

'管理員通道' -->'admin'

openstack endpoint create --region RegionOne \
  identity admin http://controller:35357/v3

########### 說明

'不同的通道實現不同的權限'

每個添加到OpenStack環境中的服務要求一個多個服務實體三個認證服務中的API 註冊

查看服務

openstack service list

查看API地址

openstack endpoint list

相關博客

相關博客

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章