Skip to content

PMREQ-384: deprecate waf-http-filter ext_proc sidecar#3

Draft
electricjesus wants to merge 1 commit into
radixo-gatewayapi-deployment-enterprise-basefrom
seth/pmreq-384-deprecate-waf-http-filter-sidecar
Draft

PMREQ-384: deprecate waf-http-filter ext_proc sidecar#3
electricjesus wants to merge 1 commit into
radixo-gatewayapi-deployment-enterprise-basefrom
seth/pmreq-384-deprecate-waf-http-filter-sidecar

Conversation

@electricjesus
Copy link
Copy Markdown
Owner

Summary

Drops the legacy waf-http-filter ext_proc sidecar render path from pkg/render/gatewayapi/. The CRD-driven Coraza WASM data plane (PMREQ-384 v1) is the WAF enforcement path now. Per design#25 walkthrough 2026-05-12, PM (Phil) signed off AI-4/AI-5; AI-6 captures the design + brief + this PR.

Base: radixo:gatewayapi-deployment-enterprise (mirrored here as radixo-gatewayapi-deployment-enterprise-base). Held in this fork until tigera#4690, tigera#4779, tigera#4821 merge.

What changes

Removed (sidecar-only)

  • wafHTTPFilter init container injection on every envoy-proxy pod
  • /var/run/waf-http-filter socket volume + mount on the envoy container
  • /var/log/calico hostPath volume (only the sidecar consumed it)
  • wafHTTPFilterImage struct field + ResolveImages call for components.CombinedCalicoImage
  • tokenreviews create rule on waf-http-filter-cluster-scoped ClusterRole — license enforcement moved to the kube-controllers reconciler before EEP generation

Kept (Walter's tigera#4690 reuses for l7-log-collector / proxy-pod identity)

  • waf-http-filter ServiceAccount in each Gateway namespace
  • waf-http-filter-cluster-scoped ClusterRole (licensekeys get,watch only)
  • waf-http-filter-gateway-resources ClusterRole + per-namespace RoleBindings
  • waf-http-filter-gateway-namespaces ClusterRoleBinding
  • serviceAccountName: waf-http-filter patch on the envoy Deployment
  • l7-log-collector init container + /access_logs + felix-sync volumes
  • Access-log telemetry config (file sink JSON)

Net diff: pkg/render/gatewayapi/gateway_api.go -138 / +46; pkg/render/gatewayapi/gateway_api_test.go -83 / +12.

Verification on seth-ez-a3b5

Image: gcr.io/tigera-dev/seth/tigera-operator:pmreq-384-no-sidecar-2026-05-19-v1 (sha256:27aa83786abc…).

  • EnvoyProxy/tigera-gateway-class initContainers: [l7-log-collector] only
  • waf-test-gw proxy pod: 3/3 Running (was 4/4) — containers: envoy, shutdown-manager, init l7-log-collector
  • Cluster-wide waf-http-filter containers: zero
  • Benign GET /get → 200
  • SQLi GET /get?id=1' OR '1'='1 → 403 (WASM Coraza)

Follow-ups (out of scope of this PR)

  • Drop licensekeys verb + remove waf-http-filter-cluster-scoped ClusterRole and waf-http-filter-gateway-namespaces CRB once l7-log-collector binary in calico-private confirms it no longer needs runtime license access (separate calico-private PR).
  • Rename the per-namespace waf-http-filter SA + ClusterRole names — misleading after sidecar removal (audit-sweep follow-up).

Coordination

  • Holds on Gatewayapi Namespaced Mode tigera/operator#4690 (Walter Neto / @radixo) landing.
  • PMREQ-384 design: tigera/designs#25 (03-operator-integration.md §Sidecar Deprecation).
  • Brief: tigera/gateway-extensions-controller/docs/planning/briefs/2026-05-12-sidecar-deprecation-brief.md.

Test plan

  • go test ./pkg/render/gatewayapi/... green
  • go test ./pkg/controller/gatewayapi/... green
  • Smoke on seth-ez-a3b5 (above)
  • Rebase + re-verify after Gatewayapi Namespaced Mode tigera/operator#4690 lands
  • Confirm with l7-log-collector binary owner before dropping the licensekeys rule

The CRD-driven Coraza WASM data plane (PMREQ-384 v1) replaces the legacy
waf-http-filter ext_proc sidecar entirely. Per design#25 walkthrough
2026-05-12 (Phil sign-off on AI-4/AI-5), drop the sidecar render path
from the gateway-api operator render.

Removed:
- wafHTTPFilter init container injection on every envoy-proxy pod
- /var/run/waf-http-filter socket volume + mounts on the envoy container
- /var/log/calico hostPath volume (was only consumed by the sidecar)
- wafHTTPFilterImage field + ResolveImages plumbing for the calico
  CombinedCalicoImage component reference
- tokenreviews verb on the cluster-scoped ClusterRole (per-request
  license enforcement moved to the kube-controllers reconciler)

Kept (Walter's tigera#4690 reuses them for L7 log collector enrichment):
- waf-http-filter ServiceAccount (per Gateway namespace) — proxy pod
  identity for namespaced Gateway-API reads
- waf-http-filter-cluster-scoped ClusterRole (licensekeys verb only)
- waf-http-filter-gateway-resources ClusterRole + per-namespace
  RoleBindings
- gatewayNamespacesCRB

The L7 log collector init container, /access_logs + felix-sync volumes,
serviceAccountName patch on the envoy deployment, and the access-log
telemetry config are unaffected.

Logs-to-felix replacement for WAF-specific events is tracked separately
in tigera/gateway-extensions-controller/docs/planning/briefs/2026-05-12-sidecar-deprecation-brief.md
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant