So far in this chapter, we have presented a high-level view of the OpenContrail architecture. We have also seen how to install and do basic operations with OpenContrail. We will end this chapter with an overview of the integration between OpenStack and OpenContrail. A more hands-on detail of this integration will be shared in the next chapter.
Neutron and Nova integration
Neutron is the networking project within the OpenStack platform. As an SDN platform, it is natural that OpenContrail integrates with OpenStack Neutron using a plugin. Since OpenContrail supports a large set of networking services, it is configured as a core plugin in Neutron.
In addition to Neutron, OpenContrail also responds to port creation requests from Nova. Once a virtual machine instance is created by Nova, the Nova agent requests the creation of logical ports to provide network connectivity to that virtual machine. This request is sent by the Nova agent to the local vRouter agent on the Compute Node.
High-level flow of requests from OpenStack
Let us now look at the flow of requests from OpenStack and how these operations result in OpenContrail functionalities being invoked. For discussion purposes, we will assume that the user uses the OpenStack web GUI to perform the operations:
Step by step flow of requests between OpenStack and OpenContrail
The preceding figure shows the step-by-step flow of requests between OpenStack and OpenContrail. Let us now see what happens in each of the steps:
In OpenStack, the first operation is usually to create a network. This operation will send a create network request to Neutron. In the case of OpenContrail, the plugin will delegate this call directly to the OpenContrail API and will be processed by the configuration. Depending on the type of virtual network, OpenContrail will allocate some resources for this network. For example, for a VXLAN-based network, a VXLAN Network Identifier (VNI) will be assigned.
Once a virtual network is created for a tenant, the next step is to create a VM instance that attaches to this network. This operation of creating an instance is processed by the Nova service in OpenStack. On the Compute Node, the Nova Agent processes the request to create a VM instance.
This is followed by another call to create and attach the virtual interface of the VM to the user-specified network. This request is also processed by Nova, but the specific virtual interface creation is handled by the OpenContrail driver.
The OpenContrail virtual interface driver (for Nova) uses the vRouter API to ensure that the vRouter fetches the correct configuration for this virtual network interface from the controller and uses this configuration to provision the forwarding rules locally inside the vRouter kernel module.