OpenStack實驗
OpenStack命令
admin-openrc.sh 進入管理員視圖
查看當前 OpenStack 中的項目列表,驗證是否已經登錄成功
切換用戶
修改文件切換用戶
上傳文件切換用戶
OpenStack 認證管理
實驗介紹
通過 OpenStack Dashboard 和 OpenStack CLI 兩種方式創建角色、用戶、用戶組以及項 目等,并驗證不同角色的用戶的權限區別
實驗流程:
OpenStack Dashboard 操作
創建角色、用戶及用戶組
先登錄進來
彈出創建角色對話框,輸入角色名稱“Role_web”,單擊“提交”,完成角色的創建。
在左側導航欄選擇“身份管理 > 用戶”,進入用戶列表,單擊頁面右上角的“創建用 戶”。
創建用戶“User_web_01”,如下圖
創建用戶“User_web_02”,選擇角色“admin”。如下圖
查看用戶
在左側導航欄選擇“身份管理>組”,進入用戶組列表,單擊頁面右上角的“創建組”。
彈出創建用戶組對話框,輸入用戶組名稱,如“Group_web”,單擊“創建組”,完成用 戶組的創建。
返回用戶組列表,單擊待操作的用戶組所在行的“管理成員”。
進入用戶組成員列表,單擊頁面右上角的“添加用戶”。
彈出添加組用戶對話框,在下方的用戶列表中,選擇待加入用戶組的用戶,如 “User_web_01”和“User_web_02”,單擊右上角的“添加用戶”。
選擇“身份管理>用戶”,進入用戶列表,單擊用戶名稱“User_web_01”,進入用戶“概覽”頁面。
選擇“角色分配” 和 “組”頁簽,分別查看用戶的相關信息。
返回 OpenStack Dashboard 登錄界面,分別輸入用戶“User_web_01”和“User_web_02” 的用戶名和密碼,登錄后觀察兩者導航欄及菜單的不同之處。
如下圖:
左邊01右邊02
禁用用戶,刪除用戶
使用 admin 用戶登錄 OpenStack Dashboard 界面,選擇“身份管理>組”,進入用戶組列 表,單擊待操作的用戶組“Group_web”所在行的“管理成員”。
進入用戶組成員列表,勾選待移除的用戶“User_web_02”前的 ,單擊頁面右上方的 “刪除用戶”。
會發現用戶還在,所以在對應組中,刪除用戶,僅能將該用戶從該組中刪除,并不能真正在系統中刪除 該用戶。
此時還能登陸上去
在頁面左側導航欄,選擇“身份管理>用戶”,進入用戶列表,在待操作的用戶 “User_web_02”,所在行“編輯”后的 ,在彈出框中,單擊“禁用用戶”,禁用用 戶“User_web_02”。
此時就登陸不上去了
勾選待刪除的用戶“User_web_02”所在行前的 ,單擊頁面右上角的“刪除用戶”, 刪除用戶“User_web_02”。
會發現依舊登陸不上
創建項目,修改項目配額
使用 admin 用戶登錄 OpenStack Dashboard 界面,選擇“身份管理>項目”,進入項目列 表,單擊頁面右上角“創建項目”。
彈出創建項目對話框,選擇“項目信息”頁簽,填寫項目名稱,如“Project_web”,其他 保持默認。
選擇“項目成員”頁簽,在左側用戶列表,單擊待加入項目的用戶“User_web_01”后面 的 ,右側將顯示選擇的用戶。
單擊項目成員用戶后面方框中的 “ ”,在角色列表中選擇用戶在項目中所屬的角色,只勾選 “admin”。
返回項目列表,單擊項目名稱“Project_web”,進入項目概覽頁面。
選擇“用戶”頁簽,查看項目中的用戶及角色分配信息。
注銷 admin 用戶,返回 OpenStack Dashboard 登錄界面,分別輸入用戶“User_web_01” 的用戶名和密碼,登錄后切換頁面上方用戶所屬的項目“Project_web”,觀察導航欄及 菜單的變化。
使用 admin 用戶登錄 OpenStack Dashboard 界面,在頁面左側導航欄,選擇“身份管理> 項目”,進入項目列表,查看剛剛創建的項目“Project_web”,在待操作的項目所在行 的“Actions”列,單擊“管理成員”后的 ,在操作列表中選擇“修改配額”。
彈出編輯配額對話框,可分別在“計算”,“卷”和“網絡”頁簽,修改項目的默認配 額,如將實例數量修改為“5”,卷數量修改為“5”,網絡修改為“5”,并保存。
使用 User_web_01 用戶登錄 OpenStack Dashboard 界面,并在頁面左上方單擊項目,選擇 項目“Project_web”為當前所在項目。
在左側導航欄,選擇“項目>計算>概況”,查看 Project_web 項目配額的變化。
OpenStack CLI 操作
創建角色、用戶及用戶組
[root@controller ~(keystone_admin)]# openstack role list
+----------------------------------+------------------+
| ID | Name |
+----------------------------------+------------------+
| 11905eb496ca43aca1c7f37a7052204e | Role_web |
| 2b8de7e9b66c4848a0572b20ef25c360 | reader |
| 2d4eca03781045d588fca237aab5aeef | _member_ |
| 45fb4e96714e4b78a477c804df9d8128 | heat_stack_user |
| 54676e70a4cd4fb0becd4e6931d2f415 | admin |
| 65a4311a3a5a439193d9268c9c381785 | member |
| c79ce7b910fe4c9f8818bc444c32e78c | SwiftOperator |
| c81840774a25411aa06f9dd4fa2f81e7 | ResellerAdmin |
| cb08a7170d8b4bbf9d9ce5dc9fdf8233 | heat_stack_owner |
+----------------------------------+------------------+# 創建角色“Role_cli”
[root@controller ~(keystone_admin)]# openstack role create Role_cli
+-------------+----------------------------------+
| Field | Value |
+-------------+----------------------------------+
| description | None |
| domain_id | None |
| id | 259aadcbe1054a7fbc34e6b12167ab17 |
| name | Role_cli |
| options | {} |
+-------------+----------------------------------+# 創建用戶“User_cli_01”,并設置密碼
[root@controller ~(keystone_admin)]# openstack user create --domain default --project admin --password-prompt User_cli_01
User Password:
Repeat User Password:
+---------------------+----------------------------------+
| Field | Value |
+---------------------+----------------------------------+
| default_project_id | bbe6a457a15b48d792da334eb27a5d7b |
| domain_id | default |
| enabled | True |
| id | 92eac73b862348648337ab93b53da161 |
| name | User_cli_01 |
| options | {} |
| password_expires_at | None |
+---------------------+----------------------------------+# 為用戶“User_cli_01”在項目“admin”中添加角色“Role_cli”
[root@controller ~(keystone_admin)]# openstack role add --project admin --user User_cli_01 Role_cli# 創建用戶“User_cli_02”
[root@controller ~(keystone_admin)]# openstack user create --domain default --project admin --password-prompt User_cli_02
User Password:
Repeat User Password:
+---------------------+----------------------------------+
| Field | Value |
+---------------------+----------------------------------+
| default_project_id | bbe6a457a15b48d792da334eb27a5d7b |
| domain_id | default |
| enabled | True |
| id | b56a553ca3ce43d59c317b80db24632c |
| name | User_cli_02 |
| options | {} |
| password_expires_at | None |
+---------------------+----------------------------------+# 為“User_cli_02”在項目“admin”中添加角色“admin”
[root@controller ~(keystone_admin)]# openstack role add --project admin --user User_cli_02 admin# 查看角色的分配情況
[root@controller ~(keystone_admin)]# openstack role assignment list --names | grep User_cli
| Role_cli | User_cli_01@Default | | admin@Default | | | False |
| admin | User_cli_02@Default | | admin@Default | | | False |# 創建用戶組“Group_cli”
[root@controller ~(keystone_admin)]# openstack group create Group_cli
+-------------+----------------------------------+
| Field | Value |
+-------------+----------------------------------+
| description | |
| domain_id | default |
| id | 84a9dbbbd8fd4cd9bc9fe4c0efdfce89 |
| name | Group_cli |
+-------------+----------------------------------+# 為用戶組“Group_cli”添加用戶成員“User_cli_01”和“User_cli_02”
[root@controller ~(keystone_admin)]# openstack group add user Group_cli User_cli_01 User_cli_02# 編輯用戶“User_cli_01”的環境變量“User_cli_01-openrc.sh”
[root@controller ~(keystone_admin)]# cp keystonerc_admin keystonerc_User_cli_01
[root@controller ~(keystone_admin)]# vim keystonerc_User_cli_01
[root@controller ~(keystone_admin)]# cat keystonerc_User_cli_01
unset OS_SERVICE_TOKENexport OS_USERNAME=User_cli_01export OS_PASSWORD='123'export OS_REGION_NAME=RegionOneexport OS_AUTH_URL=http://192.168.108.10:5000/v3export PS1='[\u@\h \W(keystone_User_cli_01)]\$ 'export OS_PROJECT_NAME=admin
export OS_USER_DOMAIN_NAME=Default
export OS_PROJECT_DOMAIN_NAME=Default
export OS_IDENTITY_API_VERSION=3# 導入用戶“User_cli_01”的環境變量“Keystonerc_User_cli_01”
[root@controller ~(keystone_admin)]# source keystonerc_User_cli_01# 查看項目列表
[root@controller ~(keystone_User_cli_01)]# openstack project list
+----------------------------------+-------+
| ID | Name |
+----------------------------------+-------+
| bbe6a457a15b48d792da334eb27a5d7b | admin |
+----------------------------------+-------+# 編輯并導入用戶“User_cli_02”的環境變量“Keystonerc_User_cli_02”,查看項目列表
[root@controller ~(keystone_User_cli_01)]# cp keystonerc_User_cli_01 keystonerc_User_cli_02
[root@controller ~(keystone_User_cli_01)]# vim keystonerc_User_cli_02
[root@controller ~(keystone_User_cli_01)]# cat keystonerc_User_cli_02
unset OS_SERVICE_TOKENexport OS_USERNAME=User_cli_02export OS_PASSWORD='123'export OS_REGION_NAME=RegionOneexport OS_AUTH_URL=http://192.168.108.10:5000/v3export PS1='[\u@\h \W(keystone_User_cli_02)]\$ 'export OS_PROJECT_NAME=admin
export OS_USER_DOMAIN_NAME=Default
export OS_PROJECT_DOMAIN_NAME=Default
export OS_IDENTITY_API_VERSION=3[root@controller ~(keystone_User_cli_01)]# source keystonerc_User_cli_02
[root@controller ~(keystone_User_cli_02)]# openstack project list
+----------------------------------+-------------+
| ID | Name |
+----------------------------------+-------------+
| 716c695a1f0d4183ab1e07523ea2202e | services |
| bbe6a457a15b48d792da334eb27a5d7b | admin |
| cc5300b2842c4f5d8df2239d4c3f6a88 | Project_web |
+----------------------------------+-------------+
禁用用戶,刪除用戶
# 導入 keystonerc_admin 環境變量
[root@controller ~(keystone_User_cli_02)]# source keystonerc_admin# 從用戶組“Group_cli”中移除用戶“User_cli_02”
[root@controller ~(keystone_admin)]# openstack group remove user Group_cli User_cli_02# 查看用戶組“Group_cli”是否包含用戶“User_cli_02”
[root@controller ~(keystone_admin)]# openstack group contains user Group_cli User_cli_02
User_cli_02 not in group Group_cli# 禁用用戶“User_cli_02”
[root@controller ~(keystone_admin)]# openstack user set --disable User_cli_02# 查看用戶“User_cli_02”的禁用狀態
[root@controller ~(keystone_admin)]# openstack user show User_cli_02
+---------------------+----------------------------------+
| Field | Value |
+---------------------+----------------------------------+
| default_project_id | bbe6a457a15b48d792da334eb27a5d7b |
| domain_id | default |
| enabled | False |
| id | b56a553ca3ce43d59c317b80db24632c |
| name | User_cli_02 |
| options | {} |
| password_expires_at | None |
+---------------------+----------------------------------+# 刪除用戶“User_cli_02”
[root@controller ~(keystone_admin)]# openstack user delete User_cli_02# 查看用戶列表
[root@controller ~(keystone_admin)]# openstack user list
+----------------------------------+-------------+
| ID | Name |
+----------------------------------+-------------+
| 722b5603717a4a0baba50852a085a104 | heat_admin |
| 80354aafb046474f931356ddce88fb3a | glance |
| 74554775208f45d396e01c2054e6c83f | cinder |
| 1ea73e661a4d43c2a4cbced599775568 | nova |
| 90c8a920dd434345bea83c659d9bbcb9 | placement |
| f2d69fe6f9ed49beb48591b17d2e1eef | neutron |
| 99946d41b00d4168a57102ac54fe704b | swift |
| 42e30d73a9874392a870dcdb533fc51d | heat |
| 42d6a375038441298863c94ab27be75b | heat-cfn |
| 62201562bf6a4a22863715f46d344711 | gnocchi |
| 11e070c3d0ab4c1bbd5872146f054ec2 | ceilometer |
| d2b30f698e334853908ce7a34d35e7e9 | aodh |
| 98bc613c84094ac28b2bec39305394ed | user1 |
| af704f24dc304c09a051f19c9f4d4efe | admin |
| d8b2f14b850c44f3a295b65285ad8e63 | User_web_01 |
| 92eac73b862348648337ab93b53da161 | User_cli_01 |
+----------------------------------+-------------+
創建項目,修改項目配額
# 創建項目“Project_cli”
[root@controller ~(keystone_admin)]# openstack project create --domain default Project_cli
+-------------+----------------------------------+
| Field | Value |
+-------------+----------------------------------+
| description | |
| domain_id | default |
| enabled | True |
| id | 94883d4c6d624e5892ee7ead7c50c4c8 |
| is_domain | False |
| name | Project_cli |
| options | {} |
| parent_id | default |
| tags | [] |
+-------------+----------------------------------+# 為用戶“User_cli_01”在項目“Project_cli”中添加角色“admin”
[root@controller ~(keystone_admin)]# openstack role add --project Project_cli --user User_cli_01 admin# 查看角色的分配情況
[root@controller ~(keystone_admin)]# openstack role assignment list --names | grep User_cli_01
| admin | User_cli_01@Default | | Project_cli@Default | | | False |
| Role_cli | User_cli_01@Default | | admin@Default | | | False |# 修改用戶“User_cli_01”的環境變量“keystonerc_User_cli_01”,修改“OS_PTOJECT_NAME”參數為“Project_cli”
[root@controller ~(keystone_admin)]# vim keystonerc_User_cli_01
[root@controller ~(keystone_admin)]# cat keystonerc_User_cli_01
unset OS_SERVICE_TOKENexport OS_USERNAME=User_cli_01export OS_PASSWORD='123'export OS_REGION_NAME=RegionOneexport OS_AUTH_URL=http://192.168.108.10:5000/v3export PS1='[\u@\h \W(keystone_User_cli_01)]\$ 'export OS_PROJECT_NAME=Project_cli
export OS_USER_DOMAIN_NAME=Default
export OS_PROJECT_DOMAIN_NAME=Default
export OS_IDENTITY_API_VERSION=3# 導入用戶“User_cli_01”的環境變量
[root@controller ~(keystone_admin)]# source keystonerc_User_cli_01# 查看項目列表
[root@controller ~(keystone_User_cli_01)]# openstack project list
+----------------------------------+-------------+
| ID | Name |
+----------------------------------+-------------+
| 716c695a1f0d4183ab1e07523ea2202e | services |
| 94883d4c6d624e5892ee7ead7c50c4c8 | Project_cli |
| bbe6a457a15b48d792da334eb27a5d7b | admin |
| cc5300b2842c4f5d8df2239d4c3f6a88 | Project_web |
+----------------------------------+-------------+# # # 查看項目“Project_cli”的默認配額
[root@controller ~(keystone_User_cli_01)]# openstack quota show Project_cli
+-----------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Field | Value
+-----------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| backup-gigabytes | 1000
| backups | 10
| cores | 20
| fixed-ips | -1
| floating-ips | 50
| gigabytes | 1000
......# 修改項目“Project_cli”的默認配額,如將實例數量修改為“5”,卷數量修改為“5”,網絡修改為“10”
[root@controller ~(keystone_User_cli_01)]# openstack quota set --instances 5 --networks 10 Project_cli# 查看項目“Project_cli”配額的變化
[root@controller ~(keystone_User_cli_01)]# openstack quota show Project_cli | grep -E "instances|volumes|networks"
| instances | 5
| networks | 10
| volumes | 10
| volumes___DEFAULT__ | -1
| volumes_iscsi | -1
OpenStack管理
OpenStack認證管理-Keystone
Keystone基本概念
查看domain:
[root@controller ~]# source keystonerc_admin[root@controller ~(keystone_admin)]# openstack domain list
+----------------------------------+---------+---------+--------------------+
| ID | Name | Enabled | Description |
+----------------------------------+---------+---------+--------------------+
| 6ad6299115e74253a30e0d3f98447454 | heat | True | |
| default | Default | True | The default domain |
+----------------------------------+---------+---------+--------------------+
創建domain并驗證:
[root@controller ~(keystone_admin)]# openstack domain create domain-test
+-------------+----------------------------------+
| Field | Value |
+-------------+----------------------------------+
| description | |
| enabled | True |
| id | 54a2a5bb1c40447d82eb7ae7e9e5c505 |
| name | domain-test |
| options | {} |
| tags | [] |
+-------------+----------------------------------+
[root@controller ~(keystone_admin)]# openstack domain list
+----------------------------------+-------------+---------+--------------------+
| ID | Name | Enabled | Description |
+----------------------------------+-------------+---------+--------------------+
| 54a2a5bb1c40447d82eb7ae7e9e5c505 | domain-test | True | |
| 6ad6299115e74253a30e0d3f98447454 | heat | True | |
| default | Default | True | The default domain |
+----------------------------------+-------------+---------+--------------------+
刪除domain:
[root@controller ~(keystone_admin)]# openstack domain set --disable domain-test
[root@controller ~(keystone_admin)]# openstack domain delete domain-test
[root@controller ~(keystone_admin)]# openstack domain list
+----------------------------------+---------+---------+--------------------+
| ID | Name | Enabled | Description |
+----------------------------------+---------+---------+--------------------+
| 6ad6299115e74253a30e0d3f98447454 | heat | True | |
| default | Default | True | The default domain |
+----------------------------------+---------+---------+--------------------+
開啟多域登錄界面:
[root@controller ~(keystone_admin)]# cd /etc/openstack-dashboard/
[root@controller openstack-dashboard(keystone_admin)]# ls
cinder_policy.json keystone_policy.json local_settings.d nova_policy.d
glance_policy.json local_settings neutron_policy.json nova_policy.json
[root@controller openstack-dashboard(keystone_admin)]# vim local_settings
[root@controller openstack-dashboard(keystone_admin)]# systemctl restart httpd
測試,Default要大寫,小寫也有可能能進去
列出所有用戶:
[root@controller openstack-dashboard(keystone_admin)]# openstack user list
+----------------------------------+------------+
| ID | Name |
+----------------------------------+------------+
| af704f24dc304c09a051f19c9f4d4efe | admin |
| 722b5603717a4a0baba50852a085a104 | heat_admin |
| 80354aafb046474f931356ddce88fb3a | glance |
| 74554775208f45d396e01c2054e6c83f | cinder |
| 1ea73e661a4d43c2a4cbced599775568 | nova |
| 90c8a920dd434345bea83c659d9bbcb9 | placement |
| f2d69fe6f9ed49beb48591b17d2e1eef | neutron |
| 99946d41b00d4168a57102ac54fe704b | swift |
| 42e30d73a9874392a870dcdb533fc51d | heat |
| 42d6a375038441298863c94ab27be75b | heat-cfn |
| 62201562bf6a4a22863715f46d344711 | gnocchi |
| 11e070c3d0ab4c1bbd5872146f054ec2 | ceilometer |
| d2b30f698e334853908ce7a34d35e7e9 | aodh |
+----------------------------------+------------+
創建新用戶:user1
[root@controller openstack-dashboard(keystone_admin)]# openstack user create --password 123 user1
+---------------------+----------------------------------+
| Field | Value |
+---------------------+----------------------------------+
| domain_id | default |
| enabled | True |
| id | 91086361c3404451b9533da51567f51b |
| name | user1 |
| options | {} |
| password_expires_at | None |
+---------------------+----------------------------------+# 可以看到最后一行有新創建的用戶
[root@controller openstack-dashboard(keystone_admin)]# openstack user list
+----------------------------------+------------+
| ID | Name |
+----------------------------------+------------+
| af704f24dc304c09a051f19c9f4d4efe | admin |
| 722b5603717a4a0baba50852a085a104 | heat_admin |
| 80354aafb046474f931356ddce88fb3a | glance |
| 74554775208f45d396e01c2054e6c83f | cinder |
| 1ea73e661a4d43c2a4cbced599775568 | nova |
| 90c8a920dd434345bea83c659d9bbcb9 | placement |
| f2d69fe6f9ed49beb48591b17d2e1eef | neutron |
| 99946d41b00d4168a57102ac54fe704b | swift |
| 42e30d73a9874392a870dcdb533fc51d | heat |
| 42d6a375038441298863c94ab27be75b | heat-cfn |
| 62201562bf6a4a22863715f46d344711 | gnocchi |
| 11e070c3d0ab4c1bbd5872146f054ec2 | ceilometer |
| d2b30f698e334853908ce7a34d35e7e9 | aodh |
| 91086361c3404451b9533da51567f51b | user1 |
+----------------------------------+------------+
創建組group1,并將user1加入group1:
#創建組group1
[root@controller ~(keystone_admin)]# openstack group create group1
+-------------+----------------------------------+
| Field | Value |
+-------------+----------------------------------+
| description | |
| domain_id | default |
| id | 34d9437240224d3e9bee84e5c91b8fc1 |
| name | group1 |
+-------------+----------------------------------+#查看group1組詳細信息
[root@controller ~(keystone_admin)]# openstack group show group1
+-------------+----------------------------------+
| Field | Value |
+-------------+----------------------------------+
| description | |
| domain_id | default |
| id | 34d9437240224d3e9bee84e5c91b8fc1 |
| name | group1 |
+-------------+----------------------------------+#列出所有的組
[root@controller ~(keystone_admin)]# openstack group list
+----------------------------------+--------+
| ID | Name |
+----------------------------------+--------+
| 34d9437240224d3e9bee84e5c91b8fc1 | group1 |
+----------------------------------+--------+#將user1加入group1
[root@controller ~(keystone_admin)]# openstack group add user group1 user1#查看user1是否隸屬于group1
[root@controller ~(keystone_admin)]# openstack group contains user group1 user1
user1 in group group1
查看角色role:
[root@controller ~(keystone_admin)]# openstack role list
+----------------------------------+------------------+
| ID | Name |
+----------------------------------+------------------+
| 2b8de7e9b66c4848a0572b20ef25c360 | reader |
| 2d4eca03781045d588fca237aab5aeef | _member_ |
| 45fb4e96714e4b78a477c804df9d8128 | heat_stack_user |
| 54676e70a4cd4fb0becd4e6931d2f415 | admin |
| 65a4311a3a5a439193d9268c9c381785 | member |
| c79ce7b910fe4c9f8818bc444c32e78c | SwiftOperator |
| c81840774a25411aa06f9dd4fa2f81e7 | ResellerAdmin |
| cb08a7170d8b4bbf9d9ce5dc9fdf8233 | heat_stack_owner |
+----------------------------------+------------------+
給group1賦予角色admin:
[root@controller ~(keystone_admin)]# openstack role add --project admin --group group1 admin
驗證group1角色:
[root@controller ~(keystone_admin)]# openstack role assignment list --names --group group1
+-------+------+----------------+---------------+--------+--------+-----------+
| Role | User | Group | Project | Domain | System | Inherited |
+-------+------+----------------+---------------+--------+--------+-----------+
| admin | | group1@Default | admin@Default | | | False |
+-------+------+----------------+---------------+--------+--------+-----------+
創建ProjectA:
# 創建項目
[root@controller ~(keystone_admin)]# openstack project create ProjectA
+-------------+----------------------------------+
| Field | Value |
+-------------+----------------------------------+
| description | |
| domain_id | default |
| enabled | True |
| id | d5688b50c2e44446a2e95d296cb39e68 |
| is_domain | False |
| name | ProjectA |
| options | {} |
| parent_id | default |
| tags | [] |
+-------------+----------------------------------+# ProjeectA分配給用戶user1
[root@controller ~(keystone_admin)]# openstack user set --project ProjectA user1# 給項目ProjectA里的用戶user1賦予角色admin
[root@controller ~(keystone_admin)]# openstack role add --user user1 --project ProjectA admin
修改ProjectA配額:
#將Project配額設置為實例3,vcpu 5,內存5000MB
[root@controller ~(keystone_admin)]# openstack quota set --instance 3 --cores 5 --ram 5000 ProjectA
通過命令直接查看
[root@controller ~(keystone_admin)]# openstack quota show ProjectA
查看OpenStack有哪些服務:
[root@controller ~(keystone_admin)]# openstack service list
+----------------------------------+------------+----------------+
| ID | Name | Type |
+----------------------------------+------------+----------------+
| 121782ebe4b049ecacb9b791bb13df18 | glance | image |
| 13bd574cafa44350a22b99a508ab3554 | cinderv2 | volumev2 |
| 1def18b4581349c39d81f12c56e05c6a | gnocchi | metric |
| 1f15d96c0e4f4ee5819dba94b0b8e04c | keystone | identity |
| 435c65c9e7a24d7ea6e3e2135bcba73c | ceilometer | metering |
| 4e602636205947f680d94b86e39b49f8 | neutron | network |
| 5bcb0e5bf76040ddbeea2b14cc9eefa9 | swift | object-store |
| 601d6141de604cf880f73db65fef16a8 | nova | compute |
| 74aa195726f14d0c89246e9fe2486ef5 | heat | orchestration |
| 7a9389af49e44202b153935b6bc365c5 | heat-cfn | cloudformation |
| a263b55ea6f046379c754b1ec26d7682 | aodh | alarming |
| b0892edfc68d433ba35945c015012e13 | placement | placement |
| cdcb39f19c5742bda56166a228f8b331 | cinderv3 | volumev3 |
+----------------------------------+------------+----------------+
查看OpenStack endpoint:
[root@controller ~(keystone_admin)]# openstack endpoint list[root@controller ~(keystone_admin)]# openstack endpoint list | grep nova
查看catalog:
[root@controller ~(keystone_admin)]# openstack catalog list
Keystone核心概念
作為 OpenStack 的基礎支持服務,Keystone 做下面這幾件事情:
- 管理用戶及其權限
- 維護 OpenStack Services 的 Endpoint
- Authentication(認證)和 Authorization(鑒權)
Credentials(憑證)
定義:用戶用于證明自身身份的 “信物”,是發起認證請求的前提。
作用:Keystone 通過驗證 Credentials 的有效性,判斷用戶是否有權限進入下一步認證流程(類似 “鑰匙” 或 “身份證”)。
常見類型:
- 密碼(Password):最常用的憑證,如用戶設置的賬號密碼。
- 令牌(Token):二次認證時使用(如已通過密碼認證后,用 Token 訪問其他服務)。
- 密鑰對(Access Key/Secret Key):用于 API 調用的長期憑證(適合自動化腳本、服務間通信)。
- 多因素認證(MFA):額外安全層,如手機驗證碼、U 盾等。
Authentication(認證)
定義:Keystone 驗證用戶身份的過程,核心是 “確認‘你是誰’”。
作用:防止未授權用戶訪問 OpenStack 系統,是權限控制的第一道防線。
核心流程:
- 用戶向 Keystone 提交 Credentials(如 “用戶名 + 密碼”);
- Keystone 校驗 Credentials 有效性(如查詢數據庫中存儲的用戶密碼哈希);
- 校驗通過:生成并返回 Token(后續訪問的 “臨時通行證”);
- 校驗失敗:拒絕請求并返回錯誤(如 “密碼錯誤”)。
Token(令牌)
定義:Keystone 認證通過后發放的臨時訪問憑證,相當于用戶在 OpenStack 內的 “臨時身份證”。
作用:避免用戶每次訪問服務都重復提交 Credentials(如密碼),同時限定訪問范圍和有效期。
關鍵特性:
- 臨時性:默認有效期較短(如幾小時),過期后需重新認證獲取新 Token(降低泄露風險)。
- 包含元數據:Token 內封裝用戶身份、所屬 Project、擁有的 Role 等信息,服務可直接解析 Token 確認權限(無需再次請求 Keystone)。
- 兩種類型:
- 菲亞特令牌(Fernet Token):OpenStack 主流類型,加密的短字符串,無需存儲在 Keystone 數據庫(輕量化);
- UUID 令牌:長隨機字符串,需存儲在 Keystone 數據庫(已逐步被 Fernet 替代)。
Project(項目)
定義:OpenStack 中用于隔離資源和權限的邏輯單元(早期稱為 Tenant,租戶),可理解為 “資源容器” 或 “團隊空間”。
作用:
- 資源隔離:不同 Project 間的資源(如虛擬機、云硬盤、網絡)完全獨立,A Project 的用戶無法直接訪問 B Project 的資源;
- 權限邊界:用戶的權限(如創建虛擬機、刪除云硬盤)必須綁定到具體 Project,不存在 “全局無邊界權限”。
常見場景: - 企業內按部門劃分 Project(如 “研發部 Project”“市場部 Project”);
- 云服務商按客戶劃分 Project(每個客戶一個獨立 Project,隔離數據和資源)。
Service(服務)
定義:OpenStack 中的核心功能模塊,即用戶需要訪問的 “業務能力”(如計算、存儲、網絡服務)。
作用:Keystone 通過統一管理 Service,實現 “一站式認證”—— 用戶只需通過 Keystone 認證一次,即可訪問所有已授權的 Service,無需重復登錄。
OpenStack 典型 Service:
Service 名稱 | 英文全稱 | 核心功能 |
---|---|---|
Nova | Compute Service | 虛擬機創建與管理(計算服務) |
Cinder | Block Storage | 云硬盤創建與管理(塊存儲) |
Neutron | Networking | 虛擬網絡配置(網絡服務) |
Swift | Object Storage | 海量文件存儲(對象存儲) |
Glance | Image Service | 虛擬機鏡像管理(鏡像服務) |
Endpoint(端點)
定義:Service 的網絡訪問地址,即用戶 / 其他服務調用該 Service API 的 “入口 URL”。
作用:Keystone 作為 “服務注冊表”,存儲所有 Service 的 Endpoint;用戶通過 Token 向 Keystone 請求 “某 Service 的 Endpoint” 后,即可直接訪問該 Service(無需記住復雜的 IP/URL)。
三種類型:
- Public Endpoint:公開可訪問的地址(如互聯網用戶訪問云服務的入口);
- Internal Endpoint:OpenStack 內部服務間通信的地址(如 Nova 調用 Neutron 的地址,不對外暴露);
- Admin Endpoint:管理員專用地址(如執行服務配置、用戶管理等操作,僅管理員可訪問)。
Role(角色)
定義:預先定義的權限集合,用于批量分配權限(類似 “權限模板”),核心是 “定義‘你能做什么’”。
作用:避免對每個用戶單獨分配權限(如 “允許創建虛擬機”“允許刪除云硬盤”),通過 “角色綁定” 實現權限的批量管理,簡化權限維護。
安全包含兩部分:Authentication(認證)和 Authorization(鑒權)
- Authentication 解決的是“你是誰?”的問題
Authorization 解決的是“你能干什么?”的問題
核心邏輯:Role Binding(角色綁定)
權限的生效必須滿足 “用戶 - 角色 - 項目” 三者綁定(即 “在某個 Project 中,給某個用戶分配某個 Role”),三者缺一不可:
- 例 1:給用戶 “Alice” 在 “研發部 Project” 綁定 “Admin” 角色 → Alice 可在研發部 Project 執行所有操作(如刪除資源、管理用戶);
- 例 2:給用戶 “Bob” 在 “市場部 Project” 綁定 “Member” 角色 → Bob 僅可在市場部 Project 執行基礎操作(如創建虛擬機、查看資源)。
OpenStack 默認 Role:
- Admin:項目內最高權限,可執行所有操作(如管理用戶、刪除資源);
- Member:項目內普通權限,可使用資源(如創建虛擬機、上傳鏡像),但無法管理用戶或刪除他人資源;
- Reader:只讀權限,僅可查看資源(如列表虛擬機、查看網絡配置),無法修改或創建資源。
OpenStack鏡像管理-glance
公有云(華為云)鏡像概念
解釋說明
-
鏡像
是一個包含了操作系統及必要配置的彈性云服務器模板,使用鏡像可以創建彈性云服務器。
-
公共鏡像
公共鏡像是云平臺提供的常見的標準操作系統鏡像,所有用戶可見,包括操作系統以及預裝的公共應用。公共鏡像具有高度穩定性,皆為正版授權,您也可以根據實際需求自助配置應用環境或相關軟件。
-
私有鏡像
基于云服務器或外部鏡像文件等方式創建的個人鏡像,僅用戶自己可見。包含操作系統、預裝的公共應用以及用戶的私有應用。選擇私有鏡像創建云服務器,可以節省您重復配置云服務器的時間。
更多信息,請參見怎樣制作私有鏡像?
-
共享鏡像
您可以接受云平臺其他用戶共享的私有鏡像,作為自己的鏡像進行使用。
更多信息,請參見怎樣共享鏡像?
-
市場鏡像
提供預裝操作系統、應用環境和各類軟件的優質第三方鏡像。無需配置,可一鍵部署,滿足建站、應用開發、可視化管理等個性化需求。
Glance在OpenStack中的作用
Glance架構
查看glalnce-api配置文件,觀察與database通信的部分:
glance的配置文件在/etc/glance
目錄下:
[root@controller ~]# cd /etc/glance/
[root@controller glance]# vim /etc/glance/glance-api.conf
連接數據庫查看現象:
[root@controller ~]# mysql
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 36545
Server version: 10.3.28-MariaDB MariaDB ServerCopyright (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)]> show databases;
+--------------------+
| Database |
+--------------------+
| aodh |
| cinder |
| glance |
| gnocchi |
| heat |
| information_schema |
| keystone |
| mysql |
| neutron |
| nova |
| nova_api |
| nova_cell0 |
| performance_schema |
| placement |
| test |
+--------------------+
15 rows in set (0.010 sec)# 切換到指定的glance數據庫
MariaDB [(none)]> use glance;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -ADatabase changed
# 查看所有當前數據庫中的所有表
MariaDB [glance]> show tables;
+----------------------------------+
| Tables_in_glance |
+----------------------------------+
| alembic_version |
| image_locations |
| image_members |
| image_properties |
| image_tags |
| images |
| metadef_namespace_resource_types |
| metadef_namespaces |
| metadef_objects |
| metadef_properties |
| metadef_resource_types |
| metadef_tags |
| migrate_version |
| task_info |
| tasks |
+----------------------------------+
15 rows in set (0.000 sec)
鏡像image、實例instance、規格flavor三者區別
鏡像、實例和規格的關系:
用戶可以從同一個鏡像啟動任意數量的實例
每個啟動的實例都是基于鏡像的一個副本,實例上的任何修改都不會影響到鏡像
啟動實例時,必須指定一個規格,實例按照規格使用資源
Glance磁盤格式
磁盤格式 | 描述 |
---|---|
vhd | Xen,Microsoft,VirtualBox等使用的常見磁盤格式 |
vhdx | vhd格式的增強版本,支持更大的磁盤容量和其他功能 |
vmdk | VMware常見的磁盤格式 |
vdi | VirtualBox和QEMU支持的磁盤格式 |
iso | 光盤(例如CDROM)的存檔格式 |
ploog | Virtuozzo支持和使用的磁盤格式,用于運行OS Containers |
qcow2 | QEMU支持的磁盤格式,支持動態擴展和寫時復制 |
aki | Amazon Kernel Image |
ari | Amazon Ramdisk Image |
ami | Amazon Machine Image |
raw | 一種非結構化的磁盤鏡像格式 |
Glance狀態機
Glance中有兩種狀態機:鏡像狀態和任務狀態
鏡像狀態 | 描述 |
---|---|
queued | 已在glance-registry中保留鏡像標識符,但鏡像數據未上傳,鏡像大小未初始化 |
saving | 鏡像的原始數據正在上傳到Glance中 |
uploading | 對鏡像調用了import data-put請求 |
importing | 導入鏡像中,但鏡像尚未就緒 |
active | 鏡像創建完成,可以使用 |
deactivated | 禁止任何非管理員用戶訪問鏡像 |
killed | 鏡像上傳時出錯,鏡像不可用 |
deleted | Glance保留了鏡像信息,但不能繼續使用,鏡像在一定時間后會被自動清理掉 |
pending_delete | 類似deleted,Glance尚未刪除鏡像數據,處于該狀態的鏡像可恢復 |
任務狀態 | 描述 |
---|---|
pending | 任務掛起 |
processing | 任務正在處理中 |
success | 任務執行成功 |
failure | 任務執行失敗 |
上傳鏡像實驗
所選鏡像:cirros-0.5.2-x86_64-disk.img和TinyCore-12.0.iso
把這兩個文件拖放到controller節點的/root目錄。觀察兩個文件磁盤格式
[root@controller ~]# ls
admin-openrc.sh answers.txt cirros-0.5.2-x86_64-disk.img keystonerc_user1 keystonerc_User_cli_02
anaconda-ks.cfg answers.txt.bak keystonerc_admin keystonerc_User_cli_01 TinyCore-12.0.iso# 磁盤格式qcow2
[root@controller ~]# qemu-img info cirros-0.5.2-x86_64-disk.img
image: cirros-0.5.2-x86_64-disk.img
file format: qcow2
virtual size: 112 MiB (117440512 bytes)
disk size: 15.5 MiB
cluster_size: 65536
Format specific information:compat: 1.1compression type: zliblazy refcounts: falserefcount bits: 16corrupt: falseextended l2: false
[root@controller ~]# qemu-img info TinyCore-12.0.iso
image: TinyCore-12.0.iso
file format: raw
virtual size: 20 MiB (20971520 bytes)
disk size: 20 MiB
# 查找鏡像
[root@controller ~]# find / -name 1e6e5f49-1ea1-41d2-98dc-6cc977ebb831
/var/lib/glance/images/1e6e5f49-1ea1-41d2-98dc-6cc977ebb831# 去mysql中查找
[root@controller ~]# mysql
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 40904
Server version: 10.3.28-MariaDB MariaDB ServerCopyright (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)]> show databases;
+--------------------+
| Database |
+--------------------+
| aodh |
| cinder |
| glance |
| gnocchi |
| heat |
| information_schema |
| keystone |
| mysql |
| neutron |
| nova |
| nova_api |
| nova_cell0 |
| performance_schema |
| placement |
| test |
+--------------------+
15 rows in set (0.000 sec)MariaDB [(none)]> use glance;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -ADatabase changed
MariaDB [glance]> show tables;
+----------------------------------+
| Tables_in_glance |
+----------------------------------+
| alembic_version |
| image_locations |
| image_members |
| image_properties |
| image_tags |
| images |
| metadef_namespace_resource_types |
| metadef_namespaces |
| metadef_objects |
| metadef_properties |
| metadef_resource_types |
| metadef_tags |
| migrate_version |
| task_info |
| tasks |
+----------------------------------+
15 rows in set (0.000 sec)MariaDB [glance]> select id,value from image_locations;
+----+--------------------------------------------------------------------+
| id | value |
+----+--------------------------------------------------------------------+
| 1 | file:///var/lib/glance/images/1e6e5f49-1ea1-41d2-98dc-6cc977ebb831 |
| 2 | file:///var/lib/glance/images/1957bf94-e18e-402a-9aca-80a0128d1911 |
+----+--------------------------------------------------------------------+
2 rows in set (0.000 sec)MariaDB [glance]>