**Simulate 5G network with Open5gs and UERANSIM on K8s Environment and Istio Service Mesh** - **Prerequisites** | Server | CPU | RAM | DISK | IP | OS | |:-------:|:-----:|:----:|:-----:|:--------------:|:------------:| | Master | 2 CPU | 4 GB | 20 GB | 192.168.22.160 | Ubuntu 22.04 | | Worker1 | 4 CPU | 6 GB | 40 GB | 192.168.22.161 | Ubuntu 22.04 | | Worker2 | 4 CPU | 6 GB | 40 GB | 192.168.22.162 | Ubuntu 22.04 | Resources can be used through the **bootstrap-cluster folder**, there are 2 ways, namely **script files** and **ansible playbooks**, we recommend using **ansible playbooks** for ease of configuration **1. Setup Environment** - For setup, running all of this step on **master node** and step 1-9, 15 installing openvswitch on **worker node**. 1. Clone the repository ```bash git clone https://github.com/sandyxd18/k8s-5g-manifest.git cd k8s-5g-manifest/ ``` 2. Install ansible ```bash sudo apt update sudo apt install software-properties-common sudo add-apt-repository --yes --update ppa:ansible/ansible sudo apt install ansible ``` 3. Setup Ansible control node ```bash ansible-galaxy collection install -r requirements.yaml sudo apt install python3-pip pip3 install kubernetes ``` 4. Write IP and ansible user on inventory ```bash nano bootstrap-cluster/ansible/inventory/kube_node ``` ```ini [master] 10.x.x.x ansible_user=** [worker] 10.x.x.x ansible_user=** 10.x.x.x ansible_user=** ``` 5. Run Ansible-Playbook for install dependencies ```bash ansible-playbook bootstrap-cluster/ansible/playbook/kube_dependencies.yaml -i bootstrap-cluster/ansible/inventory/kube_node ``` If you want to run only some task, you can use tags such as, basic, swap, kernel-modules, sysctl, containerd, and kubernetes. Example: ```bash ansible-playbook bootstrap-cluster/ansible/playbook/kube_dependencies.yaml -i bootstrap-cluster/ansible/inventory/kube_node --tags "containerd" ``` ```bash ansible-playbook bootstrap-cluster/ansible/playbook/kube_dependencies.yaml -i bootstrap-cluster/ansible/inventory/kube_node --tags "basic,containerd" ``` This file run on all nodes, if you want to run only on your prefer node, you can run like this: ``` ansible-playbook bootstrap-cluster/ansible/playbook/kube_dependencies.yaml -i bootstrap-cluster/ansible/inventory/kube_node --limit master ``` 6. Run Ansible-Playbook for create a cluster ```bash ansible-playbook bootstrap-cluster/ansible/playbook/kube_cluster.yaml -i bootstrap-cluster/ansible/inventory/kube_node ``` 7. Run Ansible-Playbook for joining worker to the cluster ```bash ansible-playbook bootstrap-cluster/ansible/playbook/kube_join.yaml -i bootstrap-cluster/ansible/inventory/kube_node ``` 8. Run Ansible-Playbook for install OVS on each node ```bash ansible-playbook bootstrap-cluster/ansible/playbook/kube_ovs_install.yaml -i bootstrap-cluster/ansible/inventory/kube_node ``` 9. Run Ansible-Playbook for install some needed dependencies on master node ```bash ansible-playbook bootstrap-cluster/ansible/playbook/kube_master.yaml -i bootstrap-cluster/ansible/inventory/kube_node ``` **2. Deploy 5G Component** - For deploying 5G component, run some command only on master node as a controller on kubernetes cluster. 1. Run inside repo directory ```bash cd k8s-5g-manifest/ ``` 2. Create Open5gs namespace ```bash kubectl create namespace open5gs ``` 3. Deploy mongodb for Open5gs on Open5gs namespace ```bash kubectl apply -k mongodb -n open5gs ``` 4. Add NAD Multus for secondary NIC on POD ```bash kubectl apply -k networking -n open5gs ``` 5. Deploy Open5gs ```bash kubectl apply -k 5gc -n open5gs ``` 6. Deploy WebUI for Adding some subscriber data ```bash kubectl apply -k webui -n open5gs ``` 7. Add admin user for WebUI on MongoDB Container ```bash kubectl exec -it mongodb-0 -n open5gs -- mongo ``` ``` use open5gs db.accounts.insertOne({ "salt": "f5c15fa72622d62b6b790aa8569b9339729801ab8bda5d13997b5db6bfc1d997", "hash": "402223057db5194899d2e082aeb0802f6794622e1cbc47529c419e5a603f2cc592074b4f3323b239ffa594c8b756d5c70a4e1f6ecd3f9f0d2d7328c4cf8b1b766514effff0350a90b89e21eac54cd4497a169c0c7554a0e2cd9b672e5414c323f76b8559bc768cba11cad2ea3ae704fb36abc8abc2619231ff84ded60063c6e1554a9777a4a464ef9cfdfa90ecfdacc9844e0e3b2f91b59d9ff024aec4ea1f51b703a31cda9afb1cc2c719a09cee4f9852ba3cf9f07159b1ccf8133924f74df770b1a391c19e8d67ffdcbbef4084a3277e93f55ac60d80338172b2a7b3f29cfe8a36738681794f7ccbe9bc98f8cdeded02f8a4cd0d4b54e1d6ba3d11792ee0ae8801213691848e9c5338e39485816bb0f734b775ac89f454ef90992003511aa8cceed58a3ac2c3814f14afaaed39cbaf4e2719d7213f81665564eec02f60ede838212555873ef742f6666cc66883dcb8281715d5c762fb236d72b770257e7e8d86c122bb69028a34cf1ed93bb973b440fa89a23604cd3fefe85fbd7f55c9b71acf6ad167228c79513f5cfe899a2e2cc498feb6d2d2f07354a17ba74cecfbda3e87d57b147e17dcc7f4c52b802a8e77f28d255a6712dcdc1519e6ac9ec593270bfcf4c395e2531a271a841b1adefb8516a07136b0de47c7fd534601b16f0f7a98f1dbd31795feb97da59e1d23c08461cf37d6f2877d0f2e437f07e25015960f63", "username": "admin", "roles": ["admin"], "__v": 0, }) db.accounts.find() ``` 8. Add 20 subscriber data ```plaintext IMSI: 001010000000001 Key: 465B5CE8B199B49FAA5F0A2EE238A6BC OPC: E8ED289DEBA952E4283B54E88E6183CA SST: 1 SD: 000001 DNN/APN: internet Type: ipv4 IMSI: 001010000000002 Key: B199B49F465B5CE8E238A6BCAA5F0A2E OPC: 283B54E8E8ED289D8E6183CAEBA952E4 SST: 2 SD: 000002 DNN/APN: streaming Type: ipv4 IMSI: 001010000000003 Key: AABBCCDDEEFF00112233445566778899 OPC: FFEEDDCCBBAA99887766554433221100 SST: 1 SD: 000001 DNN/APN: internet Type: ipv4 IMSI: 001010000000004 Key: 89ABCDEF0123456789ABCDEF01234567 OPC: 0123456789ABCDEF0123456789ABCDEF SST: 2 SD: 000002 DNN/APN: streaming Type: ipv4 IMSI: 001010000000005 Key: 1234567890ABCDEF1234567890ABCDEF OPC: ABCDEF1234567890ABCDEF1234567890 SST: 1 SD: 000001 DNN/APN: internet Type: ipv4 IMSI: 001010000000006 Key: DEADBEEFDEADBEEFDEADBEEFDEADBEEF OPC: BEEFDEADBEEFDEADBEEFDEADBEEFDEAD SST: 2 SD: 000002 DNN/APN: streaming Type: ipv4 IMSI: 001010000000007 Key: CAFEBABECAFEBABECAFEBABECAFEBABE OPC: 0BADF00D0BADF00D0BADF00D0BADF00D SST: 1 SD: 000001 DNN/APN: internet Type: ipv4 IMSI: 001010000000008 Key: 0F1E2D3C4B5A69788796A5B4C3D2E1F0 OPC: 1A2B3C4D5E6F70819283746556473829 SST: 2 SD: 000002 DNN/APN: streaming Type: ipv4 IMSI: 001010000000009 Key: 99AABBCCDDEEFF001122334455667788 OPC: 887766554433221100FFEEDDCCBBAA99 SST: 1 SD: 000001 DNN/APN: internet Type: ipv4 IMSI: 001010000000010 Key: 0123456789ABCDEFFEDCBA9876543210 OPC: 0123456789ABCDEFFEDCBA9876543210 SST: 2 SD: 000002 DNN/APN: streaming Type: ipv4 IMSI: 001010000000011 Key: 102030405060708090A0B0C0D0E0F000 OPC: 0F0E0D0C0B0A09080706050403020100 SST: 1 SD: 000001 DNN/APN: internet Type: ipv4 IMSI: 001010000000012 Key: ABCDABCDABCDABCDABCDABCDABCDABCD OPC: DCBADCBAABCD1234ABCD1234DCBADCBA SST: 2 SD: 000002 DNN/APN: streaming Type: ipv4 IMSI: 001010000000013 Key: FEDCBA98765432100123456789ABCDEF OPC: 0123456789ABCDEF0123456789ABCDEF SST: 1 SD: 000001 DNN/APN: internet Type: ipv4 IMSI: 001010000000014 Key: 123456789ABCDEF0123456789ABCDEF0 OPC: F0E1D2C3B4A5968778695A4B3C2D1E0F SST: 2 SD: 000002 DNN/APN: streaming Type: ipv4 IMSI: 001010000000015 Key: A1B2C3D4E5F607182736455667788990 OPC: 0F0E0D0C0B0A09080706050403020100 SST: 1 SD: 000001 DNN/APN: internet Type: ipv4 IMSI: 001010000000016 Key: 00110011001100110011001100110011 OPC: 11001100110011001100110011001100 SST: 2 SD: 000002 DNN/APN: streaming Type: ipv4 IMSI: 001010000000017 Key: FFFFFFFF00000000FFFFFFFF00000000 OPC: 0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F SST: 1 SD: 000001 DNN/APN: internet Type: ipv4 IMSI: 001010000000018 Key: AABBCCDDEEFFAABBCCDDEEFFAABBCCDD OPC: DDEEFFAABBCCDDEEFFAABBCCDDEEFFAA SST: 2 SD: 000002 DNN/APN: streaming Type: ipv4 IMSI: 001010000000019 Key: DEADDEADDEADDEADDEADDEADDEADDEAD OPC: BEEFBEEFBEEFBEEFBEEFBEEFBEEFBEEF SST: 1 SD: 000001 DNN/APN: internet Type: ipv4 IMSI: 001010000000020 Key: C001D00DC001D00DC001D00DC001D00D OPC: B105B105B105B105B105B105B105B105 SST: 2 SD: 000002 DNN/APN: streaming Type: ipv4 ``` 9. Deploy gNB ```bash kubectl apply -k ueransim-gnb -n open5gs ``` 10. Deploy 2 UE ```bash kubectl apply -k ueransim-ue -n open5gs ```