Skip to content

Reference

Scope

Look-up facts for Envoy Gateway: version and support matrix, release history, CRDs and attachment targets, controller configuration flags, ports, egctl commands, generated xDS mapping, security controls, and advisories. For tasks see How-to Guides. For how it works see Explanation.

Compatibility Matrix

Each EG minor ships with and is tested against exactly one Envoy Proxy minor version. Source: Compatibility Matrix (checked 2026-09-25).

Envoy Gateway Envoy Proxy Gateway API Kubernetes (tested) End of Life
v1.9 distroless-v1.39.x v1.6.1 v1.33, v1.34, v1.35, v1.36 2027-02-14
v1.8 distroless-v1.38.x v1.5.1 v1.32, v1.33, v1.34, v1.35 2026-11-08
v1.7 distroless-v1.37.x v1.4.1 v1.32, v1.33, v1.34, v1.35 2026-08-05 (EOL)
v1.6 distroless-v1.36.x v1.4.0 v1.30, v1.31, v1.32, v1.33 2026-05-13 (EOL)
v1.5 distroless-v1.35.x v1.3.0 v1.30, v1.31, v1.32, v1.33 2026-02-13 (EOL)
v1.4 distroless-v1.34.x v1.3.0 v1.30, v1.31, v1.32, v1.33 2025-11-13 (EOL)
v1.0 distroless-v1.29.x v1.0.0 v1.26, v1.27, v1.28, v1.29 2024-09-13 (EOL)
main (dev) dev-latest v1.6.1 v1.34, v1.35, v1.36, v1.37 n/a

Pinning a different Envoy image

Setting image on the EnvoyProxy resource pins the data plane independently of the control plane. A different Envoy minor is untested, and a rejected config stays silent until a proxy restarts. Prefer imageRepository (EG supplies the tag) and watch the xdsNACKTotal metric (added in v1.9).

Release History

Release Date Notes
v1.9.1 2026-08-28 Reverts the v1.9.0 0s SDS/RDS initial fetch timeout; CVE-2026-47775 fix; users on v1.8.x skip v1.9.0
v1.8.4 2026-08-28 Same security fixes backported; Envoy 1.38.4, Go 1.26.7
v1.9.0 2026-08-14 Gateway API v1.6.1, CSRF, CEL authorization, ListenerSet policy targets, remote infra provider
v1.7.5 2026-07-08 Last v1.7 patch found in the release notes (v1.7 EOL 2026-08-05)
v1.8.3 2026-07-22 Lua moved to listener-level filters
v1.8.2 2026-06-30 Patch
v1.8.1 2026-06-04 Gateway API safe-upgrade ValidatingAdmissionPolicy moved into Helm templates
v1.8.0 2026-05-12 Dynamic Modules, chained extension managers, EnvoyProxy mergeType, GeoIP authorization
v1.7.3 2026-05-09 Go 1.25.10, gRPC-Go CVE-2026-33186 fix
v1.7.0 2026-02-05 Experimental XListenerSet, Lua hardening, custom_response filter first
v1.6.0 2025-11-10 Gateway API v1.4.0
v1.5.0 2025-08-08 Gateway API v1.3.0
v1.0.0 2024-03-13 First GA release

Source: release notes index. The GitHub release/v1.9 branch VERSION file reads v1.9.1 and release/v1.8 reads v1.8.4 (checked 2026-09-25).

CRDs

Gateway API resources used by EG

Kind API version (Gateway API v1.6) Channel
GatewayClass, Gateway, HTTPRoute, GRPCRoute gateway.networking.k8s.io/v1 Standard
ReferenceGrant gateway.networking.k8s.io/v1 (promoted in Gateway API v1.5; v1beta1 still served) Standard
BackendTLSPolicy gateway.networking.k8s.io/v1 (GA since Gateway API v1.4) Standard
TLSRoute, ListenerSet gateway.networking.k8s.io/v1 (GA since Gateway API v1.5) Standard
TCPRoute, UDPRoute gateway.networking.k8s.io/v1 (GA in v1.6; v1alpha2 deprecated) Standard

Envoy Gateway extension resources

All EG resources use gateway.envoyproxy.io/v1alpha1.

Kind Purpose Attach targets Enabled by default
EnvoyGateway Controller config (loaded from the envoy-gateway-config ConfigMap, not a CRD) n/a n/a
EnvoyProxy Envoy deployment, service, bootstrap, telemetry, mergeGateways, mergeBackends GatewayClass parametersRef, Gateway infrastructure.parametersRef Yes
ClientTrafficPolicy Downstream TLS, client IP detection, timeouts, HTTP/1-2-3, headers Gateway, listener (sectionName), ListenerSet (v1.9) Yes
BackendTrafficPolicy LB, retries, circuit breaker, health checks, rate limits, compression, response override Gateway, xRoute, ListenerSet (v1.9) Yes
SecurityPolicy JWT, OIDC, API key, Basic auth, ExtAuth, authorization, CORS, CSRF (v1.9) Gateway, HTTPRoute, GRPCRoute, TCPRoute, ListenerSet (v1.9) Yes
EnvoyExtensionPolicy Wasm, ExtProc, Lua, Dynamic Modules Gateway, xRoute, ListenerSet (v1.9) Yes (Lua needs enableLua since v1.9)
EnvoyPatchPolicy JSON patch of generated xDS GatewayClass, Gateway No (enableEnvoyPatchPolicy)
Backend FQDN, IP, Unix socket, or DynamicResolver endpoints with TLS settings Referenced as a backendRef No (enableBackend)
HTTPRouteFilter EG route filters (regex host/path rewrite, direct response, credential injection) extensionRef from HTTPRoute or GRPCRoute (v1.9) rules Yes

Sources: Concepts, Gateway API Extensions, envoygateway_types.go.

EnvoyGateway extensionApis Flags

Field Default Effect
enableEnvoyPatchPolicy false Reconcile EnvoyPatchPolicy. Upstream warns this can lead to complete compromise, because patch authors can inject arbitrary proxy config.
enableBackend false Reconcile the Backend CRD
enableLua false Allow Lua EnvoyExtensionPolicies (since v1.9)
disableLua unset Deprecated in v1.9 in favor of enableLua
enableSDSSecretRef false Allow gateway.envoyproxy.io/sds Secrets that point at an external SDS server

Helm sets these through config.envoyGateway.extensionApis.*, for example --set config.envoyGateway.extensionApis.enableBackend=true.

Rate Limit Fields (BackendTrafficPolicy)

Field Notes
rateLimit.local.rules[] Per-proxy token bucket, no external service
rateLimit.global.rules[] Shared counters through envoy-ratelimit plus Redis
rateLimit.type Deprecated. Set global and/or local directly; both may be combined.
rules[].clientSelectors[] Match on headers, methods, path, sourceCIDR, queryParams, each with invert
rules[].limit.requests / unit Units: Second, Minute, Hour, Day, Week (v1.9), Month, Year
rules[].limit.fromMetadata v1.9: take the limit from dynamic metadata, with a static fallback
rules[].cost, shared, shadowMode Request/response cost, shared buckets across routes, log-only mode
EnvoyGateway rateLimit.backend.redis.url Redis endpoint for global limits; urlRef (v1.9) reads it from a Secret

Ports

Port Component Purpose
18000 envoy-gateway xDS gRPC server (mTLS) that Envoy connects to
19000 Envoy (127.0.0.1) Admin interface, localhost only
19001 Envoy Prometheus stats at /stats/prometheus
19003 Envoy Readiness probe at /ready

Sources: bootstrap.go constants (EnvoyAdminPort, DefaultXdsServerPort, EnvoyStatsPort, EnvoyReadinessPort). Gateway listeners on privileged ports (below 1024) are mapped internally to an unprivileged container port, so the Service keeps the requested port while Envoy runs without root.

Defaults Worth Knowing

Setting Default
Envoy Deployment replicas 1 (DefaultDeploymentReplicas)
xDS transport Delta ADS over gRPC (api_type: DELTA_GRPC in the bootstrap)
Graceful drain on shutdown shutdown.drainTimeout 60s
xDS server max receive message 32 MiB (raised from 4 MiB in v1.9)
Tracing client sampling 0% since v1.9 (was 100%)
Upstream TLS max version TLS 1.3 (v1.9 fix; was capped at 1.2)
EnvoyProxy config precedence Gateway > GatewayClass > EnvoyGateway default, mergeType: Replace unless set (v1.8+)

egctl Commands

Command Purpose
egctl x translate --from gateway-api --to xds -f <file> Offline translation of manifests to xDS (-t route limits the type, --add-missing-resources stubs references)
egctl config envoy-proxy <type> -n <ns> [pod] Dump live config from a managed proxy; <type> is all, listener, route, cluster, and similar
egctl config envoy-gateway all -n envoy-gateway-system Controller in-memory resources through the admin config dump (v1.8+)
egctl x status all -A / egctl x status httproute --quiet -A Summarize status conditions across resources
egctl x dashboard envoy-proxy -n <ns> <pod> Port-forward and open the Envoy admin dashboard
egctl x install / egctl x uninstall Install or remove EG without Helm (--skip-crds, --only-crds, --with-crds)

Source: egctl task.

Generated xDS by Resource

Resource xDS resources generated
Gateway listener Listener, filter chain, downstream TLS context (SDS secret)
HTTPRoute / GRPCRoute rule Route configuration, virtual host, route, cluster, ClusterLoadAssignment
SecurityPolicy (JWT) jwt_authn HTTP filter plus per-route config; provider names content-derived since v1.9
SecurityPolicy (OIDC) One oauth2 HTTP filter in the HCM plus route typed_per_filter_config (v1.8+)
SecurityPolicy (ExtAuth) ext_authz filter and a cluster for the auth service
BackendTrafficPolicy Cluster LB policy, circuit breakers, health checks, outlier detection, rate limit descriptors
BackendTrafficPolicy (global rate limit) ratelimit filter; shared-only rules in typedPerFilterConfig since v1.9
EnvoyExtensionPolicy (Lua) Listener-level Lua filters since v1.8.3 (previously LuaPerRoute)

Security Controls Summary

Layer Mechanism Resource
Client to gateway TLS TLS termination (or passthrough through TLSRoute) Gateway listener certificateRefs
Client certificates mTLS client validation, CRLs, allowExpiredCertificate (v1.9) ClientTrafficPolicy tls.clientValidation
Gateway to backend TLS TLS origination and SAN validation BackendTLSPolicy (Gateway API v1)
Gateway to backend mTLS Client certificate plus CA validation Backend tls.clientCertificateRef or EnvoyProxy backendTLS
Authentication JWT, OIDC, API key, Basic auth SecurityPolicy
External authorization gRPC or HTTP ext_authz SecurityPolicy extAuth
Authorization Allow/deny rules on principals, headers, CIDR, GeoIP, CEL (v1.9) SecurityPolicy authorization
Browser protections CORS, CSRF (v1.9) SecurityPolicy cors, csrf
Abuse control Local and global rate limiting BackendTrafficPolicy rateLimit

BackendTLSPolicy Validation Fields

Field Purpose
hostname SNI hostname sent to the backend, also used for certificate validation (required)
caCertificateRefs ConfigMap or Secret references with CA bundles
wellKnownCACertificates: System Use the system trust store instead of refs; since v1.9 all such policies share one system_ca_certificates SDS secret
subjectAltNames[] Objects with type: Hostname or type: URI and the matching hostname or uri value

Security Advisories and Hardening Changes

Version Item
v1.9.1 / v1.8.4 CVE-2026-47775: OAuth2/OIDC session cookies now AES-256-GCM; existing CBC sessions are invalidated
v1.9.1 / v1.8.4 GHSA-w42f-28h3-998w: tenant EnvoyProxy securityContext replaced hardened defaults (confused deputy, PSA escape)
v1.9.1 / v1.8.4 OCI Wasm pulls no longer fall back to plain HTTP; HTTP OIDC issuer URLs rejected
v1.9.0 xDS server authentication bypass in GatewayNamespace mode fixed; controller runs with a read-only root filesystem
v1.7.3 gRPC-Go CVE-2026-33186 (authorization bypass) through dependency bump
v1.7.0 Lua EnvoyExtensionPolicy sandboxing and resource limits

Sources: v1.9.1 notes, v1.8.4 notes, v1.9 announcement, v1.7.3 notes.

Agent Router (formerly Envoy AI Gateway) Compatibility

Agent Router Envoy Gateway Gateway API Kubernetes
v1.1.x (2026-08) TBD (no row on the compatibility page as of 2026-09-25) TBD TBD
v1.0.x (2026-06) v1.8.1+ (Envoy v1.38.x) v1.5.x v1.32+
v0.7.x v1.8.x+ v1.5.x v1.32+
v0.6.x v1.7.x+ v1.4.x v1.32+

Source: Agent Router compatibility page (read from the site/docs/compatibility.md file in the repository).

Sizing Guidance (Unverified)

Unsourced performance data

These numbers came from an earlier revision of this note. They are estimates from vendor docs, community benchmarks, and engineering judgment, not controlled benchmarks. Hardware, versions, and methods were not recorded. Use them as rough guidance only, and benchmark your own workload before capacity planning.

Metric Value Conditions
Throughput (HTTP/1.1) 30,000-50,000 RPS Single gateway, small payloads
Throughput (HTTP/2) 40,000-70,000 RPS Multiplexed connections
Added latency (P50) 0.5-1 ms Added by proxy
Added latency (P99) 2-5 ms Under moderate load
Gateways Routes Controller memory Controller CPU
1 50 128Mi 100m
5 200 256Mi 200m
20 1,000 512Mi 500m
Traffic level Proxy CPU Proxy memory
Low (< 1k RPS) 100m 64Mi
Medium (1-10k RPS) 500m 256Mi
High (10-100k RPS) 2+ 1Gi+

Since v1.9, EndpointSlice field indexing is on by default and can raise controller memory in clusters with many EndpointSlices. EnvoyProxy.spec.mergeBackends (v1.9, off by default) reduces cluster count and stats cardinality.