Skip to content

[RFE] Support ECMP route configuration #27

Description

@yushoyamaguchi

Background

addroutes uses types.Route which supports only a single gateway per destination.
There is no way to configure ECMP routes explicitly in the current plugin.
For our usecase which is explained below, we want the feature in this plugin.

Use case

Our use case is as follows:

  • In an OpenStack environment, we create multiple routers connected to the same L2 network.
  • This network is attached to worker VMs.
  • Inside the VM, we attach an additional interface to Pods using ipvlan (as a secondary interface).
  • For this interface, we want to configure ECMP routes where multiple OpenStack routers act as gateways.
Image

This requires the ability to define multiple equal-cost default routes in the configuration.

Current Workaround and the Need for ECMP

Currently, traffic distribution is achieved by assigning different NADs to individual worker nodes or pods. This creates substantial IaC management overhead and becomes a significant challenge when scaling out. By introducing ECMP support, a unified NAD configuration can be used, greatly simplifying operations and improving scalability.

ECMP also provides redundancy against router failures, which cannot be achieved with a single statically configured next hop.

Proposal Specification

One possible specification for ECMP route configuration is as follows:

        {
          "type": "route-override",
          "addecmproutes": [
            {
              "dst": "10.200.0.0/24",
              "gws": [
                "192.168.100.1",
                "192.168.100.2"
              ]
            }
          ]
        }

A new field addecmproutes (and delecmproutes for deletion) is introduced, where each entry specifies a destination prefix and a list of gateways.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions