'Kubernetes pod running only when starting it inside the container
I am trying to deploy the free5gc core in k8s using microk8s and I have this problem only with the UPF function. This is the error I get when I start the function with the command written inside the Dockerfile as ENTRYPOINT:
2022-04-12T13:13:40Z [INFO][UPF][Util] UPF log: /log/upf.log
2022-04-12T13:13:40Z [INFO][UPF][Util] Config: /upfcfg.yaml
2022-04-12T13:13:40Z [INFO][UPF][Util] UPF config version [1.0.0]
2022-04-12T13:13:40Z [INFO][UPF][Util] Set log level: info
2022-04-12T13:13:40Z [WARN][UPF][Util] Unknown key "DefaultServiceIP" of configuration
2022-04-12T13:13:40Z [ERRO][UPF][Util]
2022-04-12T13:13:40Z [INFO][UPF][Util] DNN routes added, main routing table:
2022-04-12T13:13:40Z [INFO][UPF][Util] DstIp Gateway Iface Priority RtProto Type
2022-04-12T13:13:40Z [INFO][UPF][Util] 169.254.1.1 /32 0.0.0.0 eth0 0 boot unicast
2022-04-12T13:13:40Z [INFO][UPF][Util] 60.60.0.0 /24 0.0.0.0 upfgtp 0 static unicast
2022-04-12T13:13:40Z [INFO][UPF][Util] 0.0.0.0 /0 169.254.1.1 eth0 0 boot unicast
2022-04-12T13:13:40Z [ERRO][UPF][Util] No PFCP Server
2022-04-12T13:13:40Z [ERRO][UPF][Util]
2022-04-12T13:13:40Z [ERRO][UPF][Util] UPF - PFCP error when UPF initializes
2022-04-12T13:13:40Z [ERRO][UPF][Util] UPF failed to initialize
2022-04-12T13:13:40Z [INFO][UPF][Util] Removing DNN routes
But if I delete the ENTRYPOINT inside the Dockerfile, start the pod, entering inside the container and then running the function manually, it works:
2022-04-12T13:13:40Z [INFO][UPF][Util] UPF log: /log/upf.log
2022-04-12T13:13:40Z [INFO][UPF][Util] Config: /upfcfg.yaml
2022-04-12T13:13:40Z [INFO][UPF][Util] UPF config version [1.0.0]
2022-04-12T13:13:40Z [INFO][UPF][Util] Set log level: info
2022-04-12T13:13:40Z [WARN][UPF][Util] Unknown key "DefaultServiceIP" of configuration
2022-04-12T13:13:40Z [INFO][UPF][Util] DNN routes added, main routing table:
2022-04-12T13:13:40Z [INFO][UPF][Util] DstIp Gateway Iface Priority RtProto Type
2022-04-12T13:13:40Z [INFO][UPF][Util] 169.254.1.1 /32 0.0.0.0 eth0 0 boot unicast
2022-04-12T13:13:40Z [INFO][UPF][Util] 60.60.0.0 /24 0.0.0.0 upfgtp 0 static unicast
2022-04-12T13:13:40Z [INFO][UPF][Util] 0.0.0.0 /0 169.254.1.1 eth0 0 boot unicast
2022-04-12T13:13:40Z [INFO][UPF][Util] Removing DNN routes
This is the Dockerfile of the UPF function:
FROM ubuntu:20.04
COPY . .
COPY libgtp5gnl.so.0 /usr/local/lib
COPY liblogger.so /usr/local/lib
RUN apt-get update && apt-get install -y net-tools vim iputils-ping libmnl-dev libyaml-dev
#ENTRYPOINT ["./free5gc-upfd", "-c", "upfcfg.yaml"]
CMD ["sh", "-c", "tail -f /dev/null"]
In order to be able to run the function, I have a configuration file(upfcfg.yaml) that must be specified. This is the command that must be run in order to start the UPF:
./free5gc-upfd -c upfcfg.yaml
This is the configuration file:
info:
version: 1.0.0
description: UPF configuration
configuration:
# the kind of log output
# debugLevel: how detailed to output, value: trace, debug, info, warn, error, fatal, panic
# ReportCaller: enable the caller report or not, value: true or false
debugLevel: info
ReportCaller: false
# packetBufferHoldTime should be longer than Paging retry-out time of AMF.
# unit: seconds
packetBufferHoldTime: 30
DefaultServiceIP: upf-service
# The IP list of the N4 interface on this UPF (Can't set to 0.0.0.0)
pfcp:
- addr: upf-service
# The IP list of the N3/N9 interfaces on this UPF
# If there are multiple connection, set addr to 0.0.0.0 or list all the addresses
gtpu:
- addr: 0.0.0.0
# [optional] gtpu.name
# - name: upf.5gc.nctu.me
# [optional] gtpu.ifname
# - ifname: gtpif
# The DNN list supported by UPF
dnn_list:
- dnn: internet # Data Network Name
cidr: 60.60.0.0/24 # Classless Inter-Domain Routing for assigned IPv4 pool of UE
# [optional] dnn_list[*].natifname
# natifname: eth0
where upf-service is the name of the Service created in k8s.
This is the yaml file for the UPF Service:
apiVersion: v1
kind: Service
metadata:
name: upf-service
labels:
app: free5gc-upf
spec:
type: ClusterIP
selector:
app: free5gc-upf
clusterIP: None
ports:
- name: sbi
targetPort: 29518
port: 29518
protocol: TCP
- name: upf-n3
protocol: UDP
targetPort: 2152
port: 2152
- name: upf-n4
targetPort: 8805
port: 8805
protocol: UDP
And the yaml file for the Deployment:
apiVersion: apps/v1
kind: Deployment
metadata:
name: upf-deployment
spec:
selector:
matchLabels:
app: free5gc-upf
replicas: 1
template:
metadata:
labels:
app: free5gc-upf
spec:
containers:
- name: myapp-container
image: andresache/upf
ports:
- containerPort: 29518
name: upf-sbi
protocol: TCP
- containerPort: 2152
name: upf-n3
protocol: UDP
- containerPort: 8805
name: upf-n4
protocol: UDP
imagePullPolicy: Always
securityContext:
privileged: true
capabilities:
add: ["NET_ADMIN", "NET_RAW", "NET_BIND_SERVICE", "SYS_TIME"]
# lifecycle:
#postStart:
#exec:
# command: ["/bin/sh", "-c", "sleep 5; ./free5gc-upfd -c upfcfg.yaml"]
dnsPolicy: ClusterFirst
About the source code of the upf function, I will leave the link with the repository that contains it, as it is pretty long and complex: https://github.com/free5gc/upf/tree/31b765226b2ad862df3e373234c60dfd6ff1e782/src
Do you have any idea why it works inside the container, but not otherwise? Thanks!
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|
