Chapter 15. Configure Distributed Virtual Routing (DVR)

Distributed Virtual Routing (DVR) allows you to place L3 Routers directly on Compute nodes. As a result, instance traffic is directed between the Compute nodes (East-West) without first requiring routing through a Network node. In addition, the Floating IP namespace is replicated between all participating Compute nodes, meaning that instances with assigned floating IPs can send traffic externally (North-South) without routing through the network node. Instances without floating IP addresses still route SNAT traffic through the Networking node.

Red Hat OpenStack Platform 7 (kilo) added support for interconnecting between VLAN and VXLAN/GRE when using distributed routers. This integration allows connectivity between VLANs and VXLAN/GRE tunnels in DVR.

Note

DVR is included as a technology preview in Red Hat OpenStack Platform 9. For more information on the support scope for features marked as technology previews, refer to https://access.redhat.com/support/offerings/techpreview/

In the diagram below, the instances on separate subnets are able to communicate, without routing through the Network node first:

DVR Overview

15.1. Configure DVR

1. On the Network node, enable router_distributed in the neutron.conf file. This setting ensures that all routers created in future are distributed by default.

router_distributed = True

You can override the default behavior by editing the policy.json file:

neutron router-create --distributed=True/False <name>

2. Configure the Layer 3 agent

On the Compute nodes, enable DVR in the l3_agent.ini file:

agent_mode = dvr

On the Network node, configure dvr_snat on the distributed router:

agent_mode = dvr_snat

3. Configure the Layer 2 agent

On the Network node and Compute nodes, enable DVR and L2 population on the L2 Agent. For example, if using Open vSwitch, edit the ovs_neutron_plugin.ini file:

enable_distributed_routing = True
l2_population = True

4. Enable the L2 population mechanism driver in ML2

On the Controller, edit ml2_conf.ini:

[ml2]
mechanism_drivers = openvswitch, l2population	#Other values may be listed here as well

On the Compute nodes, edit ml2_conf.ini:

[agent]
l2_population = True

5. Restart the services for the changes to take effect:

On the Controller, restart the following services:

# systemctl restart neutron-server.service
# systemctl restart neutron-l3-agent.service
# systemctl restart neutron-openvswitch-agent.service

On the Compute node, restart the following services:

# systemctl restart neutron-l3-agent.service
# systemctl restart neutron-metadata-agent
Note

It is not currently possible to convert an existing non-distributed router to DVR. The router should instead be deleted and re-created as DVR.