openstack學習筆記之三:keystone安裝部署

1、Keystone的架構

Keystone(OpenStack Identity Service)是 OpenStack 框架中負責管理身份驗證、服務規則和服務令牌功能的模塊。Keystone作爲Openstack的核心模塊,爲Nova(計算),Glance(鏡像),Swift(對象存儲),Cinder(塊存儲),Neutron(網絡)以及Horizon(Dashboard)提供身份驗證和授權服務。Keystone架構如圖1-1所示。
openstack學習筆記之三:keystone安裝部署

除了涉及到Keystone模塊之外,還有KeystoneMiddleware子項目,KeystoneMiddleware是對Keystone提供的對令牌合法性進行驗證的中間件,緩存了相關的證書和令牌信息。
Keystone項目本身,除了後端的數據庫,主要包含了一個處理RestFful請求的API服務進程,這些API涵蓋了Identity、Token、Catalogy和Plolicy提供的各種各種服務,不同的服務都是有相應的後端Driver(BackendDriver)來實現。

2、 Keystone的基本概念

 User
  User即用戶,他們代表可以通過keystone進行訪問的人、服務或程序。Users通過認證信息(credentials,如密碼、API Keys等)進行驗證。
 Tenant 新版叫Project
  Tenant即租戶,它是各個服務中的一些可以訪問的資源集合。例如,在Nova中一個tenant可以是一些機器,在Swift和Glance中一個tenant可以是一些鏡像存儲,在Neutron中一個tenant可以是一些網絡資源。Users默認的總是綁定到某些tenant上。
 Role
  Role即角色,Roles代表一組用戶可以訪問的資源權限,例如Nova中的虛擬機、Glance中的鏡像。Users可以被添加到任意一個全局的或租戶的角色中。在全局的role中,用戶的role權限作用於所有的租戶,即可以對所有的租戶執行role規定的權限;在租戶內的role中,用戶僅能在當前租戶內執行role規定的權限。
 Service
Service即服務,如Nova、Glance、Swift。根據前三個概念(User,Tenant和Role)一個服務可以確認當前用戶是否具有訪問其資源的權限。但是當一個user嘗試着訪問其租戶內的service時,他必須知道這個service是否存在以及如何訪問這個service,這裏通常使用一些不同的名稱表示不同的服務。
 Endpoint
Endpoint,翻譯爲“端點”,我們可以理解它是一個服務暴露出來的訪問點,如果需要訪問一個服務,則必須知道他的endpoint。因此,在keystone中包含一個endpoint模板,這個模板提供了所有存在的服務endpoints信息。一個endpoint template包含一個URLs列表,列表中的每個URL都對應一個服務實例的訪問地址,並且具有public、private和admin這三種權限。public url可以被全局訪問(如http://compute.example.com),private url只能被局域網訪問(如http://compute.example.local),admin url被從常規的訪問中分離。
 Token
Token是訪問openstack資源的鑰匙。它是通過Keystone驗證後的返回值,在之後的與其他服務交互中只需要攜帶Token值即可。用戶已經確認身份後每個Token都有一個有效期,Token只在有效期內是有效的。

3、上述概念之間的關係

各種概念之間的關係如圖1-2所示。
openstack學習筆記之三:keystone安裝部署
圖1-2 各個概念之間的關係
1、租戶下,管理着一堆用戶(人,或程序)。
2、每個用戶都有自己的credentials(憑證)用戶名+密碼或者用戶名+API key,或其他憑證。
3、用戶在訪問其他資源(計算、存儲)之前,需要用自己的credential去請求keystone服務,獲得驗證信息(主要是Token信息)和服務信息(服務目錄和它們的endpoint)。
4、用戶拿着Token信息,就可以去訪問特點的資源了。

4、keystone在Openstack中的工作流程實例

Keystone在OpenStack中的工作流程如圖1-3所示。
openstack學習筆記之三:keystone安裝部署
圖1-3 keystone在OpenStack中的工作流程

5、實戰:Keystone的手動搭建

備註:爲方便操作,密碼均使用openstack

5.1 控制節點的安裝配置

數據庫相關操作:
[root@controller ~]# mysql -uroot -popenstack <<EOF
create database keystone;
GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' IDENTIFIED BY 'openstack'; GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%'  IDENTIFIED BY 'openstack';
EOF
安裝相關包並配置
[root@controller ~]# yum -y install openstack-keystone httpd mod_wsgi -y
[root@controller ~]# vim /etc/keystone/keystone.conf 
[database] 
connection = mysql+pymysql://keystone:openstack@controller/keystone
[token] 
provider = fernet
初始化數據庫,創建數據結構:
[root@controller ~]# su -s /bin/sh -c "keystone-manage db_sync" keystone
[root@controller ~]# mysql -hlocalhost -ukeystone -popenstack -e "use keystone;show tables;"
初始化fernet密鑰存儲庫
[root@controller ~]# keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone 
[root@controller ~]# keystone-manage credential_setup --keystone-user keystone --keystone-group keystone
創建keystone的服務端口:
[root@controller ~]# keystone-manage bootstrap --bootstrap-password openstack --bootstrap-admin-url http://controller:35357/v3/  --bootstrap-internal-url http://controller:5000/v3/ --bootstrap-public-url  http://controller:5000/v3/  --bootstrap-region-id RegionOne
配置http 服務
[root@controller ~]# vim /etc/httpd/conf/httpd.conf 
ServerName controller
給/usr/share/keystone/wsgi-keystone.conf創建一個軟連接(通過httpd發佈)
[root@controller ~]# ln -s /usr/share/keystone/wsgi-keystone.conf /etc/httpd/conf.d/
服務啓動並設置開機自啓
[root@controller ~]# systemctl enable httpd.service &&  systemctl start httpd.service
創建管理員賬號
[root@controller ~]# vim admin_openrc
export OS_USERNAME=admin 
export OS_PASSWORD=openstack 
export OS_PROJECT_NAME=admin 
export OS_USER_DOMAIN_NAME=Default 
export OS_PROJECT_DOMAIN_NAME=Default 
export OS_AUTH_URL=http://controller:35357/v3 
export OS_IDENTITY_API_VERSION=3

5.2 創建域、項目、用戶和角色

創建service租戶
[root@controller ~]# source admin_openrc
[root@controller ~]# openstack project create --domain default --description "Service Project" service
+-------------+----------------------------------+
| Field       | Value                            |
+-------------+----------------------------------+
| description | Service Project                  |
| domain_id   | default                          |
| enabled     | True                             |
| id          | d83f6daf971b4e9986a0062187593b56 |
| is_domain   | False                            |
| name        | service                          |
| parent_id   | default                          |
| tags        | []                               |
+-------------+----------------------------------+
創建demo租戶
[root@controller ~]# openstack project create --domain default --description "Demo Project" demo
+-------------+----------------------------------+
| Field       | Value                            |
+-------------+----------------------------------+
| description | Demo Project                     |
| domain_id   | default                          |
| enabled     | True                             |
| id          | f14a6d3761374969a246a0298c603ec3 |
| is_domain   | False                            |
| name        | demo                             |
| parent_id   | default                          |
| tags        | []                               |
+-------------+----------------------------------+
下面這句要分開執行,要輸入密碼:
創建用戶
[root@controller ~]# openstack user create --domain default --password-prompt demo
User Password:
Repeat User Password:
+---------------------+----------------------------------+
| Field               | Value                            |
+---------------------+----------------------------------+
| domain_id           | default                          |
| enabled             | True                             |
| id                  | 24cb008774ef4261a615364101001f43 |
| name                | demo                             |
| options             | {}                               |
| password_expires_at | None                             |
+---------------------+----------------------------------+
[root@controller ~]# openstack role create user 
+-----------+----------------------------------+
| Field     | Value                            |
+-----------+----------------------------------+
| domain_id | None                             |
| id        | 754ea87392464f0e90dfac519d9002d5 |
| name      | user                             |
+-----------+----------------------------------+
將demo用戶添加到demo角色中
[root@controller ~]# openstack role add --project demo --user demo user
[root@controller ~]# openstack user list
+----------------------------------+-------+
| ID                               | Name  |
+----------------------------------+-------+
| 24cb008774ef4261a615364101001f43 | demo  |
| 6b9ad33971ae453983f4290cb4c0c380 | admin |
+----------------------------------+-------+

openstack學習筆記之三:keystone安裝部署

[root@controller ~]# openstack project list
+----------------------------------+---------+
| ID                               | Name    |
+----------------------------------+---------+
| d83f6daf971b4e9986a0062187593b56 | service |
| db82536ef7124608b3f3931ba4ce9615 | admin   |
| f14a6d3761374969a246a0298c603ec3 | demo    |
+----------------------------------+---------+

openstack學習筆記之三:keystone安裝部署

[root@controller ~]# openstack role list
+----------------------------------+-------+
| ID                               | Name  |
+----------------------------------+-------+
| 754ea87392464f0e90dfac519d9002d5 | user  |
| c5930f0961104f12aaaab694bd5c8639 | admin |
+----------------------------------+-------+

openstack學習筆記之三:keystone安裝部署

[root@controller ~]# openstack endpoint list
---------+-----------+-----------------------------+
| ID | Region | Service Name | Service Type | Enabled | Interface | URL |
---------+-----------+-----------------------------+
| 01ccfab5acb0407888620ca056f93dfe | RegionOne | keystone     | identity     | True    | admin     | http://controller:35357/v3/ |
| 4c2bd465260043039bcf7bf78776dd6b | RegionOne | keystone     | identity     | True    | internal  | http://controller:5000/v3/  |
| bdc34c7c99bb432eb13fa83a45d0065e | RegionOne | keystone     | identity     | True    | public    | http://controller:5000/v3/  |
---------+-----------+-----------------------------+

5.3 驗證

[root@controller ~]# unset OS_AUTH_URL OS_PASSWORD
下面這句要分開執行,要輸入admin用戶的密碼:
[root@controller ~]# openstack --os-auth-url http://controller:35357/v3 \
--os-project-domain-name Default \
--os-user-domain-name Default \
--os-project-name admin  \
--os-username admin token issue
Password: 
+------------+--------------------------------------------+
| Field      | Value                                    |
+------------+--------------------------------------------+
| expires    | 2020-03-16T16:37:24+0000                        |
| id         | gAAAAABeb5009UNgv97bPsYxet9Vz3UG6ywl3L-u04rJY1M7uO6Vq9NLhzejFLnEA6vcbR1nsmu5iVh0-Z32pm3p0UDSMgoAMirHcYnHaJXesly2Gh1tvnz5dKAzh31vbXW-gdMcGMxe7geqPmQMKSHKXmXFEN1F9H5elKw_eyNIhWCyCwe6_iA |
| project_id | db82536ef7124608b3f3931ba4ce9615 |
| user_id | 6b9ad33971ae453983f4290cb4c0c380 |
+------------+---------------------------------------------+
下面這句要分開執行,要輸入demo用戶的密碼:
[root@controller ~]# openstack --os-auth-url http://controller:5000/v3 \
--os-project-domain-name Default \
--os-user-domain-name Default \
--os-project-name demo --os-username demo token issue
執行結果:
Password: 
+------------+------------------------------------------------+
| Field      | Value                                         |
+------------+--------------------------------------+
| expires    | 2020-03-16T16:37:58+0000                      |
| id         | gAAAAABeb51Wsct3Yi_BPrfj1isFihwQKgV_h-I1H8gvoT4Grvesol3lK_RqolZHV07eUd5l0HYrBBqdZaowJq_QbvzpjEtWG4BbyZlNg0mrI1zeIeAZZdkcdkQA7Pb9iZ7twqJtVuTsdd2z7SzoAcIqd47uMPjcHD-Veo2xRZRXtnCwDw1IlWE |
| project_id | f14a6d3761374969a246a0298c603ec3           |
| user_id    | 24cb008774ef4261a615364101001f43           |
+------------+------------------------------------------------------+

5.4 創建openstack客戶端的腳本環境

創建管理員的賬號
[root@controller ~]# vim 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=openstack
export OS_AUTH_URL=http://controller:35357/v3 
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2
創建demo用戶的賬號
[root@controller ~]# vim 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=openstack
export OS_AUTH_URL=http://controller:5000/v3 
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2
使用腳本驗證 
[root@controller ~]# source admin_openrc 
[root@controller ~]# openstack token issue
可獲取token admin用戶的token

openstack學習筆記之三:keystone安裝部署

[root@controller ~]# source demo_openrc 
[root@controller ~]# openstack token issue
可以獲取token demo用戶的token

openstack學習筆記之三:keystone安裝部署

至此完成keystone的安裝,下一章節簡介Glance 組件,以及它的安裝過程

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