目錄
- Keystone身份服務
- Keystone職能
- Keystone提供路徑指引服務前提
- 主要功能
- 主要管理物件
- Keystone認證流程圖
- 注:
- 專案:配置Keystone
- 創建資料庫實體和資料庫用戶
- 安裝、配置keystone、資料庫、Apache
- 創建OpenStack 域、專案、用戶和角色
- 總結
Keystone身份服務
Keystone職能
- Keystone (OpenStack ldentityService)是OpenStack中的一個獨立的提供安全認證的模塊,主要負責openstack用戶的身份認證、令牌管理、提供訪問資源的服務目錄(指引路徑)、以及基于用戶角色的訪問控制,
Keystone提供路徑指引服務前提
- Keystone類似一個服務總線,或者說是整個Openstack框架的注冊表,其他服務通過keystone來注冊其服務的Endpoint(服務訪問的URL),任何服務之間相互的呼叫,需要經過Keystone的身份驗證,來獲得目標服務的Endpoint來找到目標服務,
主要功能
- 身份認證(Authentication) :令牌的發放和校驗
- 用戶授權(Authorization):授予用戶在一個服務中所擁有權限
- 用戶管理(Account) :管理用戶賬戶
- 服務目錄(Service Catalog):提供可用服務的API端點
主要管理物件
User、Credentials、Authentication、Token、Project、Service、Endpoint、Role
- User:指使用Openstack service的用戶,
- Project(Tenant):可以理解為一個人、或服務所擁有的資源集合,
- Role:用于劃分權限,通過給User指定Role,使User獲得Role對應操作權限
- Authentication:確定用戶身份的程序,
- Token:是一個字串表示,作為訪問資源的令牌,Token包含了在指定范圍和有效時間內,可以被訪問的資源,
- Credentials:用于確認用戶身份的憑證,用戶的用戶名和密碼,或者是用戶名和API密鑰,或者身份管理服務提供的認證令牌,
- Service: Openstack service,即Openstack中運行的組件服務,如swift、glance、neutron、cinder等,
- Endpoint:一個可以通過網路來訪問和定位某個Openstack service的地址,通常是一個URL,
Keystone認證流程圖
虛擬機創建流程

注:
部署openstack程序中需先部署Keystone
專案:配置Keystone
繼OpenStack環境部署-初步搭建進一步部署
創建資料庫實體和資料庫用戶
[root@ct ~]# 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
1. 安裝keystone、httpd、mod_wsgi
- #mod_wsgi包的作用是讓apache能夠代理pythone程式的組件;openstack的各個組件,包括API都是用python寫的,但訪問的是apache,apache會把請求轉發給python去處理,這些包只安裝在controler節點
[root@ct ~]# yum -y install openstack-keystone httpd mode_wsgi
[root@ct ~]# cp -a /etc/keystone/keystone.conf{,.bak}
[root@ct ~]# grep -Ev "^$|#" /etc/keystone/keystone.conf.bak > /etc/keystone/keystone.conf //通過pymysql模塊訪問mysql,指定用戶名密碼、資料庫的域名、資料庫名
[root@ct ~]# openstack-config --set /etc/keystone/keystone.conf database connection mysql+pymysql://keystone:KEYSTONE_DBPASS@ct/keystone //指定token的提供者;提供者就是keystone自己本身
[root@ct ~]# openstack-config --set /etc/keystone/keystone.conf token provider fernet
//Fernet:一種安全的訊息傳遞格式
2. 初始化認證服務資料庫
[root@ct ~]# su -s /bin/sh -c "keystone-manage db_sync" keystone
3. 初始化fernet 密鑰存盤庫(以下命令會生成兩個密鑰,生成的密鑰放于/etc/keystone/目錄下,用于加密資料)
[root@ct ~]# keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone
[root@ct ~]# keystone-manage credential_setup --keystone-user keystone --keystone-group keystone
4. 配置bootstrap身份認證服務
[root@ct ~]# 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的域名(高可用模式)
5. 配置Apache HTTP服務器
[root@ct ~]# echo "ServerName controller" >> /etc/httpd/conf/httpd.conf
6. 創建組態檔
安裝完mod_wsgi包后,會生成 wsgi-keystone.conf 這個檔案,檔案中配置了虛擬主機及監聽了5000埠,mod_wsgi就是python的網關
[root@ct ~]# ln -s /usr/share/keystone/wsgi-keystone.conf /etc/httpd/conf.d/
7. 開啟服務
[root@ct ~]# systemctl enable httpd
Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service.
[root@ct ~]# systemctl start httpd
[root@ct ~]# systemctl status httpd
● httpd.service - The Apache HTTP Server
Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled)
Active: active (running) since 四 2021-02-18 16:04:16 CST; 14s ago
Docs: man:httpd(8)
man:apachectl(8)
Main PID: 21557 (httpd)
Status: "Total requests: 0; Current requests/sec: 0; Current traffic: 0 B/sec"
CGroup: /system.slice/httpd.service
├─21557 /usr/sbin/httpd -DFOREGROUND
├─21558 (wsgi:keystone- -DFOREGROUND
├─21559 (wsgi:keystone- -DFOREGROUND
├─21560 (wsgi:keystone- -DFOREGROUND
├─21561 (wsgi:keystone- -DFOREGROUND
├─21562 (wsgi:keystone- -DFOREGROUND
├─21567 /usr/sbin/httpd -DFOREGROUND
├─21570 /usr/sbin/httpd -DFOREGROUND
├─21574 /usr/sbin/httpd -DFOREGROUND
├─21578 /usr/sbin/httpd -DFOREGROUND
└─21582 /usr/sbin/httpd -DFOREGROUND
2月 18 16:04:16 ct systemd[1]: Starting The Apache HTTP Server...
2月 18 16:04:16 ct systemd[1]: Started The Apache HTTP Server.
8. 配置管理員賬戶的環境變數
- 這些環境變數用于創建角色和專案使用,但是創建角色和專案需要有認證資訊,所以通過環境變數宣告用戶名和密碼等認證資訊,欺騙openstack已經登錄且通過認證,這樣就可以創建專案和角色;也就是把admin用戶的驗證資訊通過宣告環境變數的方式傳遞給openstack進行驗證,實作針對openstack的非互動式操作
[root@ct ~]# 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
[root@ct ~]# source ~/.bashrc
9. 通過配置環境變數,可以使用openstack命令進行一些操作,示例:
[root@ct ~]# openstack user list
+----------------------------------+-------+
| ID | Name |
+----------------------------------+-------+
| 09a752a6b18d48f2ae1f472599e94c5a | admin |
+----------------------------------+-------+
創建OpenStack 域、專案、用戶和角色
1. 創建一個專案(project),創建在指定的domain(域)中,指定描述資訊,project名稱為service(可使用openstack domain list 查詢)
[root@ct ~]# openstack project create --domain default --description "Service Project" service
+-------------+----------------------------------+
| Field | Value |
+-------------+----------------------------------+
| description | Service Project |
| domain_id | default |
| enabled | True |
| id | 70a6fc6eb82f48dfa3d66d5389dcea3e |
| is_domain | False |
| name | service |
| options | {} |
| parent_id | default |
| tags | [] |
+-------------+----------------------------------+
2. 創建角色(可使用openstack role list查看)
[root@ct ~]# openstack project create --domain default --description "Service Project" service
+-------------+----------------------------------+
| Field | Value |
+-------------+----------------------------------+
| description | Service Project |
| domain_id | default |
| enabled | True |
| id | 70a6fc6eb82f48dfa3d66d5389dcea3e |
| is_domain | False |
| name | service |
| options | {} |
| parent_id | default |
| tags | [] |
+-------------+----------------------------------+
[root@ct ~]# openstack role create user
+-------------+----------------------------------+
| Field | Value |
+-------------+----------------------------------+
| description | None |
| domain_id | None |
| id | d0e42f995f29415c87705af0e7754ddc |
| name | user |
| options | {} |
+-------------+----------------------------------+
3. 查看openstack 角色串列
[root@ct ~]# openstack role list
+----------------------------------+--------+
| ID | Name |
+----------------------------------+--------+
| 06feb1be0b964169bffa214af2435c56 | reader |
| 34755268537741189a3f9242010e1e68 | member |
| d0e42f995f29415c87705af0e7754ddc | user |
| d9523d7587d54236ab48b6e9f1e7462f | admin |
+----------------------------------+--------+
admin為管理員
member為 租戶
user:用戶
4. 查看是否可以不指定密碼就可以獲取到token資訊(驗證認證服務)
[root@ct ~]# openstack token issue
+------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Field | Value |
+------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| expires | 2021-02-18T09:27:10+0000 |
| id | gAAAAABgLiTedvBu5lIbeJPJ-gUoWoIJx_NpRWcaTFjWf-oN_x5q6AhkYN0WUBvlLKR8nO9RJRJmczdvOlD9h7Kl-Cp-d3Fvd3knzrhY8nEKKW2TA16JTd6KmN9UeczQtQL9nLJn5wnum8AQ6OLp_mfYukFMC7tlBKDfYa8Eugxoj164BwTfeTg |
| project_id | 667d2c1d9fca46a690b830e6864580c9 |
| user_id | 09a752a6b18d48f2ae1f472599e94c5a |
+------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
至此,keystone部署完成
總結
Keystone 組件是作為OpenStack 集群中統一認證、授權的模塊,其核心功能就是針對于User(用戶)、Tenant(租戶)、Role(角色)、Token(令牌/憑證)的控制(手工編譯部署即圍繞此功能展開的)
- User:使用 openstack 的用戶,
- Tenant:租戶,可以理解為一個人、專案或者組織擁有的資源的合集,在一個租戶中可以擁有很多個用戶,這些用戶可以根據權限的劃分使用租戶中的資源,
- Role:角色,用于分配操作的權限,角色可以被指定給用戶,使得該用戶獲得角色對應的操作權限,
- Token:指的是一串位元值或者字串,用來作為訪問資源的記號,Token 中含有可訪問資源的范圍和有效時間,token
是用戶的一種憑證,需要使用正確的用戶名和密碼向 Keystone 服務申請才能得到 token,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/260972.html
標籤:其他
上一篇:如何在SpringBoot專案中給所有請求加個固定前綴呢?
下一篇:Kotlin手記-(2)變數
