The neutron l3 agent is responsible for providing service for routing, natting, security-group rules and floatingip allocation. This purpose of this post is to document its working principles and also to enable users to effectively debug their Openstack cloud(most problems occur due to user mis configuration). The l3 agent offers these services from the network node and relies on neutron-openvswitch-agent to provide l2 connectivity to the instances running on compute nodes. This post assumes that the readers are aware of how l2 connectivity is achieved using ‘openvswitch’ mechanism driver. Continue reading “L3 connectivity using neutron-l3-agent”→
In this post we shall be discussing about various network components and their corresponding Linux virtual counterparts.
Switches basically provide the following functionality
Mac learning: As switch receive packets on their interface they map the interface id/port number to the source mac address of the all packets received on that interface. This is used later while forwarding.
Forwarding: Switches do not see a packet past the l2 headers. The have to perform a simple logic before sending out a packet received on one interface, to other interfaces.
If the destination is broadcast/multi-cast, forward on all ports except the ingress port.
If the destination of a packet is mapped to any interface send the packet out that interface alone.
If the destination is non of the above, forward on all ports belonging to the packet’s VLAN, except the ingress port.
VLAN Isolation: Packets are assorted according to their VLAN. A switch’s port can be either configured as trunk port(Belongs to all VLANs) or as an access port for a particular VLAN. The rules therefore are simple.
Packets appearing on trunk ports should be tagged unless they belong to vlan 1(native vlan). The tag identifies the packet’s vlan in this case.
Packets appearing on access ports should not be tagged unless they want to be dropped. The port configuration(access ports always belong to a VLAN) identifies the packet in this case
The assorted packets then pass through the forwarding phase, which determine to which port they would be sent to. Packets going out trunk ports will be tagged and those going out access ports will not be tagged. The forwarding logic guarantees that a packet belonging to a VLAN shall never trespass another VLAN.
L2 connectivity is the most basic requirement in a network. All cloud platforms allow users to create subnets. Subnets are L2 segments to which the servers attach their interfaces to and start sending and receiving traffic. Servers on the same L2 segment can reach each other directly. They only need to resolve the destination MAC address using ARP. In the world of networking this service is provided by your access switch.
A multitude of Openstack users eventually run into Open vSwitch. Not because they want to, but because they have to. So here is something to deconstruct what Open vSwitch really is, and what it does.
What is Open vSwitch?
In the words of the Open vSwitch website:
“Open vSwitch is a production quality, multilayer virtual switch licensed under the open source Apache 2.0 license. It is designed to enable massive network automation through programmatic extension, while still supporting standard management interfaces and protocols (e.g. NetFlow, sFlow, SPAN, RSPAN, CLI, LACP, 802.1ag).”
Openstack uses Open vSwitch as its default virtual switch. There are various reasons for this. The primary reason is VLAN support. Open vSwitch is inherently built with VLAN support, and Openstack uses VLANs extensively to differentiate between its virtual networks. Also, Open vSwitch is works very well in a distributed environment. This is extremely important in a platform like…