Skip to content

Service graph destination names show "outgoing" when K8s metadata lookup fails #994

@skl

Description

@skl

When a client calls a Kubernetes Service, kube-proxy performs NAT, translating the Service ClusterIP to a Pod IP. OBI observes the post-NAT Pod IP, not the original Service IP.

If the destination Pod IP is not in the K8s informer cache (due to cross-namespace visibility, timing, or other reasons), name resolution falls back to showing the raw IP address, which is then replaced with "outgoing" in service graphs.

This results in incomplete service graph connections where the destination service appears as "outgoing" instead of the actual service name.

flowchart LR
    subgraph "Client Pod"
        A[app calls<br/>bar-svc.bar-ns:80]
    end
    
    subgraph "kube-proxy NAT"
        B[ClusterIP 10.96.0.50<br/>→ Pod IP 10.0.2.5]
    end
    
    subgraph "Server Pod"
        C[bar-svc-xyz<br/>10.0.2.5:80]
    end
    
    A -->|"DNS: bar-svc.bar-ns<br/>→ 10.96.0.50"| B
    B -->|"eBPF sees:<br/>dst = 10.0.2.5"| C
    
    subgraph "Name Resolution"
        D{Pod IP 10.0.2.5<br/>in K8s cache?}
        E[HostName = bar-svc]
        F[HostName = outgoing]
    end
    
    C -.-> D
    D -->|Yes| E
    D -->|No| F
Loading

Sub-issues

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    Projects

    Status

    Todo

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions