[ OpenDaylight | ODL ] Configuring EVPN on Juniper Devices to Provide Services to Kubernetes

Estimated Reading Time: 2 minutes

Word Count: 446


In today’s blog post, we continue our conversation on Intent-based solutions from a user perspective. From a user perspective, the goal of these solutions is to configure networks using a high-level language.

A new feature will soon be released to OpenDaylight (ODL) called NIC upstream. This new feature enables users to configure EVPN services on Juniper devices using Intents. The idea behind this feature is to deliver all information needed for the Kubernetes CNI plugin and other services that require EVPN configuration. Initially, this new functionality was built to work with Juniper devices; it is now extensible to other devices that do not provide compatibility with ODL.

How it Works

At first, the user must provide basic information about the devices and where the EVPN service will be configured. This includes the following information:

  • Switch name (a switch identifier)
  • Device function (that can be LEAF or SPINE)
  • The loopback IP
  • The Switch HTTP IP
  • The Switch HTTP Port
  • User and Pass for HTTP authentication

Once NIC receives this initial information, the switch can be reached by the given name. Next, a connection is established via HTTP requests.

At this point, the user will determine which service should be available and configured on the devices by providing the following information:

  • The host name (the host where the service will run)
  • The switch where the service should be available (using the switch name provided before)
  • Host IP address
  • Host subnet-mask
  • Host gateway IP
  • Host bridge (the bridge that will be connected to the switch port)
  • The switch interfaces where the services will be available
  • The VLAN that should be available

Once NIC contains all the information stored, the Kubernetes CNI plugin can create Intents defining only a service name and using the VLAN name previously provided.

At this moment, NIC will establish a new HTTP connection with the device in order to send final configurations based on the Intent created by the CNI plugin. Kubernetes will monitor the Intent creation based on NIC’s Intent State Machine that is available from NIC’s REST API. Once the final state of the Intent changes from “DEPLOYING” to “DEPLOYED’,” Kubernetes will start the process to create containers using the information provided by NIC, such as: Host IP Address and VLAN ID.


This integration between the Kubernetes CNI plugin and ODL NIC provides a new and easy way to create containers. It also configures EVPN services dynamically using a high level language instead of low configuration details. With this new functionality, NIC is also able to configure devices not compatible with ODL, as per software-defined networking standards. Therefore, these features provide additional strength to the multi-functional capabilities of Kubernetes and ODL.