题记:
尽信书则不如无书
按照书上说的配置完cephfs后,无法mount成功,ceph-fuse的错误信息为:
1 |
handle_connect_reply connect got BADAUTHORIZER |
mds 日志错误信息为:
1 |
mds.client.cephfs ms_verify_authorizer: cannot decode auth caps bl of length 0 |
从代码来看,就是caps给的不够。
书上关于caps的命令为:
1 |
#ceph auth get-or-create client.cephfs mon 'allow r' osd 'allow rwx pool=cephfs_metadata, allow rwx pool=cephfs_data' |
实际上,还需要添加关于mds的授权,如果对mds之授权r, 则可以挂载,但是不可写;所以正常情况下,需要添加对mds的rw,更新授权信息如下:
1 |
# ceph auth caps client.cephfs mds 'allow rw' mon 'allow r' osd 'allow rwx pool=cephfs_metadata,allow rwx pool=cephfs_data' |
如果我们只想让client.cephfs 访问 /data 目录,则可以添加更新授权信息如下:
1 |
# ceph auth caps client.cephfs mds 'allow r, allow rw path=/data' mon 'allow r' osd 'allow rwx pool=cephfs_metadata,allow rwx pool=cephfs_data' |
注意: 这里似乎并未指定是哪个fs,如何区分不同的fs呢?
关于限制用户访问指定目录的问题,有更加方便的做法: http://docs.ceph.com/docs/master/cephfs/client-auth/)
eg:
其实,该操作也是反映在ceph auth里面的,如下:
如此来看,具体是哪个cephfs,其实不是本质的东西,本质上还是对pool的授权
另外:ceph fs authorize 命令目前似乎不能操作现有用户(不能修改、也不能删除),该命令只能添加新用户;需要修改删除啥的还是要使用ceph auth的
下面使用client.phpor 尝试挂载,验证权限是否生效:
权限设置生效
结论:
- 别忘了cephfs对mds添加授权
- 修改完caps后,需要重新mount才生效
关于授权这部分,官方文档似乎并未提及
参考:http://www.yangguanjun.com/2017/07/01/cephfs-client-authentication/