1. 程式人生 > >keystone系列四:keystone部署及操作

keystone系列四:keystone部署及操作

一 前言

任何軟體的部署都是沒有技術含量的,任何就部署講部署的人都是江湖騙子。

部署的本質就是拷貝,貼上,回車。我們家養了條狗,它可以勝任這件事情。

我們搞技術的,一定不能迂腐:輕信或者一概不信。

輕信者的傻逼就像是隻學了上半冊的葵花寶典,上半冊教你欲練此功必先自宮,而下半冊說的則是不自宮其實也可以。

不信者的傻逼就像是馬冬什麼?馬什麼梅?什麼冬梅?

二 版本資訊

官網http://docs.openstack.org/newton/install-guide-rdo/keystone.html

我們按照Newton這個版本來部署,其實跟大家講,openstack基本保持每6個月更新一個版本,面對如此快的版本更迭,我們其實瞅準了一個版本深入研究下去就好,深入到什麼層次,為社群提交程式碼。任何每來一個新版本就去部署一次的主都是傻叉。

三 部署keystone

參考官網http://docs.openstack.org/newton/install-guide-rdo/

系統資訊

[[email protected] ~]# cat /etc/redhat-release 
CentOS Linux release 7.0.1406 (Core) 
[[email protected] ~]# uname -r
3.10.0-123.el7.x86_64

step 1:準備階段

yum -y install centos-release-openstack-newton #安裝官方yum源
yum -y upgrade #
更新 yum -y install python-openstackclient #安裝工具 yum -y install openstack-selinux #安裝openstack-selinux包自動管理openstack元件的安全策略

step 2:部署mariadb

安裝

'''
keystone支援ldap和mysql作為後端Driver,用來存放使用者相關資訊,catalog等,這裡我們選用mariadb
'''
yum -y install mariadb mariadb-server python2-PyMySQL 

配置:/etc/my.cnf.d/openstack.cnf

[mysqld]
bind-address = 192.168.31.57 #本機管理網路ip

default-storage-engine = innodb
innodb_file_per_table
max_connections = 4096
collation-server = utf8_general_ci
character-set-server = utf8

啟動服務且設定開機啟動

systemctl start mariadb.service
systemctl enable mariadb.service

初始化資料庫(可有可無)

mysql_secure_installation

step 3:部署keystone

keystone關於資料庫的操作

mysql -u root -p #登入資料庫
CREATE DATABASE keystone; #新建庫keystone
GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' \
  IDENTIFIED BY '123'; #新建本地訪問keystone庫的賬號
GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' \
  IDENTIFIED BY '123'; #新建遠端訪問keystone庫的賬號

安裝軟體包

#keystone軟體包名openstack-keystone
#安裝httpd和mod_wsgi的原因是,社群主推apache+keystone
#openstack-keystone本質就是一款基於wsgi協議的web app,而httpd本質就是一個相容wsgi協議的web server,所以我們需要為httpd安裝mod_wsgi模組
yum -y install openstack-keystone httpd mod_wsgi

配置:/etc/keystone/keystone.conf

#讓openstack-keystone能夠知道如何連線到後端的資料庫keystone
#mysql+pymysql:pymysql是一個python庫,使用python可以操作mysql原生sql
[database]
connection = mysql+pymysql://keystone:123@192.168.31.57/keystone
[token]
provider = fernet #fernet為生成token的方式

初始化資料庫keystone

#之所以要初始化,是因為python的orm物件關係對映,需要初始化來生成資料庫表結構
su -s /bin/sh -c "keystone-manage db_sync" keystone

初始化的時候可能會報錯

瞬間矇蔽:我命名建立的使用者,啥啥的都能訪問啊

初始化Fernet key倉庫

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

step 4:配置web server整合keystone

修改本機主機名

hostnamectl set-hostname controller

配置/etc/hosts

192.168.31.57 controller

配置/etc/httpd/conf/httpd.conf

ServerName controller

為mod_wsgi模組新增配置檔案

#直接拷貝模組檔案或者做軟連線都可以
ln -s /usr/share/keystone/wsgi-keystone.conf /etc/httpd/conf.d/

啟動httpd服務且設定開機自啟

systemctl start httpd.service
systemctl enable httpd.service

四 keystone操作

part 1:建立keystone的catalog

配置/etc/keystone/keystone.conf 

[DEFAULT]
admin_token = 123

設定環境變數

#OS_TOKEN=配置檔案中的admin_token
#會在filter過濾過程中被admin_token_auth中間間設定is_admin=True
#誰有這個admin_token誰就是管理員了。

export OS_TOKEN=123 #等於keystone.conf中admin_token的值
export OS_URL=http://192.168.31.57:35357/v3
export OS_IDENTITY_API_VERSION=3

為keystone建立catalog

#基於上一步給的許可權,建立認證服務實體
openstack service create \
  --name keystone --description "OpenStack Identity" identity

#基於上一步建立的服務實體,建立訪問該實體的三個api端點
openstack endpoint create --region RegionOne \
  identity public http://192.168.31.57:5000/v3
  
openstack endpoint create --region RegionOne \
  identity internal http://192.168.31.57:5000/v3
  
openstack endpoint create --region RegionOne \
  identity admin http://192.168.31.57:35357/v3

part 2:建立域,租戶,使用者,角色,把四個元素關聯到一起

The Identity service provides authentication services for each OpenStack service. The authentication service uses a combination of domainsprojectsusers, and roles.

建立一個公共的域名:

openstack domain create --description "Default Domain" default 

建立管理員資訊:

#建立admin專案
openstack project create --domain default \
  --description "Admin Project" admin 
#建立admin使用者
openstack user create --domain default \
  --password-prompt admin
#建立admin角色
openstack role create admin
#建立上述三者的關聯
openstack role add --project admin --user admin admin

part 3:使用Bootstrap完成part1和part2二者的工作

Bootstrap the Identity service:

#本質就是在為keystone建立catalog
keystone-manage bootstrap --bootstrap-password 123 \
  --bootstrap-admin-url http://192.168.31.57:35357/v3/ \
  --bootstrap-internal-url http://192.168.31.57:35357/v3/ \
  --bootstrap-public-url http://192.168.31.57:5000/v3/ \
  --bootstrap-region-id RegionOne

設定環境變數(is_admin不會被設定成True,admin使用者會獲得一個Token)

export OS_USERNAME=admin
export OS_PASSWORD=123 #就是keystone-manage中設定的--bootstrap-password
export OS_PROJECT_NAME=admin
export OS_USER_DOMAIN_NAME=Default
export OS_PROJECT_DOMAIN_NAME=Default
export OS_AUTH_URL=http://192.168.31.57:35357/v3
export OS_IDENTITY_API_VERSION=3

part 4:建立用於後期測試用的專案,使用者,租戶,建立關聯

建立project名為demo

openstack project create --domain default \
  --description "Demo Project" demo

建立普通使用者demo

openstack user create --domain default \
  --password-prompt demo

建立普通使用者的角色即user

openstack role create user

建立關聯

openstack role add --project demo --user demo user

part 5:為後續的服務建立統一租戶service

解釋:後面每搭建一個新的服務都需要在keystone中執行四種操作:1.建專案 2.建使用者 3.建角色 4.做關聯

#後面所有的服務公用一個專案service,都是管理員角色admin
#所以實際上後續的服務安裝關於keysotne的操作只剩2,4
openstack project create --domain default \
  --description "Service Project" service

五 驗證

part 1:準備

出於安全考慮,需要關閉臨時令牌認證機制(配置檔案中的admin_token和keystone-manage的--bootstrap-password都是基於該機制)

該機制會將使用者的請求設定is_admin=True,原始碼分析中會介紹,先暫且理解到這裡

編輯/etc/keystone/keystone-paste.ini
將
[pipeline:public_api]
[pipeline:admin_api]
[pipeline:api_v3] 
中的admin_token_auth都去掉

取消一切設定的環境變數,如

unset OS_AUTH_URL OS_PASSWORD

part 2:驗證操作方法一

管理員使用者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

普通使用者demo申請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

part 3:驗證操作方法二

curl -i \
-H "Content-Type: application/json" \
-d '
{
    "auth": {
        "identity": {
            "methods": [
                "password"
            ],
            "password": {
                "user": {
                    "domain":{
                        "name": "default"
                     },
                    "name": "admin",
                    "password": "123"
                }
            }
         },
         "scope": {
            "project": {
                "domain": {
                        "name":"default"
                },
               "name": "admin"
            }
         }
     }
}' \
http://127.0.0.1:5000/v3/auth/tokens

六 建立指令碼

為了不寫一長串的使用者資訊,可以把他們定義成指令碼的方式

admin-openrc

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://192.168.31.57:35357/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2

demo-openrc

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://192.168.31.57:35357/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2

針對不同的業務應該有不同的使用者資訊,也都應該定義成指令碼形式,方便管理

我們的申請token操作簡化成

source admin-openrc
openstack token issue

七 keystone使用套路總結

(1)user歸屬於一個或多個Project,並且在每個專案中充當一個角色。所以我們需要建立Project,建立User,建立Role,並將User和Project、Role關聯起來;

建立域,租戶,使用者,角色,把四個元素關聯到一起
建立一個公共的域名:
openstack domain create --description "Default Domain" default

管理員:admin
openstack project create --domain default \
  --description "Admin Project" admin
  
openstack user create --domain default \
  --password-prompt admin
 
openstack role create admin

openstack role add --project admin --user admin admin

普通使用者:demo
openstack project create --domain default \
  --description "Demo Project" demo
  
openstack user create --domain default \
  --password-prompt demo
 
openstack role create user

openstack role add --project demo --user demo user
View Code

(2)Keystone本質是提供Identity服務的,所以它的實現或者提供的機制也是基於使用者來設計的。為了提供服務目錄,配置Keystone的時候建立了一個特殊的ServiceProject,為每個服務建立對應的使用者(Nova, Swift, cinder...),並且都歸屬於ServiceProject。然後配置、設定相應的Endpoint。

為後續的服務建立統一租戶service,所有的服務公用一個租戶service
openstack project create --domain default \
  --description "Service Project" service


建立服務實體service
openstack service create --name glance \
  --description "OpenStack Image" image
  
建端點endpoint
openstack endpoint create --region RegionOne \
  image public http://controller01:9292
  

openstack endpoint create --region RegionOne \
  image internal http://controller01:9292
 
openstack endpoint create --region RegionOne \
  image admin http://controller01:9292
View Code

相關推薦

keystone系列keystone部署操作

一 前言 任何軟體的部署都是沒有技術含量的,任何就部署講部署的人都是江湖騙子。 部署的本質就是拷貝,貼上,回車。我們家養了條狗,它可以勝任這件事情。 我們搞技術的,一定不能迂腐:輕信或者一概不信。 輕信者的傻逼就像是隻學了上半冊的葵花寶典,上半冊教你欲練此功必先自宮,而下半冊說的則是不自宮其實也可

glance系列glance部署操作

一 簡單架構圖示參考 更新中... 二 部署glance yum install memcached python-memcachedsystemctl enable memcached.servicesystemctl start memcached.service step 1:glance關於資

keystone系列keystone原始碼分析

六 keystone架構   6.1 Keystone API  Keystone API與Openstack其他服務的API類似,也是基於ReSTFul HTTP實現的。 Keystone API劃分為Admin API和Public API: Public API不僅實現獲取版本以及相應擴充

MongoDB系列解決secondary的讀操作

master body 兩種方法 mon class 通過 ons ima except http://blog.itpub.net/26812308/viewspace-2124660/ 在Replica sets 中的secondary節點默認是不可讀的。使用Repl

SpringCloud系列Eureka 服務發現框架(定義 Eureka 服務端、Eureka 服務信息、Eureka 發現管理、Eureka 安全配置、Eureka-HA(高可用) 機制、Eureka 服務打包部署

pac elf figure 傳遞 uri rect body 情況 服務組 1、概念:Eureka 服務發現框架 2、具體內容 對於服務發現框架可以簡單的理解為服務的註冊以及使用操作步驟,例如:在 ZooKeeper 組件,這個組件裏面已經明確的描述了一個服務的註冊以及發

架構系列Maven實現動靜分離打war包zip包

目標:實現Maven動靜分離打包,靜態資源打成zip包,動態資源打成war包,方便獨立部署 工程結構 打包前先看下工程結構 我的靜態資源都是放在webapp目錄下面,有css,fonts,html,images,js,根目錄下的login.js,log

《架構系列一鍵部署應用到Tomcat叢集中》

基於前面的《架構系列三:使用Keepalived+Nginx+tomcat實現叢集部署》,我們配置了nginx+Tomcat叢集,如果需要在VM1,VM2各部署6個Tomcat,這時候怎麼將應用部署到叢集中呢,如果手動一個一個的部署,那要部署12次,效率非常底,因此我們迫切需要一鍵自動部

Docker教程系列Docker上部署MySQL並解決中文亂碼問題

1下載MySQL映象 如果不指定mysql的版本預設下載mysql8,mysql8的變化比較大,所以還是用mysql5.7吧。 docker pull mysql:5.7  檢視映象:   docker images 2建立MySQL容器

keystone系列閘道器協議

一 靜態頁面和動態頁面 在瞭解了http協議後,我們知曉,一個web server的本質就是 瀏覽器傳送一個HTTP請求; 伺服器收到請求,生成一個HTML文件; 伺服器把HTML文件作為HTTP響應的Body傳送給瀏覽器; 瀏覽器收到HTTP響應,從HTTP Bod

Java集合系列()HashMap、Hashtable、LinkedHashMap、TreeMap的使用方法區別

本篇部落格主要講解Map介面的4個實現類HashMap、Hashtable、LinkedHashMap、TreeMap的使用方法以及三者之間的區別。 注意:本文中程式碼使用的JDK版本為1.8.0_191 值得注意的是,Map介面是獨立的介面,並沒有繼承Collection介面(這裡是重點,面試常問):

深入理解JAVA集合系列ArrayList源碼解讀

結束 了解 數組下標 size new 數組元素 開始 ini rem 在開始本章內容之前,這裏先簡單介紹下List的相關內容。 List的簡單介紹 有序的collection,用戶可以對列表中每個元素的插入位置進行精確的控制。用戶可以根據元素的整數索引(在列表中的位置)訪

sed修煉系列()sed中的疑難雜癥

chan 滑動 特殊符號 container 源文件 重復 target 情況 即使 本文目錄:1 sed中使用變量和變量替換的問題2 反向引用失效問題3 "-i"選項的文件保存問題4 貪婪匹配問題5 sed命令"a"和"N"的糾葛 1.sed中使用變量和變量替換的問題

多線程系列AQS-AbstractQueuedSynchronizer

線程阻塞 head 同步隊列 abstract 我們 再次 ive 打包 iter 什麽是AbstractQueuedSynchronizer?為什麽我們要分析它? AQS:抽象隊列同步器,原理是:當多個線程去獲取鎖的時候,如果獲取鎖失敗了,當前線程就會被打包成一個nod

SpringBoot系列SpringBoot開發(改變環境屬性、讀取資源文件、Bean 配置、模版渲染、profile 配置)

pat row 開發 ima set his 改變 端口配置 import 1、概念 SpringBoot 開發深入 2、具體內容 在之前已經基本上了解了整個 SpringBoot 運行機制,但是也需要清楚的認識到以下的問題,在實際的項目開發之中,尤其是 Java

spring cloud 入門系列使用Hystrix 實現斷路器進行服務容錯保護

關系 調用 說明 schema 技術 能力 BE 最終 響應 在微服務中,我們將系統拆分為很多個服務單元,各單元之間通過服務註冊和訂閱消費的方式進行相互依賴。但是如果有一些服務出現問題了會怎麽樣? 比如說有三個服務(ABC),A調用B,B調用C。由於網絡延遲或C本身代碼有

搜索引擎系列Lucene提供的分詞器、IKAnalyze中文分詞器集成

author oid core 長度 maven項目 int get attribute clu 一、Lucene提供的分詞器StandardAnalyzer和SmartChineseAnalyzer 1.新建一個測試Lucene提供的分詞器的maven項目LuceneAn

搜索引擎系列solr-部署詳解(solr兩種部署模式介紹、獨立服務器模式詳解、SolrCloud分布式集群模式詳解)

nod 為什麽 用途 serve creat 復制 stand 數據 變量名 一、solr兩種部署模式介紹 Standalone Server 獨立服務器模式:適用於數據規模不大的場景 SolrCloud 分布式集群模式:適用於數據規模大,高可靠、高可用、高並發的場景 二

Silverlight & Blend動畫設計系列傾斜動畫(SkewTransform)

圖形 wid onu alt 文件 amp val 設計工具 現實生活 Silverlight中的傾斜變化動畫(SkewTransform)能夠實現對象元素的水平、垂直方向的傾斜變化動畫效果。我們現實生活中的傾斜變化效果是非常常見的,比如翻書的紙張效果,關門開門的時候門縫圖

自建git服務器連接Pycharm系列pycharm項目更新到git服務器中

strong 提示 char 點擊 win pychar set repo info 在pycharm中,已經開始敲代碼了,這是一個已經存在,沒連接到git服務器的一個項目工程。 現在就要實現,如何把這個項目同步到服務器。 > 前提:> 1. 已經在Linu

Docker教程系列Docker鏡像操作

包括 tfs 遠的 osi 其它 ali 存儲 cell 綁定 1什麽是Docker鏡像 Docker鏡像是由文件系統疊加而成(是一種文件的存儲形式)。最底端是一個文件引導系統,即bootfs,這很像典型的Linux/Unix的引導文件系統。Docker用戶幾乎永遠不會和引