Re: dynamic update of CephFS exports managed by mgr/nfs module

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Mon, Jan 24, 2022 at 9:26 AM Jeff Layton <jlayton@xxxxxxxxxx> wrote:
>
> On Fri, 2022-01-21 at 17:39 -0500, Ramana Venkatesh Raja wrote:
> > On Fri, Jan 21, 2022 at 4:01 PM Jeff Layton <jlayton@xxxxxxxxxx> wrote:
> > >
> > > On Fri, 2022-01-21 at 15:44 -0500, Ramana Venkatesh Raja wrote:
> > > > Hi,
> > > >
> > > > The mgr/nfs module manages nfs-ganesha services including their
> > > > exports [1]. It has interfaces that allow creating ganesha exports for
> > > > CephFS using `ceph nfs export create cephfs` or `ceph nfs export
> > > > apply`  command, and updating exports using `ceph nfs export apply`
> > > > command.  When creating an export for CephFS the mgr/nfs module
> > > > creates a FSAL ceph user with path restricted MDS caps based on the
> > > > requested export or clients' access type and the CephFS path to be
> > > > exported [2]. The export's libcephfs client ends up with read-only or
> > > > read-write MDS caps to the path being exported.
> > > >
> > > > If a ganesha export's or clients' access type is updated, then it is
> > > > expected that the ganesha server enforces the access type change
> > > > dynamically i.e., enforces the change after a SIGHUP or DBus signal
> > > > and not require a ganesha server restart.
> > > >
> > >
> > > That's a pretty big expectation. There are all sorts of settings that
> > > are not generally changeable on the fly and that require some sort of
> > > server restart.
> > >
> >
> > NFS-ganesha already supports dynamic updates of its exports' access
> > type and export clients' access types,
> > https://github.com/nfs-ganesha/nfs-ganesha/blob/next/src/doc/man/ganesha-export-config.rst#configuration-reload
> > . The issue is that the mgr/nfs module does not allow NFS-ganesha to
> > do this for CephFS exports it currently creates.
> >
> > >
> > > Why are restarts such a problem? Are you just concerned about having to
> > > impose a grace period?
> > >
> >
> > I don't think restarting is a problem. If the NFS-ganesha server
> > already supports dynamic updates of the export's access type or
> > clients' access type, then it would be great if the underlying Ceph
> > FSAL can also be configured to support this feature. For example,
> > OpenStack manila's CephFS driver creates ganesha exports for CephFS
> > subdirectories. It always creates FSAL ceph user with path restricted
> > 'read-write' MDS caps.
> >
>
> Let me summarize this to make sure I understand:
>
> You're creating a cephx principal for each export with path restricted
> caps as documented here:
>
>     https://docs.ceph.com/en/latest/cephfs/client-auth/
>
> ...based on whether the export is RO or RW. When you later go to change
> the export from RO to RW, then you change the caps at the same time. The
> result though is that the new caps don't "take" until you restart
> ganesha.
>
> Is that correct?
>

Yes.

> FSAL_CEPH doesn't care much about the RO or RW export modes. That's all
> enforced in common NFS code in ganesha. So, the path restricted caps are
> sort of a defense-in-depth approach to prevent a rogue ganesha from
> accessing stuff it shouldn't. You'll lose that if you change to always
> requesting r/w caps -- maybe that's ok.
>
> It really sounds like you need some way to force libcephfs to
> renegotiate its MDS sessions when there is a cap change for the
> principal. Maybe the MDSs should close sessions when their caps change?
> Or, you could add some new function to libcephfs to do that? That really
> sounds like the right thing to do.
 >

Thanks a lot, Jeff. Yes, this does seem like the right approach. Maybe
this feature request already exists in https://tracker.ceph.com/ ? If
not, I will create one and investigate further.

> > This allows the driver to dynamically change
> > the export's client access types by modifying the export's client
> > blocks, and sending a signal to ganesha to reload its exports. The
> > ganesha server enforces the NFS client access type changes, read-write
> > to read-only or vice-versa, even though the CephFS export's libcephfs
> > client always has read-write permissions to the CephFS subdirectory. I
> > was wondering if we could do the same for the 'mgr/nfs' module with
> > option a) suggested below. As you mentioned in IRC #cephfs, options b)
> > and options c) are better avoided, and option d) is ideal but
> > non-trivial to implement.
> >
> > > > However in the case of
> > > > exports managed by mgr/nfs module, changing the access type of a
> > > > CephFS export (or its clients) requires changing the MDS caps of the
> > > > FSAL ceph user. AFAIK this change cannot take effect without a ganesha
> > > > server restart. The alternative is to remove the existing export, and
> > > > create a new one. Both these solutions to update access of a CephFS
> > > > export are not ideal. I could think of the following solutions to
> > > > allow dynamic update of CephFS exports with the mgr/nfs module :
> > > >
> > > > a) Modify mgr/nfs module to always create a FSAL ceph user with
> > > > read-write path restricted MDS caps for CephFS exports.
> > > >
> > > > b) Add a CLI option (e.g. --fsal_ceph_user_access)  to `ceph nfs
> > >
> > > nit: please don't mix dashes and underscores in option names. ;)
> > >
> > > > export create cephfs`  and `ceph nfs export apply` commands that
> > > > allows setting FSAL ceph user's MDS caps access type during CephFS
> > > > export creation. Add another option to `ceph nfs export apply` command
> > > > that does not try to change the MDS caps access level of the fsal ceph
> > > > user when updating a CephFS export's access type.
> > > >
> > > > c) Add a CLI option (e.g. --fsal_ceph_user_access)  to `ceph nfs
> > > > export create cephfs`  and `ceph nfs export apply` commands that
> > > > allows setting FSAL ceph user's MDS caps access type during CephFS
> > > > export creation. Add a new CLI `ceph nfs export update cephfs`  that
> > > > does not try to change the
> > > > to change the MDS caps access level of the fsal ceph user when
> > > > updating a CephFS export's access type.
> > > >
> > > > Option a) is the simplest, but too much of a security compromise?
> > > > Option b) and c) may confuse users and add complexity to the code. Any
> > > > other suggestions?
> > > >
> > >
> > > d) roll some special handling in libcephfs that allows you to transition
> > > an existing client's access? Then you could teach ganesha to trigger
> > > this at the right times. It's a non-trivial solution, but probably the
> > > smoothest way to achieve what you want.
> > >
> > > e) Live with restarts? I'm not sure why they're such an issue and what's
> > > driving this requirement.
> > >
> > > > Thanks,
> > > > Ramana
> > > >
> > > > [1] https://docs.ceph.com/en/latest/mgr/nfs/#export-management
> > > > [2] https://github.com/ceph/ceph/blob/v16.2.7/src/pybind/mgr/nfs/export.py#L188
> > > >
> > > > _______________________________________________
> > > > Dev mailing list -- dev@xxxxxxx
> > > > To unsubscribe send an email to dev-leave@xxxxxxx
> > > >
> > >
> > > --
> > > Jeff Layton <jlayton@xxxxxxxxxx>
> > >
> >
> > Thanks,
> > Ramana
> >
>
> --
> Jeff Layton <jlayton@xxxxxxxxxx>
>

-Ramana

_______________________________________________
Dev mailing list -- dev@xxxxxxx
To unsubscribe send an email to dev-leave@xxxxxxx



[Index of Archives]     [CEPH Users]     [Ceph Devel]     [Ceph Large]     [Information on CEPH]     [Linux BTRFS]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux