Skip to content

Listener-scoped ClientTrafficPolicy settings are silently dropped when multiple listeners share an address:port #9652

Description

@HusseinKabbout

Follow up issue from: #9315 (comment)

Description:

When multiple Gateway listeners share an address:port, they collapse into a
single xDS Listener with one filter chain per section. ClientTrafficPolicy
fields that map to Listener-scoped Envoy config have only one value available
for the whole socket:

  • ConnectionInspectionTimeout -> listener_filters_timeout
  • Connection.BufferLimit -> per_connection_buffer_limit_bytes
  • TCPKeepalive -> tcp_keepalive
  • EnableProxyProtocol -> proxy protocol listener filter

Since CTP is tracked one-per-section, both policies are Accepted, the
first-processed value wins for the entire socket, and the other is dropped with
no status condition, warning, or log line.

The existing port-overlap check skips TLS listeners, assuming each gets its own
filter chain, which is true for filter-chain-scoped settings, but not listener-scoped ones.
See the existing TODO in internal/xds/translator/translator.go.

Expected: a cross-listener consistency check that rejects conflicting
listener-scoped values across sections sharing an address:port, surfacing the
conflict via status rather than resolving it silently.

Repro steps:

  1. Gateway with two HTTPS listeners on :443 (different hostnames, own certs).
  2. One ClientTrafficPolicy per section with differing
    Connection.BufferLimit values (e.g. 29Mi and 300Mi).
  3. Both policies report Accepted=True.
  4. envoy config_dump shows a single per_connection_buffer_limit_bytes on :443 --> one
    value was dropped.

Metadata

Metadata

Assignees

No one assigned

    Labels

    kind/bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions