Introduction

The Shared File Systems service (manila) is intended to be ran on a single-node or across multiple nodes. The Shared File Systems service consists of four main services, which are similar to those of the Block Storage service:

  • manila-api

  • manila-scheduler

  • manila-share

  • manila-data

manila-api

The service that provides a stable RESTful API. The service authenticates and routes requests throughout the Shared Filesystem service. There is python-manilaclient to interact with the API. For more details on the Shared File Systems API, see the OpenStack Shared File Systems API.

manila-share

Responsible for managing Shared File Service devices, specifically the back-end devices.

manila-scheduler

Responsible for scheduling and routing requests to the appropriate manila-share service. It does that by picking one back-end while filtering all except one back-end.

manila-data

This service is responsible for managing data operations which may take a long time to complete and block other services if not handled separately.

The Shared File Systems service uses an SQL-based central database that is shared by all Shared File Systems services in the system. It can use any SQL dialect supported by ORM SQLALchemy, but is tested only with MySQL and PostgreSQL data bases.

Using SQL, the Shared File Systems service is similar to other OpenStack services and can be used with any OpenStack deployment. For more details on the API, see the OpenStack Shared File Systems API description. For more details on the CLI usage and configuration, see Shared File Systems Cloud Administrative Guide.

On the image below you can see how different parts of the Shared File System service interact with each other.

../_images/manila-intro.png

Besides already described services you can see two other entities on the image: python-manilaclient and storage controller.

python-manilaclient

Command line interface to interact with the Shared File Systems service via manila-api and also a Python module to interact programmatically with the Shared File Systems service.

Storage controller

Typically a metal box with spinning disks, ethernet ports, and some kind of software that allows network clients to read and write files on the disks. There are also software-only storage controllers that run on arbitrary hardware, clustered controllers which may run allow a multiple physical devices to appear as a single storage controller, or purely virtual storage controllers.

A share is a remote, mountable file system. You can mount a share to and access a share from several hosts by several users at a time.

The Shared File Systems service can work with different network types: flat, VLAN, VXLAN, or GRE, and supports segmented networking. There are also different network plug-ins that provide a variety of integration approaches with the network services that are available with OpenStack.

There are a large number of share drivers created by different vendors which support different hardware storage solutions, for example, NetApp Clustered Data ONTAP (cDOT) Driver, Huawei NAS Driver or GlusterFS Driver. Each share driver is a Python class that can be set for a back end and run in the back end to manage share operations, some of which can be vendor-specific. The back end is an instance of the manila-share service.

Clients’ configuration data for authentication and authorization can be stored by security services. Such protocols as LDAP, Kerberos, or Microsoft Active Directory authentication service can be configured and used.

Unless it is not explicitly changed in the policy.json, either an administrator or the tenant that owns a share are able to manage access to the shares. Access management is done by creating access rules with authentication through IP address, user, group, or TLS certificates. Available authentication methods depend on which share driver and security service you configure and use.

Note

Different drivers support different access options depending on which shared file system protocol is used. Supported shared file system protocols are NFS, CIFS, GlusterFS, and HDFS. For example, the Generic (Block Storage as a back end) driver does not support user and certificate authentication methods. It also does not support any of the security services, such as LDAP, Kerberos, or Active Directory. For details of features supported by different drivers, see Manila share features support mapping.

As an administrator, you can create share types that enable the scheduler to filter back ends before you create a share. Share types have extra specifications that you can set for the scheduler to filter and weigh back ends so that an appropriate one is selected for a user that requests share creation. Shares and share types can be created as public or private. This level of visibility defines whether other tenants are able to see these objects and operate with them, or not. An administrator can add access to the private share types for specific users or tenants in the Identity service. Thus users which you have granted access can see available share types and create shares using them.

Permissions for API calls for different users and their roles are determined by policies like in other OpenStack services.

The Identity service can be used for authentication in the Shared File Systems service. See details of the Identity service security in Identity section.

General security information

Similar to other OpenStack projects, the Shared File Systems service is registered with the Identity service, so you can find API endpoints of the share service v1 and v2 using manila endpoints command:

$ manila endpoints
+-------------+-----------------------------------------+
| manila      | Value                                   |
+-------------+-----------------------------------------+
| adminURL    | http://172.18.198.55:8786/v1/20787a7b...|
| region      | RegionOne                               |
| publicURL   | http://172.18.198.55:8786/v1/20787a7b...|
| internalURL | http://172.18.198.55:8786/v1/20787a7b...|
| id          | 82cc5535aa444632b64585f138cb9b61        |
+-------------+-----------------------------------------+

+-------------+-----------------------------------------+
| manilav2    | Value                                   |
+-------------+-----------------------------------------+
| adminURL    | http://172.18.198.55:8786/v2/20787a7b...|
| region      | RegionOne                               |
| publicURL   | http://172.18.198.55:8786/v2/20787a7b...|
| internalURL | http://172.18.198.55:8786/v2/20787a7b...|
| id          | 2e8591bfcac4405fa7e5dc3fd61a2b85        |
+-------------+-----------------------------------------+

By default, the Shared File Systems API service listens only on the port 8786 with tcp6 type that supports both IPv4 and IPv6.

Note

The port 8786 is the default port for the Shared File Systems service. It may be changed to any other port, but this change should also be made in the configuration file to option osapi_share_listen_port which defaults to 8786.

In the /etc/manila/ directory you can find several configuration files:

api-paste.ini
manila.conf
policy.json
rootwrap.conf
rootwrap.d

./rootwrap.d:
share.filters

It is recommended that you configure the Shared File Systems service to run under a non-root service account, and change file permissions so that only the system administrator can modify them. The Shared File Systems service expects that only administrators can write to configuration files and services can only read them through their group membership in manila group. Others must not be able to read these files because the files contain admin passwords for different services.

Apply checks Check-Shared-01: Is user/group ownership of config files set to root/manila? and Check-Shared-02: Are strict permissions set for configuration files? from the checklist to verify that permissions are set properly.

Note

The configuration for manila-rootwrap in file rootwrap.conf and the manila-rootwrap command filters for share nodes in file rootwrap.d/share.filters should be owned by, and only-writeable by, the root user.

Tip

The manila configuration file manila.conf may be placed anywhere. The path /etc/manila/manila.conf is expected by default.