Kubernetes pod running only when starting it inside the container

295 views Asked by At

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!

0

There are 0 answers