Bug Reference

CLOUDSTACK-996

Branch

TBD, see "Outstanding questions" below

Introduction

The proposed CloudStack networking plugin will bring the MidoNet network virtualization technology to CloudStack.

Purpose

This is a functional specification of the MidoNet Network Plugin, which has Jira ID 996

References

External link describing the MidoNet SDN solution: http://www.midokura.com/midonet/

Document History

Date

Revision

Author

Description of the change

1/21/2013

0.1

Dave Cahill

Initial Draft

Glossary

Term

Definition

CS

CloudStack

Feature Specifications

Feature Summary

For the MidoNet plugin, we plan to support the following network model / service combinations:

1. Advanced Isolated network mode:

2. VPC network mode:

3. Basic network mode:

The initial implementation targets the KVM hypervisor.

Advantages

The intended use case is for all routing etc to be handled in the MidoNet virtual network - no Virtual Router VMs need to be spun up. This eliminates the bottleneck at the Virtual Router, as routing in MidoNet is handled at the edge (in the hypervisor).

MidoNet background

MidoNet is an overlay network solution, with MidoNet agents running on each host to form a mesh of GRE tunnels among the hosts. It stores the network state in distributed storage, and provides a REST API to manage the virtual network resources. MidoNet implements L2, L3 and basic L4 functionality.

Outstanding questions

Test guidelines

The MidoNet networking plugin functions as a REST client to the MidoNet API server. A running instance of the MidoNet API server is required in order to test the plugin's functionality.

The following tests should be verified before declaring the feature complete:

Use cases

There won't be any change to the existing CloudStack workflow. Of course, a NetworkOffering will need to be created with MidoNet set as the Provider for the relevant capabilities.

When a guest network is created, the plugin will create the logical topology in MidoNet by making REST calls to the MidoNet API.

When a guest VM is launched, the VIF driver on the host automatically assigns the VM to its configured guest network(s) and plugs the VM into the MidoNet datapath. MidoNet provides network isolation and connectivity among VMs, routing functions, Static Nat, Source NAT etc.

Architecture and Design description

A MidoNet networking plugin will be developed to add MidoNet network virtualization into CloudStack.

We will implement a MidoNetGuestNetworkGuru (for Guest Traffic), and a MidoNetElement. We will also create a VIF Driver for plugging VMs into the MidoNet datapath on the Host in KVM.

The Capability / Networking mode combinations to be supported by the MidoNet plugin are listed in the "Feature Summary" section above.

Configuration changes

Two new configuration parameters to be added to global settings (Config.java):

midonet.apiserver.address
The address of the MidoNet REST API server.

midonet.providerrouter.id
In a MidoNet / CloudStack deployment, guest network routers connect to an uplink router in the logical network. This configuration parameter is the identifier for the uplink router, and facilitates creating the logical uplink connection.

A new NetworkDevice called Midonet will be added (ExternalNetworkDeviceManager.java)
A new isolation type MIDO will be added (PhysicalNetwork.java)
A BroadcastDomainType Mido will be added (Networks.java)

Web Services APIs

None.

UI flow

No change.

Appendix

None.