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:
- Gateway with two HTTPS listeners on
:443 (different hostnames, own certs).
- One ClientTrafficPolicy per section with differing
Connection.BufferLimit values (e.g. 29Mi and 300Mi).
- Both policies report
Accepted=True.
envoy config_dump shows a single per_connection_buffer_limit_bytes on :443 --> one
value was dropped.
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_timeoutConnection.BufferLimit->per_connection_buffer_limit_bytesTCPKeepalive->tcp_keepaliveEnableProxyProtocol-> proxy protocol listener filterSince 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:
:443(different hostnames, own certs).Connection.BufferLimitvalues (e.g.29Miand300Mi).Accepted=True.envoy config_dumpshows a singleper_connection_buffer_limit_byteson:443--> onevalue was dropped.