kj-bsc-plugin
The proposed CloudStack networking plugin will bring the OpenFlow-based standard network virtualization technology to CloudStack. The plugin would work with the commercial-version of the BigSwitch Controller, but not the open-source controller, floodlight.
This is functional specification of BigSwitch Network Plugin, which has Jira ID 733
Date |
Revision |
Author |
Description of the change |
---|---|---|---|
1/15/2013 |
0.1 |
Kanzhe Jiang |
Initial Draft |
Term |
Definition |
---|---|
BSC |
BigSwitch Controller |
BVS |
Big Virtual Switch |
CS |
CloudStack |
There won't be any change to the existing CloudStack workflow. In a typical deployment, all OpenFlow-enabled physical and virtual switches and other network resources are configured to be managed by the BigSwitch controller(s). When a guest network is created, the plugin will create a corresponding virtual network in the BVS When a guest VM is launched, the VM is automatically assigned to its configured guest network(s). The BVS application will provide network isolation and connectivities among VMs.
CloudStack provides plugin framework that allow different resources to be integrated with the CloudStack core. A BigSwitch networking plugin will be developed to add openflow-based network virtualization into cloudstack. There are two main modules in NetworkIng plugin, NetworkGuru and NetworkElement. NetworkGuru is the network abstraction that defines the interfaces that manage the life cycle of a network, and permits implementations of various network isolation technologies and ip address technologies.
Each tenant network in CS will be mapped to a virtual network on the controller. In CloudStack, the same IP pool is re-used for all tenant networks. It results duplicate IPs in the network. We will use addressSpace construct on the controller to get around the issue for now. This isolation method is the same as using VLAN. In CloudStack workflow, each tenant will be assigned a range of VLANs as part of the tenant configuration. When a tenant network is created, a vlan from the tenant's vlan pool is associated with the network. BSC plugin can create an addressSpace with the vlan as its transport vlan, then create a BVS for the tenant network and create the addressSpace identifier rule and BVS membershipRule with the associated tag. Expected code changesBVSNetworkGuru.java will extend NetworkGuru class and implement the network design() and implement() methods. design() method will perform verification of network attributes. implement() method will invoke quantum app REST APIs to create BVS and interfaceRule. Non-VLAN based isolation will not be covered in this release and can be added to the plugin as additional option in the near future.
NetworkElement is a network resource abstraction that manages the life cycle of a network element. NetworkElement can also facilitate network services on network elements to support a VM (ie. DNS, DHCP, LB, VPN, Port Forwarding, etc). Each network element maps to a host-config on BSC.
CloudStack support two networking mode, basic and advanced.
Basic networking is an AWS-style networking, which provides a single network where guest isolation can be provided through layer-3 such as security groups (IP address source filtering). This feature will be supported in the future release.
Advanced networking provides extensibility through CloudStack plugin. A BigSwitch networking plugin will be available in the advanced mode as "BVS" option.
None
BVS option will be added with Network creation.
BVSNetworkGuru:design() { if the network isolation type is not BVS, return null; if the controller is not available, return null; return super.design() } BVSNetworkGuru:implement() { create network id; Send a REST request to create the network, http://controllerIp:/quantum/v1.1/tenants/:tenant/networks } BVSNetworkGuru:shutdown() { Send a REST request to delete the network, http://controllerIp:/quantum/v1.1/tenants/:tenant/networks/:network }
BVSNetworkElement:prepare() { Send a REST request to create the host config for the VM, http://controllerIp:/quantum/v1.1/tenants/:tenant/networks/:network/ports/:port/attachment with vm's MAC } BVSNetworkElement:release() { Send a REST request to delete the host config for the VM, http://controllerIp:/quantum/v1.1/tenants/:tenant/networks/:network/ports/:port/attachment }