GlusterFS ACL 权限设置

2019-09-23 0 By admin

在使用 GlusterFS 集群服务过程中,有时候我们需要对其中一个目录单独设置特殊权限;这其中可能会有个坑等着你。
设置目录特殊的权限,有两种方式:

  1. 客户端挂载 GlusterFS 的 Volume 后,按照设置本地文件目录的方式设置。PS:只在本机生效,不影响 GlusterFS 集群。
  2. 客户端通过 setfacl 对 GlusterFS 文件集群设置目录特殊权限。PS:GlusterFS 集群生效,影响所有客户端。

大家根据具体情况,选择合适的方式。其中第一种方式,就不再赘述,相信大家都会。这里主要说明一下第二种。

一、问题的由来

博主使用 Glusterfs 集群服务是为 Kubernetes 容器编排服务提供持久化共享存储的。在公司项目容器化部署完成后,开始做 Kubernetes 集群的监控工作;使用的是 Prometheus 监控服务。因为之前就是使用的 GlusterFS 做的共享存储,没有出现什么问题,就打算用其做 Prometheus 的文件存储。但是在部署 Prometheus 过程中,总是报错,提示目录没有权限。

二、问题分析

GlusterFS 服务使用ROOT账户运行,默认连接到 GlusterFS 的也是root账户;其创建目录的属主和属组都是root,并且禁止其他用户的写入。
Prometheus 的容器镜像默认以普通账户运行;所以此时 Prometheus 容器中是普通账户要在 GlusterFS 的ROOT账户的目录中写入数据,所以被拒绝了。
根据这种情况,我们应该选择第二种方式。对 GlusterFS 集群设置全局ACL 规则,使所有连接 GlusterFS 服务的客户端的普通账户对此目录默认都有写权限。

三、处理过程

GlusterFS ACL 规则配置;参见https://docs.gluster.org/en/latest/Administrator%20Guide/Access%20Control%20Lists/

前提条件:当前使用的系统支持ACL 规则。

1、设置 GlusterFS 开启ACL规则支持

进入 Glusterfs 的集群终端,对 Volume 开启 ACL 规则支持。

#gluster
gluster>volume set vl_name acl on
gluster>volume info gl_volume

Volume Name: gl_volume
Type: Distribute
Volume ID: fda928b5-bcf9-42bb-afbd-4a61d988b167
Status: Started
Snapshot Count: 0
Number of Bricks: 4
Transport-type: tcp
Bricks:
Brick1: app:/opt/gluster
Options Reconfigured:
------------------------------
nfs.acl: on
------------------------------
transport.address-family: inet
nfs.disable: on
gluster>exit

2、客户端绑定 GlusterFS Volume 添加ACL支持选项

客户端绑定 GlusterFS 的Volume 时,增加支持ACL的选项,使用下面的命令:
# mount –t glusterfs -o acl
例子:
# mount -t glusterfs -o acl 198.192.198.234:glustervolume /mnt/gluster

3、客户端对 GlusterFS 设置ACL规则

这时就可以通过此客户端,对 GlusterFS 的 Volume 中的目录和文件设置ACL规则了;设置的规则会在整个 Volume 中生效。
设置其他用户对目录有读写权限:
setfacl -R -m o::rw- test/
这样其他的客户端绑定此 Volume 后,也会发现 其他用户对 test 目录也有读写权限。

上文就是过程介绍了,按照文档操作,就可以对 GlusterFS Volume 中的文件设置ACL规则,成功部署 Prometheus 容器的持久化存储了。