openstack对镜像权限开放 场景分析 (1)背景 某OpenStack云平台有两个租户,A租户与B租户,分别属于两个部门,该公司对镜像的管理比较严格,镜像都由管理员进行上传和权限管理。 (
- 场景分析
(1)背景
某OpenStack云平台有两个租户,A租户与B租户,分别属于两个部门,该公司对镜像的管理比较严格,镜像都由管理员进行上传和权限管理。
(2)诉求
该公司有一个镜像,需要共享给A租户使用,对B租户不可见,实现这种方式最简单的方式,是由A租户中的用户自行上传镜像,这样A租户里面的用户可以看见该镜像,而B租户中的用户看不见。但是现在镜像不能由普通用户去上传,只能通过管理员进行操作。
(3)解决方案
通过管理员上传该镜像,并使用相关命令开放给A租户。
登录OpenStack平台,创建租户depA和depB,并且在这两个租户下各创一个用户userA和userB的普通用户,创建完之后(创建过程不再赘述)
[root@controller ~]# source /etc/keystone/admin-openrc.sh
[root@controller ~]# openstack project list
+----------------------------------+---------+
| ID | Name |
+----------------------------------+---------+
| 04a7be4d89a04a48a9a41a8057c3a045 | demo |
| 3beab2dd6bd94fa3ad81fbd06ca584e0 | depA |
| 3ddafa07c84640b19943f80f235e8cac | service |
| 4ca4043915984ed3a50b5d70b1f66feb | depB |
| bf36698d9afd45c4b46c1933469a9101 | admin |
+----------------------------------+---------+
[root@controller ~]# openstack user list
+----------------------------------+-------------------+
| ID | Name |
+----------------------------------+-------------------+
| 010afff7d2924bc3bacc61c8c76c1c4b | nova |
| 1d5bd18258044f3e948b48cd45dc6b81 | userB |
| 25f32050e0a94da49768b4febd4486bc | barbican |
| 320f2793652d404ea6ce79a4007e806f | heat_domain_admin |
| 34b40a9a53b84cac8d98654910862938 | demo |
| 489dc6695a77406eb1a773d463b4c841 | glance |
| 5b3e1e3cf32f4c31a535dadcd48135b8 | neutron |
| 5fe5db55da2a4d10ba59cb5913cc9ccd | userA |
| 6edeb159c80049bea70fec001f7b7dbf | heat |
| 81997190056048dcb9458512b2cdcb56 | placement |
| 8c5e980e66b24c048e5147ae0290b210 | cinder |
| 97ef3d67343f456b83b0ea24f7224680 | swift |
| beafd0ad1b67482e968af2c8a6575c26 | admin |
+----------------------------------+-------------------+
可以看见租户与用户均已存在。
上传镜像使用cirros-0.3.4-x86_64-disk.img上传至控制节点的/root目录下,并上传至云平台中
[root@controller ~]# glance image-create --name cirros --disk-format qcow2 --container-format bare --progress < cirros-0.3.4-x86_64-disk.img
[=============================>] 100%
+------------------+--------------------------------------+
| Property | Value |
+------------------+--------------------------------------+
| checksum | ee1eca47dc88f4879d8a229cc70a07c6 |
| container_format | bare |
| created_at | 2022-05-07T16:16:56Z |
| disk_format | qcow2 |
| id | 746c6ae9-f916-4820-bec7-a383ad3684b0 |
| min_disk | 0 |
| min_ram | 0 |
| name | cirros |
| owner | bf36698d9afd45c4b46c1933469a9101 |
| protected | False |
| size | 13287936 |
| status | active |
| tags | [] |
| updated_at | 2022-05-07T16:16:58Z |
| virtual_size | None |
| visibility | shared |
+------------------+--------------------------------------+
上传镜像后,userA和userB都不能看到该镜像。接下来做相关配置,使得A租户中的用户可以看到该镜像。
权限配置首先将镜像共享给A租户
命令格式: glance member-create <镜像id> <租户depA的id>
[root@controller ~]# glance member-create 746c6ae9-f916-4820-bec7-a383ad3684b0 3beab2dd6bd94fa3ad81fbd06ca584e0
+--------------------------------------+----------------------------------+---------+
| Image ID | Member ID | Status |
+--------------------------------------+----------------------------------+---------+
| 746c6ae9-f916-4820-bec7-a383ad3684b0 | 3beab2dd6bd94fa3ad81fbd06ca584e0 | pending |
+--------------------------------------+----------------------------------+---------+
注:如果创建错误可以:glance member-delete <镜像id> <租户id>删除
在共享之后,镜像的状态是pending状态,此时还需要激活镜像
[root@controller ~]# glance member-update 746c6ae9-f916-4820-bec7-a383ad3684b0 3beab2dd6bd94fa3ad81fbd06ca584e0 accepted
+--------------------------------------+----------------------------------+----------+
| Image ID | Member ID | Status |
+--------------------------------------+----------------------------------+----------+
| 746c6ae9-f916-4820-bec7-a383ad3684b0 | 3beab2dd6bd94fa3ad81fbd06ca584e0 | accepted |
+--------------------------------------+----------------------------------+----------+
此时镜像的状态就变为了accepted,可以在dashboard界面登录userA用户,查看是否可以看到cirros镜像(也可以登录userB用户,查看是否能看到镜像)