Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

 
 

Juniper Cloud-Native Router - Overview

Overview

The Juniper Cloud-Native Router (cloud-native router) is a container-based software solution, orchestrated by Kubernetes (K8s). Cloud-native router combines the containerized routing protocol process (cRPD) and a DPDK-enabled Contrail virtual router (vRouter). With the cloud-native router, you can enable full Junos-based control plane with the enhanced forwarding capabilities of the DPDK-enabled vRouter.

Benefits of Juniper Cloud-Native Router

Some of the benefits provided by the cloud-native router solution are:

  • Higher packet forwarding performance with DPDK-enabled vRouter
  • Easy deployment on general purpose compute devices
  • Out-of-the-box software-based open radio access network (O-RAN) support
  • Quick spin up with containerized deployment on Kubernetes
  • Highly scalable solution

Kubernetes

Let's talk a little about Kubernetes in this section. Kubernetes is an orchestration platform for running containerized applications in a clustered computing environment. It provides automatic deployment, scaling, networking, and management of containerized applications. Since Juniper Cloud-Native Router is a container-based solution, we have chosen Kubernetes as the orchestration platform. For complete details about Kubernetes, including installation, cluster creation, management, and maintenance, see https://kubernetes.io/.

Below we provide a brief description of the major components that make up a K8s cluster.

  • Nodes

    Kubernetes uses two types of nodes: a master (control) node and a compute (worker) node. A K8s cluster usually consists of one or more master nodes (in active/standby mode) and one or more worker nodes. You create a node on a physical computer or a VM.

    Note:

    For the 22.X Release of Juniper Cloud-Native Router, you must provide a working, single-node Kubernetes cluster. Cloud-native router does not support multinode clusters, with master and worker nodes on separate VMs or BMS.

  • Pods

    Pods live in nodes and provide a space for containerized applications to run. A K8s Pod consists of one or more containers, with each Pod representing an instance of the application(s). A Pod is the smallest unit that K8s can manage. All containers in a Pod share the same network namespace.

  • Namespaces

    In K8s, Pods operate within a namespace to isolate groups of resources within a cluster. All K8s clusters have a kube-system namespace, which you might guess is for objects created by the Kubernetes system. Kubernetes also has a default namespace which holds all objects that don't provide their own namespace. The last two preconfigured Kubernetes namespaces are kube-public and kube-node-lease. The kube-public namespace is used to allow unauthenticated users to read some aspects of the cluster. Node leases allow the kubelet to send heartbeats so the control plane can detect node failure.

    In the 22.X Release of Juniper Cloud-Native Router, some of the Pods run in the kube-system namespace while others provide their own namespace.

  • Kubelet

    The kubelet is the primary node agent that runs on each node. In the case of Juniper Cloud-Native Router, only a single kubelet runs on the cluster since we do not support multinode deployments.

  • Containers

    A container is a single package that consists of an entire runtime environment including the application and its:

    • Configuration files

    • Dependencies

    • Libraries

    • Other binaries

    Software that runs in containers can, for the most part, ignore the differences in the those binaries, libraries, and configurations that may exist between the container environment and the environment that hosts the container. Common container types are docker, containerd, and CRI-O.

    For the 22.X Release of Juniper Cloud-Native Router, docker is the only supported container type (container runtime).

JCNR Components

Several components make up the Juniper Cloud-Native Router solution. We give a brief overview of those components in this section.

The image below shows the components of the Juniper Cloud-Native Router inside a Kubernetes cluster. The green-colored components are JCNR-specific, while the others are required third-party components.

  • Juniper Cloud-Native Router Controller (JCNR-controller or cRPD)

    The cRPD acts as the control plane for the cloud-native router. It performs management functions and maintains configuration information for the vRouter forwarding plane. cRPD is based on the Junos OS control plane. You can configure it using:

    • YAML-formatted Helm charts

    • Third party management platforms that use the NETCONF protocol

    • API calls to the cRPD MGD

    • Direct CLI access to the cRPD Pod

  • Juniper Cloud-Native Router Dataplane (JCNR-vRouter or vRouter)

    JCNR-vRouter acts as the forwarding, or data, plane for Juniper Cloud-Native Router. It interacts with the JCNR-controller through the vRouter-agent and receives and forwards packets through its various interfaces.

    JCNR-vRouter enables applications built using the DPDK framework to send and to receive packets directly between the application and the vRouter without passing through the kernel.

    The vRouter receives configuration and management information from JCNR-controller through the JCNR vRouter-agent using the gRPC protocol.

  • Juniper Cloud-Native Router-Container Network Interface (JCNR-CNI)

    JCNR-CNI is a Kubernetes CNI and is responsible for provisioning network interfaces for application Pods. vRouter acts as the data-plane for these application Pod interfaces. JCNR-CNI interacts with Kubernetes, JCNR-controller and JCNR-vRouter. JCNR-CNI manages vRouter interface life cycles and cRPD configuration. When you remove an application Pod, JCNR-CNI removes the corresponding interface configuration from cRPD and state information from the vRouter-DPDK data plane.

Ports Used by Cloud-Native Router

Juniper Cloud-Native Router listens on certain TCP and UDP ports. The table below shows the ports, protocols, and a description for each one.

Table 1: Cloud-Native Router Listening Ports
Protocol Port Description
TCP 8085 vRouter introspect–Used to gain internal statistical information about vRouter
TCP 8070 Telemetry information-Used to see telemetry data from cloud-native router
TCP 9091 vRouter health check–JCNR checks to ensure contrail-vrouter-dpdk process is running, etc.
TCP 50052 gRPC port–JCNR listens on both IPv4 and IPv6
TCP 24 cRPD SSH
TCP 830 cRPD NETCONF
TCP 666 rpd
TCP 1883 Mosquito mqtt–Publish/subscribe messaging utility
TCP 9500 agentd on cRPD
TCP 21883 na-mqttd
TCP 50051 jsd on cRPD
TCP 51051 jsd on cRPD
UDP 50055 Syslog-NG