The Near-RT RIC, conceptualized by the O-RAN Alliance's Working Group 3 (WG3) [1] and implemented by the O-RAN Software Community [2], enables dynamic management and optimization of Radio Access Networks (RAN).
This automation tool is based on the M-Release of the Near-RT RIC. More information about these releases can be found at [3].
-
Installation Process: Use
./full_install.shto get the Near-RT RIC running on the host machine. The installation process consists of the following steps.- Installs Docker, Kubernetes, and Helm if not previously installed.
- Uses Helm to install the RIC components.
- Builds, installs, and configures the E2 Simulator (e2sim).
- Connects the e2term pod to e2sim within the Near-RT RIC.
- Installs and Configures the xApp manager (appmgr) to deploy a Hello World (hw-go) xApp.
-
Start the Near-RT RIC: While the Kubernetes pods start automatically on system boot, the entire process of ensuring that the components are running, connected, and that the xApp is deployed can be re-executed with
./run.sh. -
Status: Check on a pod's status with
kubectl get pods -A, or by running the interactive pod manager (K9s) withk9s -Aor./start_k9s.sh. -
Logs: From within K9s, use the
Arrow Keysto highlight a pod,Enterto view the logs for the pod,wto wrap text,Escto go back,Ctrl+kto restart a pod that isn't responding, andsto open a command line shell in the pod. -
Uninstall: Remove the Near-RT RIC with
./full_uninstall.sh.
View the list of Kubernetes pods running after the Near-RT RIC is installed.
$ kubectl get pods -A
NAMESPACE NAME READY STATUS
kube-flannel kube-flannel-ds-rfsxv 1/1 Running
kube-system coredns-668d6bf9bc-hzjjt 1/1 Running
kube-system coredns-668d6bf9bc-pql2s 1/1 Running
kube-system etcd-vmware-022 1/1 Running
kube-system kube-apiserver-vmware-022 1/1 Running
kube-system kube-controller-manager-vmware-022 1/1 Running
kube-system kube-proxy-7c6hq 1/1 Running
kube-system kube-scheduler-vmware-022 1/1 Running
ricinfra deployment-tiller-ricxapp-84b87b8c64-tjvkx 1/1 Running
ricplt deployment-ricplt-a1mediator-78f79cbb6b-rchrz 1/1 Running
ricplt deployment-ricplt-alarmmanager-5b49476676-sfdfn 1/1 Running
ricplt deployment-ricplt-appmgr-5564b65869-zq5qt 1/1 Running
ricplt deployment-ricplt-e2mgr-9b6b8f99f-g98jt 1/1 Running
ricplt deployment-ricplt-e2term-alpha-f8f7d7855-zwdkp 1/1 Running
ricplt deployment-ricplt-o1mediator-bf4fb5758-5dp78 1/1 Running
ricplt deployment-ricplt-rtmgr-657457c4bb-5kk4j 1/1 Running
ricplt deployment-ricplt-submgr-858956fbdc-zbbp8 1/1 Running
ricplt deployment-ricplt-vespamgr-848f7bb874-l4kzc 1/1 Running
ricplt r4-infrastructure-kong-79d7985749-tfsb2 2/2 Running
ricplt r4-infrastructure-prometheus-alertmanager-b9cc56766-gqmt2 2/2 Running
ricplt r4-infrastructure-prometheus-server-6476958975-mtkz9 1/1 Running
ricplt statefulset-ricplt-dbaas-server-0 1/1 Running
ricxapp ricxapp-hw-go-c84579888-rtjn9 1/1 RunningNote: Upon installing an xApp requiring InfluxDB, the pod "r4-influxdb-influxdb2-0" will also be installed.
By default, the Near-RT RIC's E2 Terminator (e2term) listens on port 36422. This can be changed by setting the E2_TERM_PORT variable in full_install.sh. If another RIC component is already using this port, set E2_TERM_PORT_SUBSTITUTE to update the conflicting component's port before changing E2_TERM_PORT to avoid port conflicts.
By default, the Hello World Go xApp (hw-go) is installed automatically. Additional xApps can be installed to extend the functionality of the Near-RT RIC. For convenience, installation scripts for the following xApps are included:
- KPI Monitoring xApp (kpimon):
- Install with
./additional_scripts/install_xapp_kpi_monitor.sh. - Patched to connect to the InfluxDB pod and write metrics to its database.
- Upon initialization, the xApp will only connect to pre-existing E2 nodes, therefore, you can restart the xApp by running the install script again which will establish connections to any new E2 nodes.
- Metrics will be stored in the InfluxDB pod under
bucket=kpimon, org=influxdata. Access this data by opening the InfluxDB Client with./additional_scripts/open_influxdb_client_shell.sh.
- Information about the xApp's debugging and usage can be found at [4].
- More information can be found in the documentation [5] and code [6].
- Install with
- 5G Cell Anomaly Detection xApp (ad-cell):
- Anomaly Detection xApp (ad):
- Quality of Experience Predictor xApp (qp):
- RIC Control xApp (rc):
- Traffic Steering xApp (trafficxapp):
- Hello World Python xApp (hw-python):
- Install with
./additional_scripts/install_xapp_hw-python.sh. - More information can be found in the code [17].
- Install with
- Hello World Rust xApp (hw-rust):
- Install with
./additional_scripts/install_xapp_hw-rust.sh. - More information can be found in the code [18].
- Install with
Note
The metrics collected using these xApps are simulated by default. Similarly, radio metrics provided by srsRAN_Project's gNodeB when connected as an E2 node to the RIC may also be simulated [19]. Therefore, for radio metrics collected via a KPI monitoring xApp, it is recommended to use OpenAirInterface's Near-RT RIC with Mosiac5G's monitoring xApps (see the OpenAirInterface Testbed).
To uninstall an xApp, run ./additional_scripts/uninstall_an_xapp.sh which will prompt the user to select an xApp to uninstall.
Alternatively, xApps can be uninstalled manually by fetching the list of xApps with dms_cli get_charts_list and uninstalling an xApp with dms_cli uninstall "NAME_OF_XAPP" ricxapp.
The cluster is installed with Flannel as the default network plugin. There are several benefits of migrating to a security-enhanced network plugin like Cilium [20], for example, to monitor and regulate the network flows going in to and out of each pod using Cilium Hubble [21]. By default, pods can communicate with addresses outside the namespace (including the internet). Restricting this allows for better security and monitoring of the network flows. The following steps can be used to migrate the cluster to Cilium and apply policies that restrict such communications.
- Install Cilium and Migrate Cluster Nodes: Run
./additional_scripts/install_cilium_and_migrate_nodes.shto install Cilium and migrate each of the pods from the current network plugin to Cilium, then apply policies that restrict the pods from communicating with addresses outside the namespace.- For debugging purposes, the following files are generated in
$HOME/.kube/:cilium-values-migration.yaml: Contains the Cilium configuration values during migration.cilium-values-initial.yaml: Contains the initial Cilium configuration values.cilium-values-final.yaml: Contains the final Cilium configuration values.
- For debugging purposes, the following files are generated in
- Check Cilium Status: Run
./additional_scripts/cilium_status.shto verify the status of Cilium. All indicators should display green. - List Cilium Policies: Run
./additional_scripts/cilium_list_policies.shto list currently-active Cilium policies.- By default, the two policies are applied:
isolate-ric-communicationandisolate-ricxapp-communication. Both are defined in the YAML file:$HOME/.kube/cilium-policy.yaml.
- By default, the two policies are applied:
- Disable Policies: Run
./additional_scripts/cilium_disable_policies.shto disable the currently-active policies. After running the script, pods will have restored internet access. - Enable Policies: Run
./additional_scripts/cilium_enable_policies.shto re-enable the policies defined in$HOME/.kube/cilium-policy.yaml. - Check Policy Enforcement: Run
./additional_scripts/cilium_check_enforcement.shto check which pod labels are enforced by the policies. - Visualize and Capture Network Flows: Hubble can be used to monitor the network flows of the pods.
- Run
./additional_scripts/hubble_capture.shto capture the network flows. The output will be saved tologs/hubble_captured_flows.csvwith the following columns:- Timestamp (readable)
- UNIX Epoch (seconds)
- Summary
- Is Reply
- Source IP
- Destination IP
- Source Port
- Destination Port
- Source Pod
- Destination Pod
- Source Namespace
- Destination Namespace
- Protocol
- Layer 4
- Run
./additional_scripts/hubble_visualize.shto visualize the network flows using the Hubble UI.
- Run
- Working Group 3: Near-Real-time RAN Intelligent Controller and E2 Interface Workgroup. O-RAN Alliance. https://public.o-ran.org/display/WG3/Introduction
- Near Realtime RAN Intelligent Controller. O-RAN Software Community. https://docs.o-ran-sc.org/en/latest/projects.html#near-realtime-ran-intelligent-controller-ric
- Release Notes. O-RAN Software Community. https://docs.o-ran-sc.org/en/latest/release-notes.html
- Install KPI Monitoring & xApp RIC. Abdul Fikih Kurnia. https://hackmd.io/@abdfikih/BkIeoH9D0
- KPI Monitoring xApp documentation. O-RAN Software Community. https://docs.o-ran-sc.org/projects/o-ran-sc-ric-app-kpimon/en/latest/overview.html
- KPI Monitoring xApp project page. O-RAN Software Community. https://github.com/o-ran-sc/ric-app-kpimon-go
- 5G Cell AD xApp documentation. O-RAN Software Community. https://docs.o-ran-sc.org/projects/o-ran-sc-ric-app-ad/en/latest/overview.html
- 5G Cell AD xApp project page. O-RAN Software Community. https://github.com/o-ran-sc/ric-app-ad-cell
- AD xApp documentation. O-RAN Software Community. https://docs.o-ran-sc.org/projects/o-ran-sc-ric-app-ad/en/latest/overview.html
- AD xApp project page. O-RAN Software Community. https://github.com/o-ran-sc/ric-app-ad
- QoE Predictor xApp documentation. O-RAN Software Community. https://docs.o-ran-sc.org/projects/o-ran-sc-ric-app-qp/en/latest/overview.html
- QoE Predictor xApp project page. O-RAN Software Community. https://github.com/o-ran-sc/ric-app-qp
- RIC Control xApp documentation. O-RAN Software Community. https://docs.o-ran-sc.org/projects/o-ran-sc-ric-app-rc/en/latest/overview.html
- RIC Control xApp project page. O-RAN Software Community. https://github.com/o-ran-sc/ric-app-rc
- Traffic Steering xApp documentation. O-RAN Software Community. https://docs.o-ran-sc.org/projects/o-ran-sc-ric-app-ts/en/latest/user-guide.html
- Traffic Steering xApp project page. O-RAN Software Community. https://github.com/o-ran-sc/ric-app-ts
- HW Python xApp project page. O-RAN Software Community. https://github.com/o-ran-sc/ric-app-hw-python
- HW Rust xApp project page. O-RAN Software Community. https://github.com/o-ran-sc/ric-app-hw-rust
- O-RAN NearRT-RIC and xApp. srsRAN Project Documentation. [https://docs.srsran.com/projects/project/en/latest/tutorials/source/near-rt-ric/source/index.html#limitations]
- eBPF-based Networking, Observability, Security. Cilium. https://cilium.io
- Hubble - Network, Service & Security Observability for Kubernetes using eBPF. Hubble. https://cilium.io/hubble
