Gradiant / 5g-charts

Helm charts for 5G Technologies
Apache License 2.0
120 stars 49 forks source link

Open5GS - UERANSIM AMF port and connectivity in multi-machine setup #193

Open pantmal opened 1 month ago

pantmal commented 1 month ago

Hello, everyone. I am testing out the Open5GS - UERANSIM setup, as described in the tutorial section. I have followed the steps and the deployment works as described. Now, I want to test out a setup where I have Open5GS deployed in one VM and the UERANSIM chart in a different VM. Here's where I have encountered a few issues.

First, the gNB has to connect to the AMF from the other VM. In order for this work I had to expose the AMF ngap port using NodePort. However in the ueransim chart, there is no option to specify which port to use (I have to use a specific one since NodePorts in K8s go up to 32767). So I had to untar the packaged ueransim chart locally and change the 'port' value in the resources/gnb.yaml file. Shouldn't this be also available from the values.yaml file? I believe there are cases where the AMF port isn't always 38412, like in my setup.

Now the second issue I encountered, which I haven't been able to resolve, is the fact that there seems to be no connectivity between the UEs. I tried pinging the interfaces, as described in the tutorial, but there is no response in either one of them. Am I missing something? Do I have to follow some steps differently when it comes to a multi-VM setup like the one I'm trying to accomplish?

I can post the pod logs if that's necessary. From what I checked however, there doesn't seem to be an error, or something different from the logs in the single-VM setup.

I'm relatively new to the 5G concepts, so any additional information and assistance would be greatly appreciated. Thank you.

avrodriguezgrad commented 1 month ago

Hi @pantmal

About the first issue, we work with LoadBalancer instead of NodePort so we are able to use the same port in each AMF because the external IP is different for each one. We can think internally if it would be interesteing to have the option to change the port in UERANSIM, but I think there aren't so much deployments using other port rather than 38412.

About the second issue, in the tutorial there is only ping to internet. To have connectivity between UEs, you have to separete the IPs of each UE by 4, thats it, one having 10.45.0.2 and other having 10.45.0.6 (for example). It has to be in that way because the implementation of the networking between UE and UPF.

I can try to help you, but a multi-VM environment is so difficult to debug from logs...

BR, Álvaro

pantmal commented 1 month ago

Hello @avrodriguezgrad , thank you for the quick response.

I think that having the option to change the port would be helpful for the NodePort setup. I will leave you to think this and discuss it.

Now for the second issue. I am sorry but I made a mistake and didn't word it properly. I wasn't trying to test the connectivity between the two UEs (although thank you for the suggestion regarding the IP seperation by 4, this is the next step I want to accomplish). My problem in the setup I have now is that even a single UE cannot ping to the internet. So, while there is a proper connection established between the gNB and the Open5GS (according to the AMF, GNB, UE pod logs etc), it's only when I try to ping anything, the interface doesn't seem to be working.

So, in my case, when I try ping gradiant.org -I uesimtun0 as it is described in the tutorial, the ping command just hangs. I also do a tcpdump in the UPF pod, and it's completely empty. After checking out some logs I noticed the following which seems a bit odd to me: Whenever I attempt a ping using the UE interface, I notice that the gNB does make a request to the correct AMF IP and port I have configured, but it seems that it also needs to make a request to the UPF. And there, I notice that it is trying to reach the internal IP of the UPF pod (similar to how the UE pod makes a request to the GNB pod also using its internal IP) . This obviously cannot work since the UPF pod runs in a different VM. I believe that this is the point where the ping command fails.

Shouldn't there be an option for the UERANSIM chart to have a UPF IP assigned, similar to how we configure one for the AMF? Am I missing something here?

Thank you in advance.

avrodriguezgrad commented 1 month ago

Hi @pantmal

I think your solution need to use the "advertise" field of the configuration of open5gs and ueransim. In Open5GS, you can change the advertise the NF is doing to the NRF (see this example) and the same in UERANSIM (see gNB Configuration - gtpAdvertiseIp).

I think it could be that because you told me I notice that it is trying to reach the internal IP of the UPF pod, and by default, the NF advertises internal IPs. That's other reason of using External IPs of a subnet reachable by many VMs: when we do deployments between different clusters, we create the communication of the AMF, gNB and UPF using external IPs, and it works fine.

I believe I've mixed bit of things :_) but if anything it is not clear, feel free to reach out again!

BR, Álvaro