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