Skip to content

EV-6388: L7 logging through Istio Waypoint Proxy#4769

Draft
alexh-tigera wants to merge 2 commits into
tigera:masterfrom
alexh-tigera:EV-6388-capture-l7-logs-through-waypoint-proxy
Draft

EV-6388: L7 logging through Istio Waypoint Proxy#4769
alexh-tigera wants to merge 2 commits into
tigera:masterfrom
alexh-tigera:EV-6388-capture-l7-logs-through-waypoint-proxy

Conversation

@alexh-tigera
Copy link
Copy Markdown
Member

Adds automatic L7 logging for every Gateway using the istio-waypoint GatewayClass. The istio controller now creates three static resources in the Istio root namespace (calico-system) and Istio's deployment controller applies them as class-level defaults to all waypoints cluster-wide:

  • tigera-waypoint-l7-defaults ConfigMap injects the l7-collector sidecar (with --mode=waypoint on the existing ComponentL7Collector image) and the shared emptyDir + Felix CSI volumes into every waypoint pod.
  • tigera-waypoint-l7-als EnvoyFilter enables gRPC ALS on main_internal.
  • tigera-waypoint-l7-srcport EnvoyFilter captures the Forwarded header on connect_terminate and propagates the client IP as filter state.

A small typed EnvoyFilter struct is introduced so the component handler (which casts to metav1.ObjectMetaAccessor) can manage the resources without taking on the networking.istio.io client-go dependency.

Description

Release Note

TBD

For PR author

  • Tests for change.
  • If changing pkg/apis/, run make gen-files
  • If changing versions, run make gen-versions

For PR reviewers

A note for code reviewers - all pull requests must have the following:

  • Milestone set according to targeted release.
  • Appropriate labels:
    • kind/bug if this is a bugfix.
    • kind/enhancement if this is a a new feature.
    • enterprise if this PR applies to Calico Enterprise only.

Adds automatic L7 logging for every Gateway using the istio-waypoint
GatewayClass. The istio controller now creates three static resources in
the Istio root namespace (calico-system) and Istio's deployment controller
applies them as class-level defaults to all waypoints cluster-wide:

- tigera-waypoint-l7-defaults ConfigMap injects the l7-collector sidecar
  (with --mode=waypoint on the existing ComponentL7Collector image) and
  the shared emptyDir + Felix CSI volumes into every waypoint pod.
- tigera-waypoint-l7-als EnvoyFilter enables gRPC ALS on main_internal.
- tigera-waypoint-l7-srcport EnvoyFilter captures the Forwarded header on
  connect_terminate and propagates the client IP as filter state.

A small typed EnvoyFilter struct is introduced so the component handler
(which casts to metav1.ObjectMetaAccessor) can manage the resources
without taking on the networking.istio.io client-go dependency.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@alexh-tigera alexh-tigera force-pushed the EV-6388-capture-l7-logs-through-waypoint-proxy branch from 96823e4 to 7514ec0 Compare May 1, 2026 20:16
The L7 ambient waypoint pod's l7-collector sidecar dials Felix's
nodeagent socket, which Felix only opens when policySyncPathPrefix is
set.

Have the istio controller program the field as part of its reconcile,
mirroring the applicationlayer controller's existing patching path. The
two controllers coordinate explicitly via shared predicates in
pkg/controller/utils/policy_sync.go: each side's deletion path consults
the other's CR before clearing the field, so neither strands the other.
The customer-override branch (any non-default value) is preserved
verbatim by both.

Bonus: setIstioFelixConfiguration and the two existing configurators now
return (changed, error) so utils.PatchFelixConfiguration's no-op short-
circuit fires when nothing changed, instead of churning the FC on every
reconcile.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants