~ntt-pf-lab/nova/monkey_patch_notification

« back to all changes in this revision

Viewing changes to docs/network.rst

  • Committer: Jesse Andrews
  • Date: 2010-05-28 06:05:26 UTC
  • Revision ID: git-v1:bf6e6e718cdc7488e2da87b21e258ccc065fe499
initial commit

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
..
 
2
      Copyright [2010] [Anso Labs, LLC]
 
3
 
 
4
      Licensed under the Apache License, Version 2.0 (the "License");
 
5
      you may not use this file except in compliance with the License.
 
6
      You may obtain a copy of the License at
 
7
 
 
8
          http://www.apache.org/licenses/LICENSE-2.0
 
9
 
 
10
      Unless required by applicable law or agreed to in writing, software
 
11
      distributed under the License is distributed on an "AS IS" BASIS,
 
12
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 
13
      See the License for the specific language governing permissions and
 
14
      limitations under the License.
 
15
 
 
16
nova Networking
 
17
================
 
18
 
 
19
The nova networking components manage private networks, public IP addressing, VPN connectivity, and firewall rules.
 
20
 
 
21
Components
 
22
----------
 
23
There are several key components:
 
24
 
 
25
* NetworkController (Manages address and vlan allocation) 
 
26
* RoutingNode (NATs public IPs to private IPs, and enforces firewall rules)
 
27
* AddressingNode (runs DHCP services for private networks)
 
28
* BridgingNode (a subclass of the basic nova ComputeNode)
 
29
* TunnelingNode (provides VPN connectivity)
 
30
  
 
31
Component Diagram
 
32
-----------------
 
33
 
 
34
Overview::
 
35
 
 
36
                                (PUBLIC INTERNET) 
 
37
                                 |              \
 
38
                                / \             / \
 
39
                  [RoutingNode] ... [RN]    [TunnelingNode] ... [TN]
 
40
                        |             \    /       |              |
 
41
                        |            < AMQP >      |              |
 
42
 [AddressingNode]--  (VLAN) ...         |        (VLAN)...    (VLAN)      --- [AddressingNode] 
 
43
                        \               |           \           /
 
44
                       / \             / \         / \         / \
 
45
                        [BridgingNode] ...          [BridgingNode]
 
46
                                             
 
47
                                             
 
48
                  [NetworkController]   ...    [NetworkController]
 
49
                                    \          /
 
50
                                      < AMQP >
 
51
                                         |
 
52
                                        / \
 
53
                       [CloudController]...[CloudController]                  
 
54
 
 
55
While this diagram may not make this entirely clear, nodes and controllers communicate exclusively across the message bus (AMQP, currently).       
 
56
 
 
57
State Model
 
58
-----------
 
59
Network State consists of the following facts:
 
60
 
 
61
* VLAN assignment (to a project)
 
62
* Private Subnet assignment (to a security group) in a VLAN 
 
63
* Private IP assignments (to running instances)
 
64
* Public IP allocations (to a project)
 
65
* Public IP associations (to a private IP / running instance)
 
66
 
 
67
While copies of this state exist in many places (expressed in IPTables rule chains, DHCP hosts files, etc), the controllers rely only on the distributed "fact engine" for state, queried over RPC (currently AMQP).  The NetworkController inserts most records into this datastore (allocating addresses, etc) - however, individual nodes update state e.g. when running instances crash.    
 
68
 
 
69
The Public Traffic Path
 
70
-----------------------
 
71
                                                                                                                                     
 
72
Public Traffic::
 
73
 
 
74
                (PUBLIC INTERNET)
 
75
                       |
 
76
                     <NAT>  <-- [RoutingNode]      
 
77
                       |
 
78
 [AddressingNode] -->  |
 
79
                    ( VLAN )  
 
80
                       |    <-- [BridgingNode]
 
81
                       |
 
82
                <RUNNING INSTANCE>   
 
83
 
 
84
The RoutingNode is currently implemented using IPTables rules, which implement both NATing of public IP addresses, and the appropriate firewall chains. We are also looking at using Netomata / Clusto to manage NATting within a switch or router, and/or to manage firewall rules within a hardware firewall appliance.        
 
85
 
 
86
Similarly, the AddressingNode currently manages running DNSMasq instances for DHCP services. However, we could run an internal DHCP server (using Scapy ala Clusto), or even switch to static addressing by inserting the private address into the disk image the same way we insert the SSH keys. (See compute for more details).                                           
 
 
b'\\ No newline at end of file'