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 K-Release of the Near-RT RIC. More information about these releases can be found at [3].
-
Installation Process: Use
./full_install.sh
to 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 -A
or./start_k9s.sh
. -
Logs: From within K9s, use the
Arrow Keys
to highlight a pod,Enter
to view the logs for the pod,w
to wrap text,Esc
to go back,Ctrl+k
to restart a pod that isn't responding, ands
to 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 Running
Note: Upon installing an xApp requiring InfluxDB, the pod "r4-influxdb-influxdb2-0" will also be installed.
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 [6].
- More information can be found in the documentation [4] and code [5].
- 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
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 [19], for example, to monitor and regulate the network flows going in to and out of each pod using Cilium Hubble [20]. 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 communication.
- Install Cilium and Migrate Cluster Nodes: Run
./additional_scripts/install_cilium_and_migrate_nodes.sh
to 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.sh
to verify the status of Cilium. All indicators should display green. - List Cilium Policies: Run
./additional_scripts/cilium_list_policies.sh
to list currently-active Cilium policies.- By default, the two policies are applied:
isolate-ric-communication
andisolate-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.sh
to disable the currently-active policies. After running the script, pods will have restored internet access. - Enable Policies: Run
./additional_scripts/cilium_enable_policies.sh
to re-enable the policies defined in$HOME/.kube/cilium-policy.yaml
. - Check Policy Enforcement: Run
./additional_scripts/cilium_check_enforcement.sh
to 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.sh
to capture the network flows. The output will be saved tologs/hubble_captured_flows.csv
with 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.sh
to 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
- 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
- Install KPI Monitoring & xApp RIC. Abdul Fikih Kurnia. https://hackmd.io/@abdfikih/BkIeoH9D0
- 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
- eBPF-based Networking, Observability, Security. Cilium. https://cilium.io
- Hubble - Network, Service & Security Observability for Kubernetes using eBPF. Hubble. https://cilium.io/hubble