天天看點

OpenStack“T版”Keystone元件部署Keystone概述部署Keystone

文章目錄

  • Keystone概述
    • Keystone身份服務
    • 主要功能
    • Keystone認證流程
  • 部署Keystone
    • 建立資料庫執行個體和資料庫使用者
    • 安裝、配置keystone、資料庫、Apache
    • 建立OpenStack 域、項目、使用者和角色

Keystone概述

Keystone身份服務

Keystone(OpenStack Identity Service)是OpenStack中的一個獨立的提供安全認證的子產品,主要負責openstack使用者的身份認證,令牌管理,提供通路資源的服務目錄,以及基于使用者角色的通路控制。

解析:1.基本功能:身份認證(職能),認證機制管理(支援多種認證機制,特性),通路控制(1.權限;2.引導指向),,令牌管理,引導路徑

KeyStone類似一個服務總線,或者說是整個Openstack架構的系統資料庫,其它服務通過keystone來注冊其服務的Endpoint(服務通路的URL)。任何服務之間互相的調用,需要經過Keystone的身份驗證,來擷取目标服務的Endpoint來找到目标服務。

解析:keystone知道所有服務(API)的URL路徑,你需要使用的服務所對應的位置(API的URL路徑–>位置點)即可以提供路徑指引服務,前提:已經過身份驗證/權限認證

主要功能

1.身份認證(Authentication):令牌的發放和效驗

(a.令牌發放,校驗/認證)令牌管理

Auth:授權,權限管理有關

2.使用者授權(Authorization):授予使用者在一個服務中所擁有權限

(b.控制使用者可用授權的權限的範圍和使用期限)

例如:規定隻可以到機械學院計算機專業大一02班進行授課,時間為一個星期

3.使用者管理(Account):管理使用者賬戶

c.管理使用者

4.服務目錄(Service Catalog):提供可用服務的API端點

(d.提供所需調用/使用的服務對應的API(URL)位置)及授權,鑒權通過後,會指引目标服務的endponit(API–>Web路徑–>URL路徑)具體位置

例如:機械學院8号樓123教室

Keystone相關概念

管理對象(多元化,管理的對象類型非常豐富)

keystone不僅可以為客戶進行授權,分發令牌,也可以給openstack内部權限進行管理

Endpoint 端點,API的位置

Role 授權角色

User 使用者

Credentials 授權過程

Authentication 授權規則

Token 令牌

Project 項目

Service 服務

相關概念

User(使用者):指使用Openstack service(1.全局 2.核心 3.其它元件)的使用者

Project(項目)(Tenant):可以了解為一個人,或範圍所擁有的資源集合。例如(nova)

Role(角色):用于劃分權限。通過給User指定Role,使User獲得Role對應操作權限

(授予使用者可以使用的權限)

Authenticatin(授權過程):确定使用者身份的過程

Token(令牌);是一個字元串表示,作為通路資源的令牌。Token包含了在指定範圍和有效時間内,可以被通路的資源

Credenttials:用于确認使用者身份的憑證,使用者的使用者名和密碼,或者是使用者名和API密鑰,或者身份管理服務提供的認證令牌

Service:Openstack service,即Openstack中運作的元件服務。如nova,swift,glance,neutron,cinder等

Endpoint:一個可以通過網絡來通路和定位某個Openstack service的位址,通常是一個URL

Keystone認證流程

以建立虛拟機為場景來介紹

1.keystone在建立虛拟機的過程中,對使用者及其他元件之間的互動進行認證

2.keystone會頒發令牌并且進行校驗

注:

部署openstack過程中需先部署Keystone

OpenStack“T版”Keystone元件部署Keystone概述部署Keystone

解析:

user—》keystone

使用者通過指令行(令牌,密鑰(API密鑰)或horizon(賬号密碼)的方式登入)

user《—keystone

驗證成功:授權權限,跳轉位址

Token包含可使用權限範圍,使用期限/Endpoint:指定nova API具體位址;控制台的UI界面,網址

user—》nova

持有令牌+endpoint向nova API發送申請建立虛拟機的請求

keystone《—nova

會向keystone進行認證令牌是否合法,有效,可用

keystone—》nova

認證成功,令牌有效

nova—》glance

nova建立虛拟機需要鏡像服務,持有令牌+Image(申請的鏡像對應的屬性,規格)向glance需求鏡像服務(鏡像本身,源資料資訊)

keystone《—glance

會向keystone進行認證令牌是否合法,有效,可用

keystone—》glance

認證成功,令牌有效,glance處理nova請求

nova《—glance

提供Image(鏡像本身)供給nova

nova—》neutron

nova建立虛拟機需要網絡服務,持有令牌+network(所需網絡資源所需要的技術,網絡資源)向neutron需求網絡服務資源

keystone《—neutron

會向keystone進行認證令牌是否合法,有效,可用

keystone—》neutron

認證成功,令牌有效,neutron處理nova請求

nova《—neutron

提供network(網絡資源)供給nova

user《—nova

建立虛拟機所需的資源準備完成,開始建立虛拟機,建立完成發送資訊給user使用者,告知虛拟機建立是否成功/失敗

部署Keystone

在OpenStack環境部署-初步搭建進一步部署

建立資料庫執行個體和資料庫使用者

[[email protected] ~]# mysql -u root -p
Enter password: 
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 28
Server version: 10.3.20-MariaDB MariaDB Server

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> create database keystone;
Query OK, 1 row affected (0.003 sec)

MariaDB [(none)]> GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' IDENTIFIED BY 'KEYSTONE_DBPASS';
Query OK, 0 rows affected (0.013 sec)

MariaDB [(none)]> GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' IDENTIFIED BY 'KEYSTONE_DBPASS';
Query OK, 0 rows affected (0.000 sec)

MariaDB [(none)]> flush privileges;
Query OK, 0 rows affected (0.004 sec)

MariaDB [(none)]> exit
Bye
           

安裝、配置keystone、資料庫、Apache

● 安裝keystone、httpd、mod_wsgi

#mod_wsgi包的作用是讓apache能夠代理python程式的元件;openstack的各個元件,包括API都是用python寫的,但通路的是apache,apache會把請求轉發給python去處理,這些包隻安裝在controler節點

[[email protected] ~]# yum -y install openstack-keystone httpd mode_wsgi
[[email protected] ~]# cp -a /etc/keystone/keystone.conf{,.bak}
[[email protected] ~]# grep -Ev "^$|#" /etc/keystone/keystone.conf.bak > /etc/keystone/keystone.conf     //通過pymysql子產品通路mysql,指定使用者名密碼、資料庫的域名、資料庫名
[[email protected] ~]# openstack-config --set /etc/keystone/keystone.conf database connection mysql+pymysql://keystone:KEYSTONE_DBPASS@ct/keystone   //指定token的提供者;提供者就是keystone自己本身
[[email protected] ~]# openstack-config --set /etc/keystone/keystone.conf token provider fernet
//Fernet:一種安全的消息傳遞格式
           

● 初始化認證服務資料庫

[[email protected] ~]# su -s /bin/sh -c "keystone-manage db_sync" keystone
           

● 初始化fernet 密鑰存儲庫(以下指令會生成兩個密鑰,生成的密鑰放于/etc/keystone/目錄下,用于加密資料)

[[email protected] keystone]# keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone
[[email protected] keystone]# keystone-manage credential_setup --keystone-user keystone --keystone-group keystone
           

● 配置bootstrap身份認證服務

[[email protected] ~]# keystone-manage bootstrap --bootstrap-password ADMIN_PASS \
--bootstrap-admin-url http://ct:5000/v3/ \
--bootstrap-internal-url http://ct:5000/v3/ \
--bootstrap-public-url http://ct:5000/v3/ \
--bootstrap-region-id RegionOne
           
#指定一個區域名稱
#此步驟是初始化openstack,會把openstack的admin使用者的資訊寫入到mysql的user表中,以及url等其他資訊寫入到mysql的相關表中; 
#admin-url是管理網(如公有雲内部openstack管理網絡),用于管理虛拟機的擴容或删除;如果共有網絡和管理網是一個網絡,則當業務量大時,會造成無法通過openstack的控制端擴容虛拟機,是以需要一個管理網; 
#internal-url是内部網絡,進行資料傳輸,如虛拟機通路存儲和資料庫、zookeeper等中間件,這個網絡是不能被外網通路的,隻能用于企業内部通路 
#public-url是共有網絡,可以給使用者通路的(如公有雲) #但是此環境沒有這些網絡,則公用同一個網絡 
#5000端口是keystone提供認證的端口 
#需要在haproxy伺服器上添加一條listen 
#各種網絡的url需要指定controler節點的域名,一般是haproxy的vip的域名(可用模式)
           

● 配置Apache HTTP伺服器

[[email protected] ~]# echo "ServerName controller" >> /etc/httpd/conf/httpd.conf
           

● 建立配置檔案

#安裝完mod_wsgi包後,會生成 wsgi-keystone.conf 這個檔案,檔案中配置了虛拟主機及監聽了5000端口,mod_wsgi就是python的網關

● 開啟服務

[[email protected] conf.d]# systemctl enable httpd
Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service.
[[email protected] conf.d]# systemctl start httpd
           

● 配置管理者賬戶的環境變量

#這些環境變量用于建立角色和項目使用,但是建立角色和項目需要有認證資訊,是以通過環境變量聲明使用者名和密碼等認證資訊,欺騙openstack已經登入且通過認證,這樣就可以建立項目和角色;也就是把admin使用者的驗證資訊通過聲明環境變量的方式傳遞給openstack進行驗證,實作針對openstack的非互動式操作

[[email protected] ~]# cat >> ~/.bashrc << EOF
export OS_USERNAME=admin			#控制台登陸使用者名
export OS_PASSWORD=ADMIN_PASS	#控制台登陸密碼
export OS_PROJECT_NAME=admin
export OS_USER_DOMAIN_NAME=Default
export OS_PROJECT_DOMAIN_NAME=Default
export OS_AUTH_URL=http://ct:5000/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2
EOF
[[email protected] ~]# source ~/.bashrc
           

● 通過配置環境變量,可以使用openstack指令進行一些操作,示例:

[[email protected] ~]# openstack user list
+----------------------------------+-------+
| ID                               | Name  |
+----------------------------------+-------+
| 249ae3ac27f54111a691e85f2743bb7c | admin |
+----------------------------------+-------+
           

建立OpenStack 域、項目、使用者和角色

● 建立一個項目(project),建立在指定的domain(域)中,指定描述資訊,project名稱為service(可使用openstack domain list 查詢)

[[email protected] ~]# openstack project create --domain default --description "Service Project" service 
+-------------+----------------------------------+
| Field       | Value                            |
+-------------+----------------------------------+
| description | Service Project                  |
| domain_id   | default                          |
| enabled     | True                             |
| id          | f872e5498b7d4c53b3480ad008f9029f |
| is_domain   | False                            |
| name        | service                          |
| options     | {}                               |
| parent_id   | default                          |
| tags        | []                               |
+-------------+----------------------------------
           

● 建立角色(可使用openstack role list檢視)

[[email protected] ~]# openstack role create user
+-------------+----------------------------------+
| Field       | Value                            |
+-------------+----------------------------------+
| description | None                             |
| domain_id   | None                             |
| id          | e1215745429844a5ad953df5ee4289d0 |
| name        | user                             |
| options     | {}                               |
+-------------+----------------------------------+
           

● 檢視openstack 角色清單

[[email protected] ~]# openstack role list
+----------------------------------+--------+
| ID                               | Name   |
+----------------------------------+--------+
| 4f18189b0d1a462687b5deb0139d2052 | user   |
| 8bba366482e3472eaa5a05bf8a899966 | reader |
| 9eebe985b9624f5fafb53fed15d72fcd | member |
| dacde8059d2249cfa93a72652accdc00 | admin  |
+----------------------------------+--------+
# admin為管理者
# member為 租戶
# user:使用者
● 檢視是否可以不指定密碼就可以擷取到token資訊(驗證認證服務)
[[email protected] ~]#  openstack token issue
           

● 小結

Keystone 元件是作為OpenStack 叢集中統一認證、授權的子產品,其核心功能就是針對于User(使用者)、Tenant(租戶)、Role(角色)、Token(令牌/憑證)的控制(手工編譯部署即圍繞此功能展開的)

User:使用 openstack 的使用者。

Tenant:租戶,可以了解為一個人、項目或者組織擁有的資源的合集。在一個租戶中可以擁有很多個使用者,這些使用者可以根據權限的劃分使用租戶中的資源。

Role:角色,用于配置設定操作的權限。角色可以被指定給使用者,使得該使用者獲得角色對應的操作權限。

Token:指的是一串比特值或者字元串,用來作為通路資源的記号。Token 中含有可通路資源的範圍和有效時間,token 是使用者的一種憑證,需要使用正确的使用者名和密碼向 Keystone 服務申請才能得到 token。

使用手動部署的模式搭建OpenStack的思路:

1、分子產品部署

2、部署keystone子產品的基礎環境(下載下傳依賴包、元件包、第三方工具/插件)

3、建立、開啟此子產品的功能(以keystone為例,建立并初始化認證資料庫、修改配置檔案、初始化密鑰-fernet格式、配置身份認證服務)

4、驗證

繼續閱讀