Jump to: navigation, search

Difference between revisions of "Multinic-libvirt"

m (Text replace - "NovaSpec" to "NovaSpec")
 
(6 intermediate revisions by 2 users not shown)
Line 1: Line 1:
__NOTOC__
+
* '''Launchpad Entry''': NovaSpec:multinic-libvirt
* '''Launchpad Entry''': [[NovaSpec]]:multinic-libvirt
 
 
* '''Created''': Ilya Alekseyev
 
* '''Created''': Ilya Alekseyev
 
* '''Contributors''': Eldar Nugaev, Ilya Alekseyev
 
* '''Contributors''': Eldar Nugaev, Ilya Alekseyev
Line 9: Line 8:
 
== Release Note ==
 
== Release Note ==
  
Multiple NIC for libvirt allows users to have instances connected to several networks.  
+
This is implementation same functionality as in https://blueprints.launchpad.net/nova/+spec/multi-nic for libvirt.
 +
Multiple NIC for libvirt allows users to have instances connected to several networks.
 +
Implementation of this blueprint is first step in add support multi-nics for libvirt.
  
 
== Rationale ==
 
== Rationale ==
Line 19: Line 20:
 
== Design ==
 
== Design ==
  
Instances should be created with one NIC per network associated with project.
+
https://blueprints.launchpad.net/nova/+spec/multi-nic
 +
GD PoC branches:
 +
https://code.launchpad.net/~ilyaalekseyev/nova/libvirt-multinic-experemental
  
 
== Implementation ==
 
== Implementation ==
Line 26: Line 29:
  
 
=== Code Changes ===
 
=== Code Changes ===
  I. DB model changes.
+
  I. libvirt connection changes
Add to DB model:
+
     changes in libvirt_con.to_xml() propagate NIC data
 
+
I. firewall rules changes
+ Network Interface Card
+
    All firewall drivers would be changed to support multiple networks per instance. iptable rules should be changed.
    + id (PK)
+
I. network managers changes
    + instance_id (FK - instance.id)
+
# FlatManager: open question - seems it is not required to be changed, but we need to check it
    + mac_address
+
# FlatDHCPManager should be changed to support multiple networks
    + network_id( FK)
+
# VlanManager should be changed to support multiple networks
+ Network to project association
+
I. template changes
    + network_id (FK, PK)
+
  Add support of several NICs to template:
    + project_id (FK, PK)
+
 
    + order (int) - for interface sorting in libvirt template cycle
 
    + deleted, created_at, deleted_at, ...
 
DB model changes:
 
  Instance
 
     - mac_address
 
2. nova-manage changes
 
GD:
 
nova-manage network associate <project id> <network cidr> [<order>]
 
order is optional parameter, if not exists will be max(order in project)+1
 
Example: nova-manage network associate project1 10.0.0.0/16
 
3. libvirt connection changes
 
GD:
 
changes in libvirt_con.to_xml() propagate NIC data
 
 
 
4. firewall rules changes
 
All firewall drivers would be changed to support multiple networks per instance. iptable rules should be changed.
 
Open question: rules for network shared between several projects
 
 
 
5. network managers changes
 
GD:
 
5.1 [[FlatManager]]: open question - seems it is not required to be changed, but we need to check it
 
5.2 FlatDHCPManager should be changed to support multiple networks
 
5.3 [[VlanManager]] should be changed to support multiple networks
 
 
 
6. template changes
 
Add support of several NICs to template:
 
 
 
 
<pre><nowiki>#!highlight xml
 
<pre><nowiki>#!highlight xml
 
#for $nic in $nics
 
#for $nic in $nics
Line 84: Line 60:
 
</nowiki></pre>
 
</nowiki></pre>
  
7. API changes:
 
GD: we not expecting any changes in EC2 API. we think that we could change [[OpenStack]] API only.
 
  
 
=== Migration ===
 
=== Migration ===
Line 91: Line 65:
 
== Test/Demo Plan ==
 
== Test/Demo Plan ==
  
We need both unit and integration tests. Second is most important.
+
We need both unit and integration tests. Second is more important.
  
 
== Unresolved issues ==
 
== Unresolved issues ==

Latest revision as of 23:31, 17 February 2013

  • Launchpad Entry: NovaSpec:multinic-libvirt
  • Created: Ilya Alekseyev
  • Contributors: Eldar Nugaev, Ilya Alekseyev

Summary

We need support for multiple network interfaces per instance for libvirt. Our vision based on http://wiki.openstack.org/multi-nic specification. with some additions.

Release Note

This is implementation same functionality as in https://blueprints.launchpad.net/nova/+spec/multi-nic for libvirt. Multiple NIC for libvirt allows users to have instances connected to several networks. Implementation of this blueprint is first step in add support multi-nics for libvirt.

Rationale

User stories

Assumptions

Design

https://blueprints.launchpad.net/nova/+spec/multi-nic GD PoC branches: https://code.launchpad.net/~ilyaalekseyev/nova/libvirt-multinic-experemental

Implementation

UI Changes

Code Changes

I. libvirt connection changes
   changes in libvirt_con.to_xml() propagate NIC data
I. firewall rules changes
   All firewall drivers would be changed to support multiple networks per instance. iptable rules should be changed.
I. network managers changes
  1. FlatManager: open question - seems it is not required to be changed, but we need to check it
  2. FlatDHCPManager should be changed to support multiple networks
  3. VlanManager should be changed to support multiple networks
I. template changes
  Add support of several NICs to template:
  
#!highlight xml
#for $nic in $nics
        <interface type='bridge'>
            <source bridge='$nic.bridge_name'/>
            <mac address='$nic.mac_address'/>
            <!--   <model type='virtio'/>  CANT RUN virtio network right now -->
            <filterref filter="nova-instance-$nic.name">
                <parameter name="IP" value="$nic.ip_address" />
                <parameter name="DHCPSERVER" value="$nic.dhcp_server" />           
#if $getVar('extra_params', False)
                $nic.extra_params
#end if
#if $getVar('ra_server', False)
                <parameter name="RASERVER" value="$nic.ra_server" />
#end if
            </filterref>
        </interface>
#end for


Migration

Test/Demo Plan

We need both unit and integration tests. Second is more important.

Unresolved issues

BoF agenda and discussion

http://ietherpad.com/arRVMd2Lwl