index.rst 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  1. .. _raet:
  2. ==================
  3. The RAET Transport
  4. ==================
  5. .. note::
  6. The RAET transport is in very early development, it is functional but no
  7. promises are yet made as to its reliability or security.
  8. As for reliability and security, the encryption used has been audited and
  9. our tests show that raet is reliable. With this said we are still conducting
  10. more security audits and pushing the reliability.
  11. This document outlines the encryption used in RAET
  12. .. versionadded:: 2014.7.0
  13. The Reliable Asynchronous Event Transport, or RAET, is an alternative transport
  14. medium developed specifically with Salt in mind. It has been developed to
  15. allow queuing to happen up on the application layer and comes with socket
  16. layer encryption. It also abstracts a great deal of control over the socket
  17. layer and makes it easy to bubble up errors and exceptions.
  18. RAET also offers very powerful message routing capabilities, allowing for
  19. messages to be routed between processes on a single machine all the way up to
  20. processes on multiple machines. Messages can also be restricted, allowing
  21. processes to be sent messages of specific types from specific sources
  22. allowing for trust to be established.
  23. Using RAET in Salt
  24. ==================
  25. Using RAET in Salt is easy, the main difference is that the core dependencies
  26. change, instead of needing pycrypto, M2Crypto, ZeroMQ, and PYZMQ, the packages
  27. `libsodium`_, libnacl, ioflo, and raet are required. Encryption is handled very cleanly
  28. by libnacl, while the queueing and flow control is handled by
  29. ioflo. Distribution packages are forthcoming, but `libsodium`_ can be easily
  30. installed from source, or many distributions do ship packages for it.
  31. The libnacl and ioflo packages can be easily installed from pypi, distribution
  32. packages are in the works.
  33. Once the new deps are installed the 2014.7 release or higher of Salt needs to
  34. be installed.
  35. Once installed, modify the configuration files for the minion and master to
  36. set the transport to raet:
  37. ``/etc/salt/master``:
  38. .. code-block:: yaml
  39. transport: raet
  40. ``/etc/salt/minion``:
  41. .. code-block:: yaml
  42. transport: raet
  43. Now start salt as it would normally be started, the minion will connect to the
  44. master and share long term keys, which can then in turn be managed via
  45. salt-key. Remote execution and salt states will function in the same way as
  46. with Salt over ZeroMQ.
  47. Limitations
  48. ===========
  49. The 2014.7 release of RAET is not complete! The Syndic and Multi Master have
  50. not been completed yet and these are slated for completion in the 2015.5.0
  51. release.
  52. Also, Salt-Raet allows for more control over the client but these hooks have
  53. not been implemented yet, thereforre the client still uses the same system
  54. as the ZeroMQ client. This means that the extra reliability that RAET exposes
  55. has not yet been implemented in the CLI client.
  56. Why?
  57. ====
  58. Customer and User Request
  59. -------------------------
  60. Why make an alternative transport for Salt? There are many reasons, but the
  61. primary motivation came from customer requests, many large companies came with
  62. requests to run Salt over an alternative transport, the reasoning was varied,
  63. from performance and scaling improvements to licensing concerns. These
  64. customers have partnered with SaltStack to make RAET a reality.
  65. More Capabilities
  66. -----------------
  67. RAET has been designed to allow salt to have greater communication
  68. capabilities. It has been designed to allow for development into features
  69. which out ZeroMQ topologies can't match.
  70. Many of the proposed features are still under development and will be
  71. announced as they enter proof of concept phases, but these features include
  72. `salt-fuse` - a filesystem over salt, `salt-vt` - a parallel api driven shell
  73. over the salt transport and many others.
  74. RAET Reliability
  75. ================
  76. RAET is reliable, hence the name (Reliable Asynchronous Event Transport).
  77. The concern posed by some over RAET reliability is based on the fact that
  78. RAET uses UDP instead of TCP and UDP does not have built in reliability.
  79. RAET itself implements the needed reliability layers that are not natively
  80. present in UDP, this allows RAET to dynamically optimize packet delivery
  81. in a way that keeps it both reliable and asynchronous.
  82. RAET and ZeroMQ
  83. ===============
  84. When using RAET, ZeroMQ is not required. RAET is a complete networking
  85. replacement. It is noteworthy that RAET is not a ZeroMQ replacement in a
  86. general sense, the ZeroMQ constructs are not reproduced in RAET, but they are
  87. instead implemented in such a way that is specific to Salt's needs.
  88. RAET is primarily an async communication layer over truly async connections,
  89. defaulting to UDP. ZeroMQ is over TCP and abstracts async constructs within the
  90. socket layer.
  91. Salt is not dropping ZeroMQ support and has no immediate plans to do so.
  92. Encryption
  93. ==========
  94. RAET uses Dan Bernstein's NACL encryption libraries and `CurveCP`_ handshake.
  95. The libnacl python binding binds to both `libsodium`_ and tweetnacl to execute
  96. the underlying cryptography. This allows us to completely rely on an
  97. externally developed cryptography system.
  98. Programming Intro
  99. =================
  100. .. toctree::
  101. programming_intro
  102. .. _libsodium: http://doc.libsodium.org/
  103. .. _CurveCP: http://curvecp.org/