我前面写了一篇关于ceph块设备的使用,
http://blog.163.com/digoal@126/blog/static/1638770402014112325944867/
使用块设备功能时, 客户端需要安装rbd模块, 并且需要能连接到ceph集群.
然后客户端就可以肆无忌惮的创建镜像, 映射块设备.
如果在IaaS环境中, 虚拟机直接连接存储的话, 这显然是不安全的, 因为虚拟机的用户可以肆无忌惮的操作ceph集群.
那么CEPH要在云环境中使用, 如何来加固呢?
如图 :
显然虚拟机并不是直接和CEPH集群连接的,
宿主机连接CEPH集群, 在宿主机上创建块设备或在CEPH FS中创建QEMU镜像文件, 通过libvirt指派给虚拟机.
所以虚拟机看到的虚拟硬盘是安全的,
虚拟机也不需要RBD模块, 不需要连接到ceph集群.
在DOCKER环境中, 也可以这么来用.
但是有点问题, 权限受到限制.
[root@localhost rbd1]# docker run -t -i --rm --device=/dev/rbd3:/dev/xvdc centos:centos6 /bin/bash
[root@3cce0bbf3b9e /]# ll /dev/xvdc
brw-rw---- 1 root root 249, 0 Dec 23 16:47 /dev/xvdc
[root@3cce0bbf3b9e /]# mount /dev/xvdc /mnt
mount: permission denied
然而使用--privileged启动容器显然也是不安全的, 并且也看不到这个设备.
例如 :
# df -h
/dev/rbd0 8.0G 33M 8.0G 1% /rbd0
# 使用--privileged启动后, 容器中无法查看到这个映射的虚拟块设备
[root@localhost rbd1]# docker run -t -i --rm --device=/dev/rbd3:/dev/xvdc --privileged centos:centos6 /bin/bash
[root@4fc9c06d4ebc /]# ll /dev/xvdc
ls: cannot access /dev/xvdc: No such file or directory
使用--privileged启动容器, 可以直接访问宿主机的所有设备, 所以mount /dev/rbd0是可以的.
这显然是不安全的. 所以不能这么来使用.
[root@4fc9c06d4ebc /]# mount /dev/rbd0 /mnt
[root@4fc9c06d4ebc /]# cd /mnt
[root@4fc9c06d4ebc mnt]# ll
total 0
在容器中写如一个文件
[root@4fc9c06d4ebc mnt]# touch abc
[root@4fc9c06d4ebc mnt]# exit
exit
在宿主机可以看到这个文件被写入.
[root@localhost rbd1]# cd /rbd0
[root@localhost rbd0]# ll
total 0
-rw-r--r-- 1 root root 0 Dec 24 00:49 abc
那么容器应该怎么来使用虚拟块设备呢?
[参考]
1. http://ceph.com/docs/master/rbd/libvirt/
2. http://ceph.com/docs/master/rbd/qemu-rbd/
3. http://blog.163.com/digoal@126/blog/static/1638770402014112325944867/
4. man docker-run
5. http://jpetazzo.github.io/2014/01/29/docker-device-mapper-resize/
6. http://developerblog.redhat.com/2014/09/30/overview-storage-scalability-docker/