Implementation of remote FS driver based on rsync for libvirt
blueprint remote-fs-driver Change-Id: Ic975977b620c69e26707c6a6e3402c0b6b1fca73
This commit is contained in:
committed by
John Garbutt
parent
39a4b3ba59
commit
3110b946aa
@@ -0,0 +1,159 @@
|
|||||||
|
..
|
||||||
|
This work is licensed under a Creative Commons Attribution 3.0 Unported
|
||||||
|
License.
|
||||||
|
|
||||||
|
http://creativecommons.org/licenses/by/3.0/legalcode
|
||||||
|
|
||||||
|
===============================================================
|
||||||
|
Implementation of remote FS driver based on rsync for libvirt
|
||||||
|
===============================================================
|
||||||
|
|
||||||
|
https://blueprints.launchpad.net/nova/+spec/remote-fs-driver
|
||||||
|
|
||||||
|
libvirt cannot use RPC to copy files over network to/from other compute nodes.
|
||||||
|
That's why libvirt uses additional interface to communicate with other compute
|
||||||
|
nodes. Usage of fewer tools for communication between compute nodes can improve
|
||||||
|
security, ease of testing and deployment and give better flexibility.
|
||||||
|
Right now libvirt driver uses ssh and rsync commands for following operations:
|
||||||
|
* creation directory on remote host,
|
||||||
|
* creation file on remote host,
|
||||||
|
* removing file from remote host,
|
||||||
|
* copying file to remote host.
|
||||||
|
Target of this BP is implementation of two libvirt remote FS drivers: `ssh` and
|
||||||
|
`rsync` drivers. Each of these drivers will implement whole set of operation
|
||||||
|
needed by libvirt driver. `ssh` driver will use ssh and scp commands and
|
||||||
|
`rsync` driver will use rsync command only.
|
||||||
|
|
||||||
|
|
||||||
|
Problem description
|
||||||
|
===================
|
||||||
|
|
||||||
|
The current libvirt driver uses the following commands for executing remote
|
||||||
|
filesystem operations:
|
||||||
|
* ssh touch,
|
||||||
|
* ssh mkdir,
|
||||||
|
* ssh rm,
|
||||||
|
* scp,
|
||||||
|
* rsync.
|
||||||
|
This fact forces us to use an additional shell and this can cause security
|
||||||
|
risks. We can not avoid shell usage because copying files over network requires
|
||||||
|
a shell. It is possible to decrease the interaction between nodes by using ssh
|
||||||
|
commands or rsync commands only. Such separation can allow us to decrease
|
||||||
|
number of opened ports on node. Also using only rsync/scp commands can allow
|
||||||
|
us to use secure shells like rssh.
|
||||||
|
|
||||||
|
Use Cases
|
||||||
|
----------
|
||||||
|
|
||||||
|
The cloud operator wishes to reduce the number of commands used and the number
|
||||||
|
of ports opened by the nova-compute daemon when migrating workloads between
|
||||||
|
compute nodes in order to reduce attack vectors.
|
||||||
|
|
||||||
|
Project Priority
|
||||||
|
-----------------
|
||||||
|
|
||||||
|
None.
|
||||||
|
|
||||||
|
Proposed change
|
||||||
|
===============
|
||||||
|
|
||||||
|
To achieve these goals abstract class 'RemoteFilesystem' will be added in
|
||||||
|
nova/virt/libvirt/remotefs.py. This class will contain operations needed for
|
||||||
|
libvirt to communicate with other nodes perform filesystem operations on those
|
||||||
|
nodes. This abstract class will be implemented in SshRemoteFilesystem and
|
||||||
|
RsyncRemoteFilesystem classes.
|
||||||
|
Class SshRemoteFilesystem will use ssh and scp tools only(scp uses ssh for data
|
||||||
|
transfer, and it uses the same authentication and provides the same security as
|
||||||
|
ssh).
|
||||||
|
Additional remote FS driver will be implemented in RsyncRemoteFilesystem class.
|
||||||
|
This class will use rsync command only.
|
||||||
|
Configuration option 'remote_filesystem_transport' will be added with default
|
||||||
|
value 'ssh' and 'choices ssh', 'rsync'. Depending on option value corresponding
|
||||||
|
class will be instantiated.
|
||||||
|
|
||||||
|
Alternatives
|
||||||
|
------------
|
||||||
|
|
||||||
|
None.
|
||||||
|
|
||||||
|
Data model impact
|
||||||
|
-----------------
|
||||||
|
|
||||||
|
None.
|
||||||
|
|
||||||
|
REST API impact
|
||||||
|
---------------
|
||||||
|
|
||||||
|
None.
|
||||||
|
|
||||||
|
Security impact
|
||||||
|
---------------
|
||||||
|
|
||||||
|
These improvements allow us to decrease number of used ports on compute node.
|
||||||
|
Also it allows us to use restricted shell for providing limited access to a
|
||||||
|
host like 'rssh'.
|
||||||
|
|
||||||
|
Notifications impact
|
||||||
|
--------------------
|
||||||
|
|
||||||
|
None.
|
||||||
|
|
||||||
|
Other end user impact
|
||||||
|
---------------------
|
||||||
|
|
||||||
|
None.
|
||||||
|
|
||||||
|
Performance Impact
|
||||||
|
------------------
|
||||||
|
|
||||||
|
None.
|
||||||
|
|
||||||
|
Other deployer impact
|
||||||
|
---------------------
|
||||||
|
|
||||||
|
To achieve security benefits some kind of restricted shell must be installed
|
||||||
|
on compute nodes. New shell should be used for nova user.
|
||||||
|
|
||||||
|
Developer impact
|
||||||
|
----------------
|
||||||
|
|
||||||
|
None.
|
||||||
|
|
||||||
|
|
||||||
|
Implementation
|
||||||
|
==============
|
||||||
|
|
||||||
|
Assignee(s)
|
||||||
|
-----------
|
||||||
|
|
||||||
|
Primary assignee: mhorban@mirantis.com
|
||||||
|
|
||||||
|
Work Items
|
||||||
|
----------
|
||||||
|
|
||||||
|
* Implementation of ssh remote FS driver for libvirt.
|
||||||
|
* Implementation of rsync remote FS driver for libvirt.
|
||||||
|
* Addind configuration option to choose remote FS driver.
|
||||||
|
|
||||||
|
|
||||||
|
Dependencies
|
||||||
|
============
|
||||||
|
|
||||||
|
None.
|
||||||
|
|
||||||
|
|
||||||
|
Testing
|
||||||
|
=======
|
||||||
|
|
||||||
|
tempest test for migration instances will be added.
|
||||||
|
|
||||||
|
|
||||||
|
Documentation Impact
|
||||||
|
====================
|
||||||
|
|
||||||
|
Adding new option 'remote_filesystem_transport' to configure method of compute
|
||||||
|
node communication.
|
||||||
|
|
||||||
|
|
||||||
|
References
|
||||||
|
==========
|
||||||
Reference in New Issue
Block a user