文章目錄
- 一、keystone身份服務
-
- 1.1Keystone身份服務概述
- 1.2Keystone身份服務主要功能
- 1.3管理對象
- 1.4Keystone認證流程
- 二、OpenStack-keystone元件部署
-
- 2.1OpenStack元件安裝的順序
- 2.2建立資料庫執行個體和資料庫使用者
- 2.3安裝、配置keystone、資料庫、Apache
-
- 2.3.1安裝keystone、httpd、mod_wsgi
- 2.3.2初始化認證服務資料庫
- 2.3.3初始化fernet密鑰存儲庫
- 2.3.4配置bootstrap身份認證服務
- 2.3.5配置Apache HTTP伺服器
- 2.3.6建立配置檔案
- 2.3.7配置管理者賬戶的環境變量
- 2.3.8配置環境變量
- 2.3.9建立OpenStack 域、項目、使用者和角色
- 2.3.10建立角色(可使用openstack role list檢視)
- 2.3.11檢視openstack 角色清單
- 2.3.12檢視是否可以不指定密碼就可以擷取到token資訊(驗證認證服務)
一、keystone身份服務
1.1Keystone身份服務概述
- Keystone是OpenStack中的一個獨立的提供安全認證的子產品,主要負責OpenStack使用者的身份認證、領跑管理、提供通路資源的服務目錄、以及基于使用者角色的通路控制
- keystone類似一個服務總線,或者說是整個OpenStack架構的系統資料庫,其他服務通過keystone來注冊其服務的Endpoint(服務通路的URL),任何服務之間互相的調用,需要經過keystone的身份驗證,來獲得目标服務的Endpoint來找到目标服務
1.2Keystone身份服務主要功能
- 身份認證:對使用者進行身份認證,并對應權限範圍,令牌的發放和校驗
- 使用者授權:授予使用者在一個服務中所擁有權限,以token令牌的方式辨別使用者對應擁有的權限範圍
- 使用者管理:提供使用者通路資源的尋址功能(URL),管理使用者賬戶
- 服務目錄:所有服務的互動、調用,均需要keystone進行認證,提供可用服務的API端點
1.3管理對象
- User:指使用Openstack service的使用者,nova glance(跑在OpenStack裡面,是需要一個使用者進行管理的)
- Project(Tenant):可以了解為一個人或服務所擁有的資源集合
- Role:用于劃分權限,通過給User指定Role, 使User獲得Role對應操作權限
- Authentication:确定使用者身份的過程
- Token:是一個字元串表示,作為通路資源的令牌。Token包含了在指定範圍和有效時間内可以被通路的資源
- Credentials:用于确認使用者身份的憑證,使用者的使用者名和密碼,或者是使用者名和API密鑰,或者身份管理服務提供的認證令牌。
- Service Openstack service, 即Openstack中運作的元件服務。如nova、swift、glance、 neutron、 cinder等
- Endpoint:一個可以通過網絡來通路和定位某個Openstack service的位址,通常是一個URL(即apache的api (位置點))
1.4Keystone認證流程
- user登陸(keystone認證)
- user進入控制台/指令行界面(位置點)
- user發起建立虛拟的請求(向keystone認證指引位置點)
- 請求達到nova元件(向keystone認證)
- nova會開始執行請求,并且調用建立執行個體所需要的glance、neutron等資源(向keystone認證,指引對應服務的位置點)
- glance和neutron服務收到請求後(向keystone認證)
- nova 拿到資源後,調用對應資源,建立執行個體,最後将建立結果傳回給使用者
二、OpenStack-keystone元件部署
2.1OpenStack元件安裝的順序
- Keystone(apache)
- glance
- nova
- neutron
-
cinder
①部署OpenStack元件時,需先行安裝認證服務(keystone),而認證服務是使用Apache運作的,安裝完成後才可以建立、管理賬号,然後安裝鏡像服務(glance)、計算服務(nova)、網絡服務(neutron)
②其中計算服務和網絡服務分為管理端和用戶端,是以需要在OpenStack的管理安裝計算服務和網絡服務的管理端,在建立虛拟機的node接地那上安裝計算服務和網絡用戶端,最後安裝dashboard服務,OpenStack各種元件的API都是通過Apache運作的
③OpenStack的管理端負責建立、管理虛拟機過程的排程
④通過OpenStack管理端建立虛拟機的相關資料最終都會記錄到mysql(mariadb)中;node節點沒有權限往資料庫中寫資料,隻有控制端有權限,并且node節點與控制住端通訊是通過rabbitmq間接通訊,node節點會監聽rabbitmq,控制端也會監聽rabbitmq,控制端把建立虛拟機的指令發送到rabbitmq,由監聽rabbitmq指定隊列的node節點接收消息并建立虛拟機
2.2建立資料庫執行個體和資料庫使用者
[[email protected] ~]# mysql -uroot -p123456
MariaDB [(none)]> create database keystone;
MariaDB [(none)]> grant all privileges on keyston.* to 'keystone'@'localhost'identified by 'keystone_dbpass';
MariaDB [(none)]> grant all privileges on keystone.* to 'keystone'@'%' identified by 'keystone_dbpass';
MariaDB [(none)]> flush privileges;
MariaDB [(none)]> exit
2.3安裝、配置keystone、資料庫、Apache
2.3.1安裝keystone、httpd、mod_wsgi
###mod_wsgi包的作用是讓apache能夠代理python程式的元件;OpenStack的各個元件,包括API都是用Python寫的,但是通路的是apache,apache會把請求轉發給Python去處理,這些包隻安裝在controler節點
[[email protected] ~]# yum -y install openstack-keystone httpd mod_wsgi
[[email protected] ~]# cd /etc/keystone/
[root@ct keystone]# cp -a keystone.conf{,.bak}
[root@ct keystone]# grep -Ev "^$|#" keystone.conf.bak >keystone.conf
###通過pymysql子產品通路mysql,指定使用者名密碼、資料庫的域名、資料庫名
[root@ct keystone]# openstack-config --set /etc/keystone/keystone.conf database connection mysql+pymysql://keystone:keystone_dbpass@/keystone
###指定token的提供者;提供者就是keystone自己本身
[root@ct keystone]# openstack-config --set /etc/keystone/keystone.conf token provider fernet
//Fernet:一種安全的消息傳遞格式
2.3.2初始化認證服務資料庫
2.3.3初始化fernet密鑰存儲庫
- 以下指令會生成兩個密鑰,生成的密鑰放于/etc/keystone/目錄下,用于加密資料
[root@ct keystone]# keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone
[root@ct keystone]# keystone-manage credential_setup --keystone-user keystone --keystone-group keystone
2.3.4配置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提供認證的端口
以下部分指的是openstack多節點的配置
- 需要在haproxy伺服器上添加一條listen
- 各種網絡的url需要指定controler節點的域名,一般是haproxy的vip的域名(高可用模式)
2.3.5配置Apache HTTP伺服器
[[email protected] ~]# echo “ServerName controller” >> /etc/httpd/conf/httpd.conf
2.3.6建立配置檔案
### 安裝完mod_wsgi包後,會生成 wsgi-keystone.conf 這個檔案,檔案中配置了虛拟主機及監聽了5000端口,mod_wsgi就是python的網關
[[email protected] ~]# ln -s /usr/share/keystone/wsgi-keystone.conf /etc/httpd/conf.d
### 開啟服務
[[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
2.3.7配置管理者賬戶的環境變量
- 這些環境變量用于建立角色和項目使用,但是建立角色和項目需要有認證資訊,是以通過環境變量聲明使用者名和密碼等認證資訊,欺騙openstack已經登入且通過認證,這樣就可以建立項目和角色;也就是把admin使用者的驗證資訊通過聲明環境變量的方式傳遞給openstack進行驗證,實作針對openstack的非互動式操作
[[email protected] ~]# vim ~/.bashrc
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
[[email protected] ~]# source ~/.bashrc
2.3.8配置環境變量
- 使用OpenStack指令進行操作
[[email protected] ~]# openstack user list
+----------------------------------+-------+
| ID | Name |
+----------------------------------+-------+
| 1f3c53ab11d44c29baa5cc695e8dc668 | admin |
+----------------------------------+-------+
2.3.9建立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 | 09e78e5f60e84a6ca9126d22aba9be45 |
| is_domain | False |
| name | service |
| options | {} |
| parent_id | default |
| tags | [] |
+-------------+----------------------------------+
2.3.10建立角色(可使用openstack role list檢視)
[[email protected] ~]# openstack role create user
+-------------+----------------------------------+
| Field | Value |
+-------------+----------------------------------+
| description | None |
| domain_id | None |
| id | ec18e9b44ec2492aaa0cee6672ede992 |
| name | user |
| options | {} |
+-------------+----------------------------------+
2.3.11檢視openstack 角色清單
[[email protected] ~]# openstack role list
+----------------------------------+--------+
| ID | Name |
+----------------------------------+--------+
| 18df1bb710b94f0bababbf0bd8b73bdd | admin |
| 52f458601bef4c249f0ca58ee27e2db8 | reader |
| ec18e9b44ec2492aaa0cee6672ede992 | user |
| fa1cefb2e33c44af9e702bcb4edecac3 | member |
+----------------------------------+--------+
2.3.12檢視是否可以不指定密碼就可以擷取到token資訊(驗證認證服務)
[[email protected] ~]# openstack token issue
+------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Field | Value |
+------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| expires | 2021-08-23T18:39:38+0000 |
| id | gAAAAABhI91apTG9bXptc8q3Zjb7X6Qx0UZSZN5VqHmChvCLLc3zNT6sbDU9B0KSfjaVmeAclQVIUrFAHaipSk7edIvyFXEdwjiKCSJ3rljWZQnnJ3Ci5SeySiLZoUQuxzz7r4atVX-RdfU3Bqt5wIwAsfVQyDqyEGGzdUtmtZCXorYWO5n7f2U |
| project_id | af6f14b190dc4cefba54d4f3773baa69 |
| user_id | 1f3c53ab11d44c29baa5cc695e8dc668 |
+------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+