Skip to content

filter_chain_match difference between {} and null is confusing/under documented #12572

@howardjohn

Description

@howardjohn

If I have config (example 1):

match:
  app_protocols: [h2]
match: {}

All h2 traffic matches filter 1, and everything else matches filter 2. If I then change this to (example 2)

match:
  app_protocols: [h2]
  transport_protocol: tls
match: {}

No traffic matches filter 2. I would expect filter 2 to still catch all unmatched traffic. It seems in order to do this, I need to specify: (example 3)

match:
  app_protocols: [h2]
  transport_protocol: tls
match: null

I think this contradicts the docs a bit. Transport protocol says "If non-empty, a transport protocol to consider when determining a filter chain match.". In the example 2, I have set transport_protocol to "", yet it still seems to be considering transport protocol.

Even more contradicting is that changing one FCM (seems to) impacts the matching logic of another FCM! My expectation would be that a match config is independent. If I have {} it would always match the same inputs (from my reading, match everything, but at least should be consistent), regardless of other FCMs - other FCMs may have higher priority, but not actually prevent this one from matching.

cc @lizan @rshriram

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions