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.
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 |