Install and Verify Juniper Cloud-Native Router for OpenShift Deployment
The Juniper Cloud-Native Router (cloud-native router) uses the the JCNR-Controller (cRPD) to provide control plane capabilities and JCNR-CNI to provide a container network interface. Juniper Cloud-Native Router uses the DPDK-enabled vRouter to provide high-performance data plane capabilities and Syslog-NG to provide notification functions. This section explains how you can install these components of the Cloud-Native Router on Red Hat OpenShift Container Platform (OCP).
Install Juniper Cloud-Native Router Using Helm Chart
Read this section to learn the steps required to install the cloud-native router components using Helm charts.
- Review the System Requirements for OpenShift Deployment to ensure the cluster has all the required configuration.
-
Download the desired Cloud-Native Router software package to the directory of your choice.
You have the option of downloading the package to install Cloud-Native Router only or downloading the package to install JNCR together with Juniper cSRX. See Cloud-Native Router Software Download Packages for a description of the packages available. If you don't want to install Juniper cSRX now, you can always choose to install Juniper cSRX on your working Cloud-Native Router installation later.
-
Expand the file
Juniper_Cloud_Native_Router_release-number.tgz.
tar xzvf Juniper_Cloud_Native_Router_release-number.tgz
-
Change directory to the main installation directory.
If you're installing Cloud-Native Router only, then:
This directory contains the Helm chart for Cloud-Native Router only.cd Juniper_Cloud_Native_Router_<release>
If you're installing Cloud-Native Router and cSRX at the same time, then:
This directory contains the combination Helm chart for Cloud-Native Router and cSRX.cd Juniper_Cloud_Native_Router_CSRX_<release>
Note:All remaining steps in the installation assume that your current working directory is now either Juniper_Cloud_Native_Router_<release> or Juniper_Cloud_Native_Router_CSRX_<release>.
-
View the contents in the current directory.
ls helmchart images README.md scripts secrets
-
Change to the helmchart directory and expand the Helm
chart.
cd helmchart
For Cloud-Native Router only:
ls jcnr-<release>.tgz
tar -xzvf jcnr-<release>.tgz
The Helm chart is located in the jcnr directory.ls jcnr jcnr-<release>.tgz
For the combined Cloud-Native Router and cSRX:
ls jcnr_csrx-<release>.tgz
tar -xzvf jcnr_csrx-<release>.tgz
The Helm chart is located in the jcnr_csrx directory.ls jcnr_csrx jcnr_csrx-<release>.tgz
-
The Cloud-Native Router container images are required for deployment. Choose one of the
following options:
-
Configure your cluster to deploy images from the Juniper Networks
enterprise-hub.juniper.net
repository. See Configure Repository Credentials for instructions on how to configure repository credentials in the deployment Helm chart. -
Configure your cluster to deploy images from the images tarball included in the downloaded Cloud-Native Router software package. See Deploy Prepackaged Images for instructions on how to import images to the local container runtime.
-
- Follow the steps in Installing Your License to install your Cloud-Native Router license.
-
Enter the root password for your host server into the
secrets/jcnr-secrets.yaml file at the following
line:
root-password: <add your password in base64 format>
You must enter the password in base64-encoded format. To encode the password, create a file with the plain text password on a single line. Then issue the command: Copy the output of this command into secrets/jcnr-secrets.yaml.base64 -w 0 rootPasswordFile
-
Apply secrets/jcnr-secrets.yaml to the cluster.
kubectl apply -f secrets/jcnr-secrets.yaml namespace/jcnr created secret/jcnr-secrets created
- If desired, configure how cores are assigned to the vRouter DPDK containers. See Allocate CPUs to the Cloud-Native Router Forwarding Plane.
-
Customize the Helm chart for your deployment using the
helmchart/jcnr/values.yaml or
helmchart/jcnr_csrx/values.yaml file.
See Customize Cloud-Native Router Helm Chart for OpenShift Deployment for descriptions of the Helm chart configurations.
-
Optionally, customize Cloud-Native Router configuration.
See Customize Cloud-Native Router Configuration for creating and applying the cRPD customizations.
- If you're installing Juniper cSRX now, then follow the procedure in Apply the cSRX License and Configure cSRX.
-
Deploy the Juniper Cloud-Native Router using the Helm chart.
Navigate to the helmchart/jcnr or the helmchart/jcnr_csrx directory and run the following command:
orhelm install jcnr .
helm install jcnr-csrx .
NAME: jcnr LAST DEPLOYED: Fri Dec 22 06:04:33 2023 NAMESPACE: default STATUS: deployed REVISION: 1 TEST SUITE: None
-
Confirm Juniper Cloud-Native Router deployment.
helm ls
Sample output:
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION jcnr default 1 2023-12-22 06:04:33.144611017 -0400 EDT deployed jcnr-<version> <version>
Verify Installation
The output shown in this example procedure is affected by the number of nodes in the cluster. The output you see in your setup may differ in that regard.
-
Verify the state of the Cloud-Native Router pods by issuing the
kubectl get pods -A
command.The output of thekubectl
command shows all of the pods in the Kubernetes cluster in all namespaces. Successful deployment means that all pods are in the running state. In this example we have marked the Juniper Cloud-Native Router Pods in bold. For example:kubectl get pods -A
NAMESPACE NAME READY STATUS RESTARTS AGE contrail jcnr-0-dp-contrail-vrouter-nodes-b2jxp 2/2 Running 0 16d contrail jcnr-0-dp-contrail-vrouter-nodes-vrdpdk-g7wrk 1/1 Running 0 16d jcnr jcnr-0-crpd-0 1/1 Running 0 16d jcnr syslog-ng-vh89p 1/1 Running 0 16d openshift-cluster-node-tuning-operator tuned-zccwc 1/1 Running 8 69d openshift-dns dns-default-wmchn 2/2 Running 14 69d openshift-dns node-resolver-dm9b7 1/1 Running 8 69d openshift-image-registry image-pruner-28212480-bpn9w 0/1 Completed 0 2d11h openshift-image-registry image-pruner-28213920-9jk74 0/1 Completed 0 35h openshift-image-registry node-ca-jbwlx 1/1 Running 8 69d openshift-ingress-canary ingress-canary-k6jqs 1/1 Running 8 69d openshift-ingress router-default-55dff9cbc5-kz8bg 1/1 Running 1 62d openshift-kni-infra coredns-node-warthog-41 2/2 Running 16 69d openshift-kni-infra keepalived-node-warthog-41 2/2 Running 14 69d openshift-machine-config-operator machine-config-daemon-w8fbh 2/2 Running 16 69d openshift-monitoring alertmanager-main-1 6/6 Running 7 62d openshift-monitoring node-exporter-rbht9 2/2 Running 15 69d openshift-monitoring prometheus-adapter-7d77cfb894-nx29s 1/1 Running 0 6d18h openshift-monitoring prometheus-k8s-1 6/6 Running 6 62d openshift-monitoring prometheus-operator-admission-webhook-7d4759d465-mv98x 1/1 Running 1 62d openshift-monitoring thanos-querier-6d77dcb87-c4pr6 6/6 Running 6 62d openshift-multus multus-additional-cni-plugins-jbrv2 1/1 Running 8 69d openshift-multus multus-x2ddp 1/1 Running 8 69d openshift-multus network-metrics-daemon-tg528 2/2 Running 16 69d openshift-network-diagnostics network-check-target-mqr4t 1/1 Running 8 69d openshift-operator-lifecycle-manager collect-profiles-28216020-66xqc 0/1 Completed 0 6m8s openshift-ovn-kubernetes ovnkube-node-d4g2s 5/5 Running 37 69d
-
Verify the Cloud-Native Router daemonsets by issuing the
kubectl get ds -A
command.Use the
kubectl get ds -A
command to get a list of daemonsets. The Cloud-Native Router daemonsets are highlighted in bold text.kubectl get ds -A
NAMESPACE NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE contrail jcnr-0-dp-contrail-vrouter-nodes 1 1 1 1 1 <none> 16d contrail jcnr-0-dp-contrail-vrouter-nodes-vrdpdk 1 1 1 1 1 <none> 16d jcnr syslog-ng 1 1 1 1 1 <none> 16d openshift-cluster-node-tuning-operator tuned 5 5 5 5 5 kubernetes.io/os=linux 69d openshift-dns dns-default 5 5 5 5 5 kubernetes.io/os=linux 69d openshift-dns node-resolver 5 5 5 5 5 kubernetes.io/os=linux 69d openshift-image-registry node-ca 5 5 5 5 5 kubernetes.io/os=linux 69d openshift-ingress-canary ingress-canary 2 2 2 2 2 kubernetes.io/os=linux 69d openshift-machine-api ironic-proxy 3 3 3 3 3 node-role.kubernetes.io/master= 69d openshift-machine-config-operator machine-config-daemon 5 5 5 5 5 kubernetes.io/os=linux 69d openshift-machine-config-operator machine-config-server 3 3 3 3 3 node-role.kubernetes.io/master= 69d openshift-monitoring node-exporter 5 5 5 5 5 kubernetes.io/os=linux 69d openshift-multus multus 5 5 5 5 5 kubernetes.io/os=linux 69d openshift-multus multus-additional-cni-plugins 5 5 5 5 5 kubernetes.io/os=linux 69d openshift-multus network-metrics-daemon 5 5 5 5 5 kubernetes.io/os=linux 69d openshift-network-diagnostics network-check-target 5 5 5 5 5 beta.kubernetes.io/os=linux 69d openshift-ovn-kubernetes ovnkube-master 3 3 3 3 3 beta.kubernetes.io/os=linux,node-role.kubernetes.io/master= 69d openshift-ovn-kubernetes ovnkube-node 5 5 5 5 5 beta.kubernetes.io/os=linux 69d
-
Verify the Cloud-Native Router statefulsets by issuing the
kubectl get statefulsets -A
command.The command output provides the statefulsets.
kubectl get statefulsets -A
NAMESPACE NAME READY AGE jcnr jcnr-0-crpd 1/1 16d openshift-monitoring alertmanager-main 2/2 69d openshift-monitoring prometheus-k8s 2/2 69d
-
Verify if the cRPD is licensed and has the appropriate configurations
- View the access the cRPD CLI section to access the cRPD CLI.
-
Once you have access the cRPD CLI, issue the
show system license
command in the cli mode to view the system licenses. For example:root@jcnr-01:/# cli root@jcnr-01> show system license License usage: Licenses Licenses Licenses Expiry Feature name used installed needed containerized-rpd-standard 1 1 0 2024-09-20 16:59:00 PDT Licenses installed: License identifier: 85e5229f-0c64-0000-c10e4-a98c09ab34a1 License SKU: S-CRPD-10-A1-PF-5 License version: 1 Order Type: commercial Software Serial Number: 1000098711000-iHpgf Customer ID: Juniper Networks Inc. License count: 15000 Features: containerized-rpd-standard - Containerized routing protocol daemon with standard features date-based, 2022-08-21 17:00:00 PDT - 2027-09-20 16:59:00 PDT
-
Issue the
show configuration | display set
command in the cli mode to view the cRPD default and custom configuration. The output will be based on the custom configuration and the Cloud-Native Router deployment mode.root@jcnr-01# cli root@jcnr-01> show configuration | display set
-
Type the
exit
command to exit from the pod shell.
-
Verify the vRouter interfaces configuration
- View the access the vRouter CLI section to access the vRouter CLI.
-
Once you have accessed the vRouter CLI, issue the
vif --list
command to view the vRouter interfaces . The output will depend upon the Cloud-Native Router deployment mode and configuration. An example for L3 mode deployment, with two fabric interfaces configured, is provided below:$ vif --list Vrouter Interface Table Flags: P=Policy, X=Cross Connect, S=Service Chain, Mr=Receive Mirror Mt=Transmit Mirror, Tc=Transmit Checksum Offload, L3=Layer 3, L2=Layer 2 D=DHCP, Vp=Vhost Physical, Pr=Promiscuous, Vnt=Native Vlan Tagged Mnp=No MAC Proxy, Dpdk=DPDK PMD Interface, Rfl=Receive Filtering Offload, Mon=Interface is Monitored Uuf=Unknown Unicast Flood, Vof=VLAN insert/strip offload, Df=Drop New Flows, L=MAC Learning Enabled Proxy=MAC Requests Proxied Always, Er=Etree Root, Mn=Mirror without Vlan Tag, HbsL=HBS Left Intf HbsR=HBS Right Intf, Ig=Igmp Trap Enabled, Ml=MAC-IP Learning Enabled, Me=Multicast Enabled vif0/0 Socket: unix MTU: 1514 Type:Agent HWaddr:00:00:5e:00:01:00 Vrf:65535 Flags:L2 QOS:-1 Ref:3 RX port packets:864 errors:0 RX queue errors to lcore 0 0 0 0 0 0 0 0 0 0 0 0 RX packets:864 bytes:75536 errors:0 TX packets:13609 bytes:1419892 errors:0 Drops:0 vif0/1 PCI: 0000:17:00.0 (Speed 25000, Duplex 1) NH: 6 MTU: 9000 Type:Physical HWaddr:40:a6:b7:a0:f0:6c IPaddr:0.0.0.0 DDP: OFF SwLB: ON Vrf:0 Mcast Vrf:0 Flags:TcL3L2Vof QOS:0 Ref:9 RX port packets:243886 errors:0 RX queue errors to lcore 0 0 0 0 0 0 0 0 0 0 0 0 Fabric Interface: 0000:17:00.0 Status: UP Driver: net_ice RX packets:243886 bytes:20529529 errors:0 TX packets:243244 bytes:20010274 errors:0 Drops:2675 TX port packets:243244 errors:0 vif0/2 PCI: 0000:17:00.1 (Speed 25000, Duplex 1) NH: 7 MTU: 9000 Type:Physical HWaddr:40:a6:b7:a0:f0:6d IPaddr:0.0.0.0 DDP: OFF SwLB: ON Vrf:0 Mcast Vrf:0 Flags:TcL3L2Vof QOS:0 Ref:8 RX port packets:129173 errors:0 RX queue errors to lcore 0 0 0 0 0 0 0 0 0 0 0 0 Fabric Interface: 0000:17:00.1 Status: UP Driver: net_ice RX packets:129173 bytes:11623158 errors:0 TX packets:129204 bytes:11624377 errors:0 Drops:0 TX port packets:129204 errors:0 vif0/3 PMD: ens1f0 NH: 10 MTU: 9000 Type:Host HWaddr:40:a6:b7:a0:f0:6c IPaddr:0.0.0.0 DDP: OFF SwLB: ON Vrf:0 Mcast Vrf:65535 Flags:L3L2DProxyEr QOS:-1 Ref:11 TxXVif:1 RX device packets:242329 bytes:19965464 errors:0 RX queue packets:242329 errors:0 RX queue errors to lcore 0 0 0 0 0 0 0 0 0 0 0 0 RX packets:242329 bytes:19965464 errors:0 TX packets:241163 bytes:20324343 errors:0 Drops:0 TX queue packets:241163 errors:0 TX device packets:241163 bytes:20324343 errors:0 vif0/4 PMD: ens1f1 NH: 15 MTU: 9000 Type:Host HWaddr:40:a6:b7:a0:f0:6d IPaddr:0.0.0.0 DDP: OFF SwLB: ON Vrf:0 Mcast Vrf:65535 Flags:L3L2DProxyEr QOS:-1 Ref:11 TxXVif:2 RX device packets:129204 bytes:11624377 errors:0 RX queue packets:129204 errors:0 RX queue errors to lcore 0 0 0 0 0 0 0 0 0 0 0 0 RX packets:129204 bytes:11624377 errors:0 TX packets:129173 bytes:11623158 errors:0 Drops:0 TX queue packets:129173 errors:0 TX device packets:129173 bytes:11623158 errors:0
-
Type the
exit
command to exit the pod shell.