8.5. 在同一池中隔离隔离命名空间中的镜像
在不使用更高级别的系统(如 OpenStack 或 OpenShift Container Storage)直接使用 Ceph 块设备时,无法限制用户对特定块设备镜像的访问。与 CephX 功能结合使用时,用户可以限制到特定的池命名空间,以限制对镜像的访问。
您可以使用 RADOS 命名空间(一个新的身份级别)来识别对象,以在池中提供 rados 客户端之间的隔离。例如,客户端只能在特定于命名空间的命名空间上具有完全权限。这使得不同的 RADOS 客户端用于各个租户可行,这对于许多不同租户访问自己的块设备镜像的块设备特别有用。
您可以在同一池中的隔离命名空间中隔离块设备镜像。
先决条件
- 一个正在运行的 Red Hat Ceph Storage 集群。
- 在所有客户端上,将所有内核升级到 4x,以及所有客户端上的 librbd 和 librados。
- 监控和客户端节点的根级别访问权限。
流程
创建
rbd
池:语法
ceph osd pool create POOL_NAME PG_NUM
ceph osd pool create POOL_NAME PG_NUM
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例
[ceph: root@host01 /]# ceph osd pool create mypool 100 pool 'mypool' created
[ceph: root@host01 /]# ceph osd pool create mypool 100 pool 'mypool' created
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将
rbd
池与 RBD 应用程序关联:语法
ceph osd pool application enable POOL_NAME rbd
ceph osd pool application enable POOL_NAME rbd
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例
[ceph: root@host01 /]# ceph osd pool application enable mypool rbd enabled application 'rbd' on pool 'mypool'
[ceph: root@host01 /]# ceph osd pool application enable mypool rbd enabled application 'rbd' on pool 'mypool'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用 RBD 应用程序初始化池:
语法
rbd pool init -p POOL_NAME
rbd pool init -p POOL_NAME
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例
[ceph: root@host01 /]# rbd pool init -p mypool
[ceph: root@host01 /]# rbd pool init -p mypool
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建两个命名空间:
语法
rbd namespace create --namespace NAMESPACE
rbd namespace create --namespace NAMESPACE
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 为两个用户提供对命名空间的访问:
语法
ceph auth get-or-create client.USER_NAME mon 'profile rbd' osd 'profile rbd pool=rbd namespace=NAMESPACE' -o /etc/ceph/client.USER_NAME.keyring
ceph auth get-or-create client.USER_NAME mon 'profile rbd' osd 'profile rbd pool=rbd namespace=NAMESPACE' -o /etc/ceph/client.USER_NAME.keyring
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例
[ceph: root@host01 /]# ceph auth get-or-create client.testuser mon 'profile rbd' osd 'profile rbd pool=rbd namespace=namespace1' -o /etc/ceph/client.testuser.keyring [ceph: root@host01 /]# ceph auth get-or-create client.newuser mon 'profile rbd' osd 'profile rbd pool=rbd namespace=namespace2' -o /etc/ceph/client.newuser.keyring
[ceph: root@host01 /]# ceph auth get-or-create client.testuser mon 'profile rbd' osd 'profile rbd pool=rbd namespace=namespace1' -o /etc/ceph/client.testuser.keyring [ceph: root@host01 /]# ceph auth get-or-create client.newuser mon 'profile rbd' osd 'profile rbd pool=rbd namespace=namespace2' -o /etc/ceph/client.newuser.keyring
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 获取客户端的密钥:
语法
ceph auth get client.USER_NAME
ceph auth get client.USER_NAME
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建块设备镜像并使用池中的预定义命名空间:
语法
rbd create --namespace NAMESPACE IMAGE_NAME --size SIZE_IN_GB
rbd create --namespace NAMESPACE IMAGE_NAME --size SIZE_IN_GB
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例
[ceph: root@host01 /]# rbd create --namespace namespace1 image01 --size 1G [ceph: root@host01 /]# rbd create --namespace namespace2 image02 --size 1G
[ceph: root@host01 /]# rbd create --namespace namespace1 image01 --size 1G [ceph: root@host01 /]# rbd create --namespace namespace2 image02 --size 1G
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 可选:获取命名空间和关联的镜像的详情:
语法
rbd --namespace NAMESPACE ls --long
rbd --namespace NAMESPACE ls --long
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将 Ceph 配置文件从 Ceph 监控节点复制到客户端节点:
scp /etc/ceph/ceph.conf root@CLIENT_NODE:/etc/ceph/
scp /etc/ceph/ceph.conf root@CLIENT_NODE:/etc/ceph/
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例
[ceph: root@host01 /]# scp /etc/ceph/ceph.conf root@host02:/etc/ceph/ root@host02's password: ceph.conf 100% 497 724.9KB/s 00:00
[ceph: root@host01 /]# scp /etc/ceph/ceph.conf root@host02:/etc/ceph/ root@host02's password: ceph.conf 100% 497 724.9KB/s 00:00
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将 admin keyring 从 Ceph 监控节点复制到客户端节点:
语法
scp /etc/ceph/ceph.client.admin.keyring root@CLIENT_NODE:/etc/ceph
scp /etc/ceph/ceph.client.admin.keyring root@CLIENT_NODE:/etc/ceph
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例
[ceph: root@host01 /]# scp /etc/ceph/ceph.client.admin.keyring root@host02:/etc/ceph/ root@host02's password: ceph.client.admin.keyring 100% 151 265.0KB/s 00:00
[ceph: root@host01 /]# scp /etc/ceph/ceph.client.admin.keyring root@host02:/etc/ceph/ root@host02's password: ceph.client.admin.keyring 100% 151 265.0KB/s 00:00
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将用户从 Ceph 监控节点的密钥环复制到客户端节点:
语法
scp /etc/ceph/ceph.client.USER_NAME.keyring root@CLIENT_NODE:/etc/ceph/
scp /etc/ceph/ceph.client.USER_NAME.keyring root@CLIENT_NODE:/etc/ceph/
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例
[ceph: root@host01 /]# scp /etc/ceph/client.newuser.keyring root@host02:/etc/ceph/ [ceph: root@host01 /]# scp /etc/ceph/client.testuser.keyring root@host02:/etc/ceph/
[ceph: root@host01 /]# scp /etc/ceph/client.newuser.keyring root@host02:/etc/ceph/ [ceph: root@host01 /]# scp /etc/ceph/client.testuser.keyring root@host02:/etc/ceph/
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 映射块设备镜像:
语法
rbd map --name NAMESPACE IMAGE_NAME -n client.USER_NAME --keyring /etc/ceph/client.USER_NAME.keyring
rbd map --name NAMESPACE IMAGE_NAME -n client.USER_NAME --keyring /etc/ceph/client.USER_NAME.keyring
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 这不允许访问同一池中的其他命名空间中的用户。
示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 验证该设备:
示例
[ceph: root@host01 /]# rbd showmapped id pool namespace image snap device 0 rbd namespace1 image01 - /dev/rbd0 1 rbd namespace2 image02 - /dev/rbd1
[ceph: root@host01 /]# rbd showmapped id pool namespace image snap device 0 rbd namespace1 image01 - /dev/rbd0 1 rbd namespace2 image02 - /dev/rbd1
Copy to Clipboard Copied! Toggle word wrap Toggle overflow