Signed-off-by: Manuel Franceschini <livew...@google.com>
---
This is a first draft. Please let me know if the overall structure is ok
and if you think there is some important sections missing.

Thanks, Manuel.


 doc/design-2.3.rst |   82 +++++++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 81 insertions(+), 1 deletions(-)

diff --git a/doc/design-2.3.rst b/doc/design-2.3.rst
index efd8bf2..482b624 100644
--- a/doc/design-2.3.rst
+++ b/doc/design-2.3.rst
@@ -15,11 +15,91 @@ As for 2.1 and 2.2 we divide the 2.3 design into three 
areas:
 - core changes, which affect the master daemon/job queue/locking or
   all/most logical units
 - logical unit/feature changes
-- external interface changes (eg. command line, os api, hooks, ...)
+- external interface changes (e.g. command line, os api, hooks, ...)
 
 Core changes
 ------------
 
+IPv6 support
+~~~~~~~~~~~~
+
+Current state and shortcomings
+++++++++++++++++++++++++++++++
+
+Currently Ganeti does not support IPv6. This is true for nodes as well
+as instances. Due to the fact that IPv4 exhaustion is threateningly near
+the need of using IPv6 is increasing, especially given that bigger and
+bigger clusters are supported.
+
+Supported IPv6 setup
+++++++++++++++++++++
+
+In Ganeti 2.3 we introduce additionally to the ordinary pure IPv4
+setup a hybrid IPv6/IPv4 mode. The latter works as follows:
+
+- all nodes in a cluster have a primary IPv6 address
+- the master has a IPv6 address
+- all nodes **must** have a secondary IPv4 address
+
+The reason for this hybrid setup is that key components that Ganeti
+depends on do not or only partially support IPv6. More precisely, Xen
+does not support instance migration via IPv6 in version 3.4 and 4.0.
+Similarly, KVM does not support instance migration nor VNC access for
+IPv6 at the time of this writing.
+
+This led to the decision of not supporting pure IPv6 Ganeti clusters, as
+very important cluster operations would not have been possible. Using
+IPv4 as secondary address does not affect any of the goals
+of the IPv6 support: since secondary addresses do not need to be
+publicly accessible, they need not be globally unique. In other words,
+one can practically use private IPv4 secondary addresses just for
+intra-cluster communication without propagating them across layer 3
+boundaries.
+
+netutils: Utilities for handling common network tasks
++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+Currently common util functions are kept in the utils modules. Since
+this module grows bigger and bigger network-related functions are moved
+to a separate module named *netutils*. Additionally all these utilities
+will be IPv6-enabled.
+
+Cluster initialization
+++++++++++++++++++++++
+
+As mentioned above there will be two different setups in terms of IP
+addressing: pure IPv4 and hybrid IPv6/IPv4 address. To choose that a
+new cluster init parameter *--primary-ip-version* is introduced. This is
+needed as a given name can resolve to both an IPv4 and IPv6 address on a
+dual-stack host effectively making it impossible to infer that bit. 
+
+Once a cluster is initialized and the primary IP version chosen all
+nodes that join have to conform to that setup. In the case of our
+IPv6/IPv4 setup all nodes *must* have a secondary IPv4 address.
+
+Furthermore we store the primary IP version in ssconf which is consulted
+every time a daemon starts to determine the default bind address (either
+*0.0.0.0* or *::*. In a IPv6/IPv4 setup we need to bind the Ganeti
+daemon listening on network sockets to the IPv6 address.
+
+
+Node addition
++++++++++++++
+
+When adding a new node to a IPv6/IPv4 cluster it must have a IPv6
+address to be used as primary and a IPv4 address used as secondary. As
+explained above, every time a daemon is started we use the cluster
+primary IP version to determine to which any address to bind to. The
+only exception to this is when a node is added to the cluster. In this
+case there is no ssconf available when noded is started and therefore
+the correct address needs to be passed to it.
+
+Name resolution
++++++++++++++++
+
+Since the gethostbyname*() functions do not support IPv6 name resolution
+will be done by using the recommended getaddrinfo().
+
 
 Feature changes
 ---------------
-- 
1.7.1

Reply via email to