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

[BGP EIP L3 CUDN LGW mode] access external agnhost service failed from pod that is not using egressIP but is created in same namespace with egressIP pods

XMLWordPrintable

    • Quality / Stability / Reliability
    • False
    • Hide

      None

      Show
      None
    • None
    • None
    • None
    • None
    • None
    • None
    • None
    • None
    • None
    • None
    • None
    • None
    • None
    • None

      Description of problem: [BGP EIP L3 CUDN LGW mode]  access external agnhost service failed from pod that is not using egressIP but is created in same namespace with egressIP pods 

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

      How reproducible:

      Steps to Reproduce:

      1. Label egress node, 

      2. create labelled UDN namespace, label the namespace to match namespaceSelector of egressIP object that will be created in step 5

      #oc get ns e2e-test-udn-networking-38t25mij-cjw7b --show-labels | grep org=
      e2e-test-udn-networking-38t25mij-cjw7b   Active   87s   cudn-bgp=cudn-network-f63p6zz0,k8s.ovn.org/primary-user-defined-network=null,kubernetes.io/metadata.name=e2e-test-udn-networking-38t25mij-cjw7b,org=qe,pod-security.kubernetes.io/audit-version=latest,pod-security.kubernetes.io/audit=restricted,pod-security.kubernetes.io/enforce-version=latest,pod-security.kubernetes.io/enforce=restricted,pod-security.kubernetes.io/warn-version=latest,pod-security.kubernetes.io/warn=restricted

      3. create L3 CUDN, label the L3 CUDN properly to match the networkSelector of CUDN RA that will be created in step 4

      4. create a CUDN RA that has both EgressIP and PodNetwork in advertisements spec, use {} for nodeSelector

      #oc get ra ra-cudn -oyaml
      apiVersion: k8s.ovn.org/v1
      kind: RouteAdvertisements
      metadata:
        annotations:
          kubectl.kubernetes.io/last-applied-configuration: |
            {"apiVersion":"k8s.ovn.org/v1","kind":"RouteAdvertisements","metadata":{"annotations":{},"name":"ra-cudn"},"spec":{"advertisements":["PodNetwork","EgressIP"],"frrConfigurationSelector":{},"networkSelectors":[{"clusterUserDefinedNetworkSelector":{"networkSelector":{"matchLabels":

      {"app":"udn"}

      }},"networkSelectionType":"ClusterUserDefinedNetworks"}],"nodeSelector":{}}}
        creationTimestamp: "2025-05-28T17:36:20Z"
        generation: 1
        name: ra-cudn
        resourceVersion: "898903"
        uid: 1858ff97-d5c7-4f65-942e-324dfc3442c1
      spec:
        advertisements:
        - PodNetwork
        - EgressIP
        frrConfigurationSelector: {}
        networkSelectors:
        - clusterUserDefinedNetworkSelector:
            networkSelector:
              matchLabels:
                app: udn
          networkSelectionType: ClusterUserDefinedNetworks
        nodeSelector: {}
      status:
        conditions:
        - lastTransitionTime: "2025-05-28T17:36:42Z"
          message: ovn-kubernetes cluster-manager validated the resource and requested the
            necessary configuration changes
          observedGeneration: 1
          reason: Accepted
          status: "True"
          type: Accepted
        status: Accepted

      5. Create an egressIP object with namespaceSelector matching label of the UDN namespace

      #oc get egressip -oyaml
      apiVersion: v1
      items:

      • apiVersion: k8s.ovn.org/v1
          kind: EgressIP
          metadata:
            annotations:
              k8s.ovn.org/egressip-mark: "50001"
            creationTimestamp: "2025-05-28T18:06:04Z"
            generation: 2
            name: egressip-79715
            resourceVersion: "908165"
            uid: e660da13-3893-400d-8f0d-9fcc1e6893be
          spec:
            egressIPs:
            - 192.168.111.96
            namespaceSelector:
              matchLabels:
                org: qe
            podSelector:
              matchLabels:
                color: pink
          status:
            items:
            - egressIP: 192.168.111.96
              node: worker-0
        kind: List
        metadata:
          resourceVersion: ""

      6. Create two egressIP pods local and remote to egress node, their label should match the podSelector of egressIP object created in step 5

      7. Create a third test pod without podSelector label, so it is not using egressIP

      #oc -n e2e-test-udn-networking-38t25mij-cjw7b get pod --show-labels
      NAME                                                       READY   STATUS    RESTARTS   AGE   LABELS
      hello-pod-non-eip-e2e-test-udn-networking-38t25mij-cjw7b   1/1     Running   0          20s   name=hello-pod
      hello-pod0-eip-e2e-test-udn-networking-38t25mij-cjw7b     1/1     Running   0          85s   color=pink,name=hello-pod
      hello-pod1-eip-e2e-test-udn-networking-38t25mij-cjw7b      1/1     Running   0          73s   color=pink,name=hello-pod

      #oc get pod -owide
      NAME                                                       READY   STATUS    RESTARTS   AGE     IP            NODE       NOMINATED NODE   READINESS GATES
      hello-pod-non-eip-e2e-test-udn-networking-38t25mij-cjw7b   1/1     Running   0          65s     10.131.0.21   worker-0   <none>           <none>
      hello-pod0-eip-e2e-test-udn-networking-38t25mij-cjw7b      1/1     Running   0          2m10s   10.131.0.14   worker-0   <none>           <none>
      hello-pod1-eip-e2e-test-udn-networking-38t25mij-cjw7b      1/1     Running   0          118s    10.129.2.8    worker-2   <none>           <none>

      8.  from these pods, curl external agnhost service

      #oc rsh hello-pod0-eip-e2e-test-udn-networking-38t25mij-cjw7b
      ~ $ curl 172.20.0.100:8000 --connect-timeout 2 -I
      HTTP/1.1 200 OK
      Date: Wed, 28 May 2025 17:40:57 GMT
      Content-Length: 63
      Content-Type: text/plain; charset=utf-8

      ~ $ exit
      #oc rsh hello-pod1-eip-e2e-test-udn-networking-38t25mij-cjw7b
      ~ $ curl 172.20.0.100:8000 --connect-timeout 2 -I
      HTTP/1.1 200 OK
      Date: Wed, 28 May 2025 17:41:17 GMT
      Content-Length: 63
      Content-Type: text/plain; charset=utf-8

      #oc rsh hello-pod-non-eip-e2e-test-udn-networking-38t25mij-cjw7b
      ~ $  curl 172.20.0.100:8000 --connect-timeout 2 -I
      curl: (28) Connection timeout after 2002 ms
      ~ $ command terminated with exit code 137

       

      Actual results: curl external agnhost service from third pod that is not using egressIP failed, although curl external agnhost service from egressIP pods all succeeded

      Expected results: curl external agnhost service from all pods (egressIP pods or non-egressIP pod) should all succeed

      Additional info:  same test passed for SGW mode

      Please fill in the following template while reporting a bug and provide as much relevant information as possible. Doing so will give us the best chance to find a prompt resolution.

      Affected Platforms:

      Is it an

      1. internal CI failure
      2. customer issue / SD
      3. internal RedHat testing failure

      If it is an internal RedHat testing failure:

      • Please share a kubeconfig or creds to a live cluster for the assignee to debug/troubleshoot along with reproducer steps (specially if it's a telco use case like ICNI, secondary bridges or BM+kubevirt).

      If it is a CI failure:

      • Did it happen in different CI lanes? If so please provide links to multiple failures with the same error instance
      • Did it happen in both sdn and ovn jobs? If so please provide links to multiple failures with the same error instance
      • Did it happen in other platforms (e.g. aws, azure, gcp, baremetal etc) ? If so please provide links to multiple failures with the same error instance
      • When did the failure start happening? Please provide the UTC timestamp of the networking outage window from a sample failure run
      • If it's a connectivity issue,
      • What is the srcNode, srcIP and srcNamespace and srcPodName?
      • What is the dstNode, dstIP and dstNamespace and dstPodName?
      • What is the traffic path? (examples: pod2pod? pod2external?, pod2svc? pod2Node? etc)

      If it is a customer / SD issue:

      • Provide enough information in the bug description that Engineering doesn’t need to read the entire case history.
      • Don’t presume that Engineering has access to Salesforce.
      • Do presume that Engineering will access attachments through supportshell.
      • Describe what each relevant attachment is intended to demonstrate (failed pods, log errors, OVS issues, etc).
      • Referring to the attached must-gather, sosreport or other attachment, please provide the following details:
        • If the issue is in a customer namespace then provide a namespace inspect.
        • If it is a connectivity issue:
          • What is the srcNode, srcNamespace, srcPodName and srcPodIP?
          • What is the dstNode, dstNamespace, dstPodName and dstPodIP?
          • What is the traffic path? (examples: pod2pod? pod2external?, pod2svc? pod2Node? etc)
          • Please provide the UTC timestamp networking outage window from must-gather
          • Please provide tcpdump pcaps taken during the outage filtered based on the above provided src/dst IPs
        • If it is not a connectivity issue:
          • Describe the steps taken so far to analyze the logs from networking components (cluster-network-operator, OVNK, SDN, openvswitch, ovs-configure etc) and the actual component where the issue was seen based on the attached must-gather. Please attach snippets of relevant logs around the window when problem has happened if any.
      • When showing the results from commands, include the entire command in the output.  
      • For OCPBUGS in which the issue has been identified, label with “sbr-triaged”
      • For OCPBUGS in which the issue has not been identified and needs Engineering help for root cause, label with “sbr-untriaged”
      • Do not set the priority, that is owned by Engineering and will be set when the bug is evaluated
      • Note: bugs that do not meet these minimum standards will be closed with label “SDN-Jira-template”
      • For guidance on using this template please see
        OCPBUGS Template Training for Networking  components

              pliurh Peng Liu
              jechen@redhat.com Jean Chen
              None
              None
              Jean Chen Jean Chen
              None
              Votes:
              0 Vote for this issue
              Watchers:
              2 Start watching this issue

                Created:
                Updated:
                Resolved: