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 |
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.