blob: 29c88aea7c8839f0a56194303acacaec29ee461e [file] [log] [blame]
..
SPDX-FileCopyrightText: © 2021 Open Networking Foundation <support@opennetworking.org>
SPDX-License-Identifier: Apache-2.0
BESS UPF Deployment
===================
This section describes how to configure and deploy BESS UPF.
Network Configuration
---------------------
BESS UPF enabled edge setup requires three additional user plane subnets
apart from the default K8S subnets.
* **enb**: Used to provide eNB/gNB radios with connectivity to SD-Core and
UPF.
* **access**: Used to provide UPF with connectivity to eNBs.
* **core**: Used to provide UPF with edge services, local breakout, and
internet access. This naming comes from the P4 UPF, and is used for uniformity
To help your understanding, the following example ACE environment will be used
in the rest of the guide.
.. image:: images/bess-upf-example-network.svg
.. note::
Admin and out-of-band networks are not depicted in the diagram.
+-----------+-----------+------------------------------------+-------------------+---------------+
| Network | VLAN ID | Subnet | Interface | IP address |
+-----------+-----------+------------------------------------+-------------------+---------------+
| k8smgmt | 1 | 192.168.1.0/24 (gw: 192.168.1.1) | management router | 192.168.1.254 |
| | | +-------------------+---------------+
| | | | compute1 | 192.168.1.3 |
| | | +-------------------+---------------+
| | | | compute2 | 192.168.1.4 |
| | | +-------------------+---------------+
| | | | compute3 | 192.168.1.5 |
+-----------+-----------+------------------------------------+-------------------+---------------+
| enb | 2 | 192.168.2.0/24 (gw: 192.168.2.1) | enb1 | 192.168.2.10 |
+-----------+-----------+------------------------------------+-------------------+---------------+
| access | 3 | 192.168.3.0/24 (gw: 192.168.3.1) | upf1 access | 192.168.3.10 |
+-----------+-----------+------------------------------------+-------------------+---------------+
| core | 4 | 192.168.4.0/24 (gw: 192.168.4.1) | management router | 192.168.4.254 |
| | | +-------------------+---------------+
| | | | upf1 core | 192.168.4.10 |
+-----------+-----------+------------------------------------+-------------------+---------------+
It is assumed that the management router has the only external routable address
and acts as a router connecting the Aether pod to the outside.
This means that all uplink packets leaving the Aether pod need to be
masqueraded with the external address of the management router or the k8smgmt
address if the destination is Aether Central.
Also, in order for downlink traffic to UE to be delivered to its destination,
it must be forwarded to the UPF's core interface. This adds additional routes
to the management router and L3 switch.
.. note::
There is a work-in-progress on interface consolidation in BESS UPF, which
will merge ``radio``, ``access``, and ``fabric`` into only one interface and
simplify the configuration significantly.
Required Cluster Resources
--------------------------
Before proceeding with the deployment, make sure the cluster has sufficient
resources to run BESS UPF by running the command below.
.. code-block:: shell
$ kubectl get nodes -o json | jq '.items[].status.allocatable'
{
"cpu": "95",
"ephemeral-storage": "1770223432846",
"hugepages-1Gi": "32Gi",
"intel.com/intel_sriov_netdevice": "32",
"intel.com/intel_sriov_vfio": "32",
"memory": "360749956Ki",
"pods": "110"
}
For best performance, BESS UPF requires the following resources:
* 2 dedicated cores (``"cpu"``)
* 2 1GiB HugePages (``"hugepages-1Gi"``)
* 2 SRIOV Virtual Functions bound to **vfio-pci** driver (``"intel.com/intel_sriov_vfio"``)
For environments where these resources are not available, contact Ops team for
advanced configuration.
Configure and Deploy
--------------------
Download ``aether-app-configs`` if you don't have it already in your
development machine.
.. code-block:: shell
$ cd $WORKDIR
$ git clone "ssh://[username]@gerrit.opencord.org:29418/aether-app-configs"
Move the directory to ``apps/bess-upf/upf1`` and create a Helm values file for
the new cluster as shown below. Don't forget to replace the IP addresses in
the example configuration with the addresses of the actual cluster.
.. code-block:: yaml
$ cd $WORKDIR/aether-app-configs/apps/bess-upf/upf1
$ mkdir overlays/prd-ace-test
$ vi overlays/prd-ace-test/values.yaml
# SPDX-FileCopyrightText: 2021-present Open Networking Foundation <info@opennetworking.org>
config:
upf:
enb:
subnet: "192.168.2.0/24"
access:
ip: "192.168.3.10/24"
gateway: "192.168.3.1"
vlan: 3
core:
ip: "192.168.4.10/24"
gateway: "192.168.4.1"
vlan: 4
# Add below when connecting to 5G core
#cfgFiles:
# upf.json:
# gtppsc: true
# cpiface:
# dnn: "internet" # should match the one configured in ROC
Update ``fleet.yaml`` in the same directory to let Fleet use the custom
configuration when deploying BESS UPF to the new cluster.
.. code-block:: yaml
$ vi fleet.yaml
# add following block at the end
- name: prd-ace-test
clusterSelector:
matchLabels:
management.cattle.io/cluster-display-name: ace-test
helm:
valuesFiles:
- overlays/prd-ace-test/values.yaml
Submit your changes.
.. code-block:: shell
$ cd $WORKDIR/aether-app-configs
$ git status
$ git add .
$ git commit -m "Add BESS UPF configs for test ACE"
$ git review
Go to Fleet dashboard and wait until the cluster status becomes **Active**.
It can take up to 1 min for Fleet to fetch the configuration updates.