Uploaded image for project: 'OpenShift Bugs'
  1. OpenShift Bugs
  2. OCPBUGS-50583

[release-4.15] UDP packet larger than MTU size can not be sent to its' own pod via the service.

XMLWordPrintable

    • Important
    • None
    • False
    • Hide

      None

      Show
      None
    • Hide
      * Previously, a User Datagram Protocol (UDP) packet that was larger than the maximum transmission unit (MTU) value set for the cluster, could not be sent to the endpoint of the packet by using a service. With this release, the pod IP address is used instead of the service IP address regardless of the packet size, so that the UDP packet can be sent to the endpoint.
      Show
      * Previously, a User Datagram Protocol (UDP) packet that was larger than the maximum transmission unit (MTU) value set for the cluster, could not be sent to the endpoint of the packet by using a service. With this release, the pod IP address is used instead of the service IP address regardless of the packet size, so that the UDP packet can be sent to the endpoint.
    • Bug Fix
    • In Progress

      This is a clone of issue OCPBUGS-50581. The following is the description of the original issue:

      This is a clone of issue OCPBUGS-50579. The following is the description of the original issue:

      This is a clone of issue OCPBUGS-50512. The following is the description of the original issue:

      Description of problem:

      UDP packet larger than MTU size can not be sent to its' own end point via the service. MTU here means "MTU size - OVNK header (100) - IP header (20)"

       

      A pod ----(UDP)---> service IP ----------> A pod

       

      Version-Release number of selected component (if applicable):

      OCP 4.12.z 4.14.z 4.16.z 

      How reproducible:

      Always

      Steps to Reproduce:

      1. create a pod and a service with an open UDP port (19765). e.g.

       

      $ cat service.yaml 
      apiVersion: v1
      kind: Service
      metadata:
        name: udp-service
      spec:
        selector:
          app: udp
        ports:
        - name: udp-port
          protocol: UDP
          port: 19765
          targetPort: 19765
        type: ClusterIP
      
      $ cat udp-pod.yaml 
      apiVersion: v1
      kind: Pod
      metadata:
        labels:
          app: udp
        name: udppod
      spec:
        containers:
        - name: udp
          resources:
          securityContext:
            privileged: true
            capabilities:
              add: ["NET_RAW"]
          image: docker.io/dokken/centos-8 
          args:
            - bash
            - -c
            - sleep INF 

       

      2. In the pod, create a binary file that is bigger than the MTU size. If the MTU is 1500:

      # yes 1 | head -n 10000 | tr '\n' ' ' | dd of=datafile bs=1373 count=1 

       

      2. Send the file in UDP protocol via the service IP of the same pod

       

       # nc -lu 19765 &
       # nc -u <service IP> 19765 < datafile
      

       

      Actual results:

      It fails to send the data

      Expected results:

      It can send the data

       

      Additional info:

      1. The same works when sending UDP packet smaller than MTU size.

       e.g.

      # yes 1 | head -n 10000 | tr '\n' ' ' | dd of=datafile4 bs=1372 count=1

      2. Using the pod IP instead of the service IP works regardless of the packet size

      3. Communication between different pods works fine regardless of the packet size

       B pod/node_A –--- (UDP) ---->  service IP ----------> A pod/node_A

      It is originally reported by a telco partner 

       

      Affected Platforms: 

      •  

              jcaamano@redhat.com Jaime Caamaño Ruiz
              openshift-crt-jira-prow OpenShift Prow Bot
              Anurag Saxena Anurag Saxena
              Votes:
              0 Vote for this issue
              Watchers:
              2 Start watching this issue

                Created:
                Updated: