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.
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:
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
neutron router-create --distributed=True/False <name>
2. Configure the Layer 3 agent
On the Compute nodes, enable DVR in the
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
enable_distributed_routing = True l2_population = True
4. Enable the L2 population mechanism driver in ML2
On the Controller, edit
[ml2] mechanism_drivers = openvswitch, l2population #Other values may be listed here as well
On the Compute nodes, edit
[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
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.