天天看點

OpenStack T版服務元件之Keystone身份服務一、keystone身份服務二、OpenStack-keystone元件部署

文章目錄

  • 一、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初始化認證服務資料庫

OpenStack T版服務元件之Keystone身份服務一、keystone身份服務二、OpenStack-keystone元件部署

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

           
OpenStack T版服務元件之Keystone身份服務一、keystone身份服務二、OpenStack-keystone元件部署

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
           
OpenStack T版服務元件之Keystone身份服務一、keystone身份服務二、OpenStack-keystone元件部署

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                                                                                                                                                        |
+------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+