OpenStack 管理与基础操作学习笔记(一):角色、用户及项目管理实践

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 做下面这几件事情:

  1. 管理用户及其权限
  2. 维护 OpenStack Services 的 Endpoint
  3. Authentication(认证)和 Authorization(鉴权)

Credentials(凭证)

定义:用户用于证明自身身份的 “信物”,是发起认证请求的前提。
作用:Keystone 通过验证 Credentials 的有效性,判断用户是否有权限进入下一步认证流程(类似 “钥匙” 或 “身份证”)。
常见类型

  • 密码(Password):最常用的凭证,如用户设置的账号密码。
  • 令牌(Token):二次认证时使用(如已通过密码认证后,用 Token 访问其他服务)。
  • 密钥对(Access Key/Secret Key):用于 API 调用的长期凭证(适合自动化脚本、服务间通信)。
  • 多因素认证(MFA):额外安全层,如手机验证码、U 盾等。

Authentication(认证)

定义:Keystone 验证用户身份的过程,核心是 “确认‘你是谁’”。
作用:防止未授权用户访问 OpenStack 系统,是权限控制的第一道防线。
核心流程

  1. 用户向 Keystone 提交 Credentials(如 “用户名 + 密码”);
  2. Keystone 校验 Credentials 有效性(如查询数据库中存储的用户密码哈希);
  3. 校验通过:生成并返回 Token(后续访问的 “临时通行证”);
  4. 校验失败:拒绝请求并返回错误(如 “密码错误”)。

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 名称英文全称核心功能
NovaCompute Service虚拟机创建与管理(计算服务)
CinderBlock Storage云硬盘创建与管理(块存储)
NeutronNetworking虚拟网络配置(网络服务)
SwiftObject Storage海量文件存储(对象存储)
GlanceImage 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磁盘格式

磁盘格式描述
vhdXen,Microsoft,VirtualBox等使用的常见磁盘格式
vhdxvhd格式的增强版本,支持更大的磁盘容量和其他功能
vmdkVMware常见的磁盘格式
vdiVirtualBox和QEMU支持的磁盘格式
iso光盘(例如CDROM)的存档格式
ploogVirtuozzo支持和使用的磁盘格式,用于运行OS Containers
qcow2QEMU支持的磁盘格式,支持动态扩展和写时复制
akiAmazon Kernel Image
ariAmazon Ramdisk Image
amiAmazon Machine Image
raw一种非结构化的磁盘镜像格式

Glance状态机

Glance中有两种状态机:镜像状态和任务状态

镜像状态描述
queued已在glance-registry中保留镜像标识符,但镜像数据未上传,镜像大小未初始化
saving镜像的原始数据正在上传到Glance中
uploading对镜像调用了import data-put请求
importing导入镜像中,但镜像尚未就绪
active镜像创建完成,可以使用
deactivated禁止任何非管理员用户访问镜像
killed镜像上传时出错,镜像不可用
deletedGlance保留了镜像信息,但不能继续使用,镜像在一定时间后会被自动清理掉
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]>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/98046.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/98046.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

直接查找试卷且可以免费下载

有什么网站可以直接查找试卷且可以免费下载? SearXNG开源元搜索引擎 This website shows the SearXNG public instances searx一个可定制的搜索引擎 分享一个基于Blockstack的DApp-searx,一个可定制的搜索引擎。 1- 链接 官网地址:https://searx.worl…

【独立版】智创云享知识付费小程序 v5.0.23+小程序 搭建教程

介绍智创云享知识付费小程序v5.0.23 含PC、小程序、H5 、前端,系统独立版已修复已知bug问题。框架是一款基于ThinkPHP框架开发的虚拟资源知识付费小程序,为广大创业者、自媒体及培训机构提供知识付费、内容付费、资源变现等领域的行业解决方案&#xff1…

布尔运算-区间dp

面试题 08.14. 布尔运算 - 力扣(LeetCode) Solution 这题的思路比较直接,就是枚举最后一个进行计算的运算符,但是在实现过程中需要注意,定义范式f(l,r)表示l到r范围,l和r必须为数字,l1,r-1为运…

MyBatis-Plus 扩展全局方法

1.文件内容package com.ruoyi.business.mybatisplus.base;import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.extension.service.IService;import java.util.List;/*** 扩展的 Service 接口* 所有自定义 Service 接口都需要继承此接口…

13.Linux OpenSSH 服务管理

文章目录Linux OpenSSH 服务管理环境准备OpenSSH 服务介绍SSH 介绍SSH 建立连接的过程加密类型双向加密过程使用 ssh 访问远端CLIssh 工具演示ssh工具配置文件配置 ssh 密钥认证ssh 故障模拟故障模拟排故故障自定义 SSH 服务配置文件禁止 root 登录禁止密码登录只允许特定用户登…

速通ACM省铜第五天 赋源码(MEX Count)

目录 引言: MEX Count 题意分析 逻辑梳理 代码实现 结语: 引言: 本来,今天我是想着出俩题或三题题解的,但是在打第一题的时候就天塌了,导致今天就只搓了一道题,这题的难度在CF中为1300的水准&…

【数据结构与算法-Day 27】堆的应用:从堆排序到 Top K 问题,一文彻底搞定!

Langchain系列文章目录 01-玩转LangChain:从模型调用到Prompt模板与输出解析的完整指南 02-玩转 LangChain Memory 模块:四种记忆类型详解及应用场景全覆盖 03-全面掌握 LangChain:从核心链条构建到动态任务分配的实战指南 04-玩转 LangChai…

企业即时通讯保障企业通讯安全,提升企业部门协作效率

在当今数字化转型的大潮中,企业即时通讯软件已从单纯的沟通工具,逐步演变为保障企业数据安全的核心基础设施。吱吱企业即时通讯软件通过“私有化部署全流程加密”的双重机制,为企业构建了一套集“通讯安全”与“部门协作”于一体的数字化解决…

《华为变革法:打造可持续进步的组织》读书笔记

推荐序一:变革是企业活下去的基础(胡彦平)华为前常务副总裁、变革指导委员会成员胡彦平在序言中强调,企业存续的核心命题是应对不确定性,而变革能力是破解这一命题的唯一答案。他以华为 30 余年的发展历程为例&#xf…

第二篇:排序算法的简单认识【数据结构入门】

排序算法的分类标准 时间复杂度分类 a. 简单排序算法:时间复杂度O(n),冒泡排序、选择排序、插入排序; b. 高级排序算法:时间复杂度O(n logn),快速排序、归并排序、堆排序; c. 线性排序算法:时间…

快速掌握Dify+Chrome MCP:打造网页操控AI助手

你是否曾经希望那些强大的开源大模型能更贴合你的专业领域,或者学会模仿你的行文风格?其实,实现这个目标的关键就在于“微调”。曾几何时,微调模型是大公司的专属游戏——动不动就需要几十张GPU和复杂的分布式训练技术。 而现在&…

单词记忆-轻松记忆10个实用英语单词(15)

1. repaint含义:重新油漆 读音标注:/ˌriːˈpeɪnt/ 例句:We need to repaint the walls after the repairs. 译文:修理完成后需要重新粉刷墙壁。 衍生含义:重新绘制(图像场景);翻新…

visual studio快捷键

1.visual studio代码格式化快捷键 1.CtrlA(全选) 2.CtrlK 3.CtrlF2.多行注释 1.Ctrlk 2.Ctrlc2.多行取消注释 1.Ctrlk 2.Ctrlu

Django全栈班v1.04 Python基础语法 20250913 下午

练习:个人信息收集器 任务:创建一个个人信息收集和展示程序 要求: 收集用户的姓名,年龄,城市,爱好验证年龄输入,必须是正数格式化输出用户信息计算用户出生年份 name input("请输入姓名&a…

学习海康VisionMaster之字符缺陷检测

前言:差不多三个月没更新了,天天码代码,实在是太忙了,有时候也在想这么忙到底是不是工作方法的问题,怎么样才能变成大师呢! 一:进一步学习 今天学习下VisionMaster中的字符缺陷检测&#xff1…

若依4.8.1打包war后在Tomcat无法运行,404报错的一个解决方法

背景 最近使用若依4.8.1进行二次开发,接着尝试打包成war包进行部署,结果出现了404,提示“HTTP状态 404 - 未找到,请求的资源[/ruoyi-admin/]不可用”,翻了网上的教程,包括看了官方的解疑都没有说到该情况。…

华清远见25072班网络编程学习day6

重点内容:数据库基本概念:数据(Data):能够输入计算机并能被计算机程序识别和处理的信息集合数据 (Database)数据库是在数据库管理系统管理和控制之下,存放在存储介质上的数据集合重要概念&#…

机器学习-网络架构搜索

Neural Architecture Search(NAS) 一个神经网络有不同类型的超参数 拓扑结构:resnet,mobilenet 单独层:核大小,卷积层的通道,输出隐藏单元的个数NAS自动设计神经网络 如何设计搜索空间 如何探索…

云手机在办公领域中自动化的应用

云手机在办公自动化领域正逐渐展现出强大的潜力,以下是其在办公中自动化应用的多方面介绍:企业借助云手机搭载的办公软件,可实现文档处理自动化,对于重复性文档任务,如制作每月固定格式的销售报告、财务报表等&#xf…

c++多线程(3)------休眠函数sleep_for和sleep_until

操作系统:ubuntu22.04 IDE:Visual Studio Code 编程语言:C11 算法描述 这两个函数都定义在 头文件中,属于 std::this_thread 命名空间,用于让当前线程暂停执行一段时间。函数功能sleep_for(rel_time)让当前线程休眠一段相对时间&…