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:

  • DHCP
  • Source NAT
  • Static NAT
  • Firewall
  • User Data

2. VPC network mode:

  • DHCP
  • Source NAT
  • Static NAT
  • Network ACL
  • User Data

3. Basic network mode:

  • DHCP
  • Source NAT
  • Static NAT
  • Security Groups
  • User Data

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

  • Where should the feature be developed?
  • Should it be on a branch off the ASF repo, and if so, are committer privileges required?
  • Testing
  • How does testing work for plugins which interface with tech which is not freely available?
  • Suggested approach: Plugin creator handles plugin testing, and the plugin is setup as "nonoss" in the pom.xml (therefore not compiled by default)

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:

    • Creation of one or more guest networks;
    • Deletion of one or more existing guest networks;
    • Add VMs to the same guest network and verify connectivity;
    • Add VMs to different guest network and verify isolation;
    • Delete VMs to ensure the removal of corresponding network interface;

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.