Neutron DVR OpenStack Liberty

Distributed Virtual Routers aka DVR were created to avoid single point of failure on neutron nodes.

When using standard routers, all the traffic is passing out through Neutron servers. Inside network servers, router namespaces are created routing all traffic and NAT forwarding between instances and public networks. When a network node falls down, instance traffic will no longer be available until a new namespace is created and executed in another network node.

Distributed routers is a way to avoid the SPOF neutron nodes were. When using DVR, router namespaces, are directly created inside compute nodes where all instance and l3 traffic are routed.

If you want to know more about DVR check this awesome links:

A previous OpenStack Liberty installation is required, mine was done with RDO packstack.

Configure all Neutron Servers

Edit ml2 configuration file with the following:

# vi /etc/neutron/plugins/ml2/ml2_conf.ini

mechanism_drivers = openvswitch,l2population
type_drivers = flat,vlan,vxlan
tenant_network_types = vxlan
vni_ranges = 10:100
vxlan_group = 224.1.1.1
enable_security_group = True

Edit neutron configuration file, enable DVR and uncomment dvr_base_mac option

Configure l3 agent to use dvr_snat

Restart neutron server

Configure all Compute Nodes

Install ml2 package

Edit openvswitch agent file as below:

Enable DVR and select an interface driver to be used by l3 agent

Edit ml2 configuration file as below:

Start and enable metadata agent in compute nodes

Create an external bridge with an external IP associated on it

Modify an unused interface connected with the same network as the IP configured with br-ex, edit the interface to be used as OVS port by br-ex

Restart network service to apply changes on the interfaces and openvswith-agent

Create an external network and a subnet on it

Create a router and associate external network as router gateway

Create an internal network, a subnet and associate an interface to the router

Boot 2 instances

Create 2 floating ips and associate it to instances

Test if all works as expected pinging floating ips

As you can see, in network nodes, a snat namespace is created

In compute nodes, a fip namespace per instance with floating ip associated running on the compute node are created and a qrouter namespace are created.

Best regards, Eduardo Gonzalez

Last updated

Was this helpful?