Update EnvoyFilter compressor configurations
Several top-level fields in the API surface of the
envoy.extensions.filters.http.compressor.v3.Compressor filter are deprecated
in
Envoy
(see the source
definition).
These settings have been moved into dedicated
response_direction_config.common_config and
request_direction_config.common_config blocks.
This guide provides the context and steps necessary for updating your
EnvoyFilter resources to a supported format. Moving to this modern format
ensures your configurations remain compatible with subsequent updates, benefits
from improved structural clarity, and aligns with Cloud Service Mesh modernization
best practices.
Understanding the need for modernization
The Envoy Compressor filter provides on-the-fly compression and decompression of HTTP bodies, helping to reduce bandwidth usage and improve application performance.
Cloud Service Mesh with the TRAFFIC_DIRECTOR control plane (see Check control
plane implementation)
requires using the supported version of the EnvoyFilter API. Legacy deployments
using deprecated top-level fields (such as content_length, content_type,
disable_on_etag_header, remove_accept_encoding_header, or runtime_enabled)
will continue to function but are recommended to be updated immediately for
reliability purposes.
When using these deprecated fields, validations are being rolled out
progressively across release channels (Rapid, then Regular, then Stable).
The control plane validations apply based on when the deployments occurred:
| Deployment Type | Validation Behavior |
|---|---|
| Legacy Deployments (Deployed before validations were enabled) | The control plane sets a warning status on your EnvoyFilter custom resource (CR) that reads: found usage of unsupported fields: [...]. The configuration will still be applied for backward compatibility, but you need to migrate to the supported fields to ensure continued support. |
| Supported Deployments (Deployed after validations were enabled) | The control plane strictly blocks the use of unsupported fields. Applying the configuration results in an error on the EnvoyFilter resource with the message: found usage of unsupported fields: [...], and the unsupported configuration will be rejected. |
Updating your configurations resolves these warnings and errors in your resource status, and ensures your configurations comply with the validations.
Identify deprecated configurations
Your EnvoyFilter configuration needs to be updated if you are setting any of
the following fields directly under the typed_config block:
min_content_lengthcontent_lengthcontent_typedisable_on_etag_headerremove_accept_encoding_header
You can list your EnvoyFilters using:
kubectl get envoyfilters --all-namespaces -o yaml
Inspect the output for EnvoyFilters patching envoy.filters.http.compressor.
Configuration formats
The following sections provide examples of both the deprecated and modernized
configurations for the Compressor Envoy filter within an EnvoyFilter resource.
Example of a deprecated configuration
If your EnvoyFilter's patch section resembles the following snippet, it uses
the deprecated format:
apiVersion: networking.istio.io/v1alpha3
kind: EnvoyFilter
metadata:
name: compressor-filter-update
namespace: istio-system
spec:
configPatches:
- applyTo: HTTP_FILTER
match:
context: GATEWAY
listener:
filterChain:
filter:
name: envoy.filters.network.http_connection_manager
subFilter:
name: envoy.filters.http.router
patch:
operation: INSERT_BEFORE
value:
name: envoy.filters.http.compressor
typed_config:
'@type': type.googleapis.com/envoy.extensions.filters.http.compressor.v3.Compressor
# These top-level fields are DEPRECATED
min_content_length: 1024
content_type:
- "application/javascript"
- "application/json"
disable_on_etag_header: true
remove_accept_encoding_header: true
compressor_library:
name: gzip
typed_config:
'@type': type.googleapis.com/envoy.extensions.compression.gzip.compressor.v3.Gzip
Example of the modernized configuration
The deprecated fields must be moved into the response_direction_config object
(or request_direction_config if applicable):
apiVersion: networking.istio.io/v1alpha3
kind: EnvoyFilter
metadata:
name: compressor-filter-update
namespace: istio-system
spec:
configPatches:
- applyTo: HTTP_FILTER
match:
context: GATEWAY
listener:
filterChain:
filter:
name: envoy.filters.network.http_connection_manager
subFilter:
name: envoy.filters.http.router
patch:
operation: INSERT_BEFORE
value:
name: envoy.filters.http.compressor
typed_config:
'@type': type.googleapis.com/envoy.extensions.filters.http.compressor.v3.Compressor
compressor_library:
name: gzip
typed_config:
'@type': type.googleapis.com/envoy.extensions.compression.gzip.compressor.v3.Gzip
response_direction_config:
disable_on_etag_header: true # MOVED
remove_accept_encoding_header: true # MOVED
common_config:
min_content_length: 1024 # MOVED
content_type: # MOVED
- "application/javascript"
- "application/json"
enabled:
default_value: true
runtime_key: "compressor.enabled"
Supported fields and migration paths
For a complete list of supported fields, see the Data plane extensibility using EnvoyFilter guide. The following table details the mapping for migrating the most common deprecated fields.
| Deprecated Field Path | Modern Field Path | Notes |
|---|---|---|
typed_config.min_content_length |
typed_config.response_direction_config.common_config.min_content_lengthOR typed_config.request_direction_config.common_config.min_content_length |
Sets the minimum response OR request size respectively to trigger compression. |
typed_config.content_length |
typed_config.response_direction_config.common_config.min_content_lengthOR typed_config.request_direction_config.common_config.min_content_length |
Earlier alias for min_content_length. Rename to min_content_length in the new path. |
typed_config.content_type |
typed_config.response_direction_config.common_config.content_typeOR typed_config.request_direction_config.common_config.content_type |
Array of content types to compress. |
typed_config.disable_on_etag_header |
typed_config.response_direction_config.disable_on_etag_header |
Disables compression if the response contains an ETag header. |
typed_config.remove_accept_encoding_header |
typed_config.response_direction_config.remove_accept_encoding_header |
Removes the Accept-Encoding header from requests before dispatching to upstream. |
Migration plan
We recommend updating your EnvoyFilter configurations following your
organization's standard deployment and testing best practices. Consider these
general steps during your migration:
- Identify: Find all
EnvoyFilterresources using the Compressor filter with deprecated fields as described in Identify deprecated configurations. - Test: Modify the YAML of your
EnvoyFilterresource(s) and test the changes in a pre-prod environment. Verify that compression is active for the expected content types and sizes. - Monitor and validate:
- Check your
EnvoyFilterresource status to confirm thefound usage of unsupported fields: [...]warnings or errors are no longer present. - Monitor key metrics: CPU usage, latency, and bandwidth consumption.
- Inspect response headers (for example,
Content-Encoding: gzip) and confirm compression.
- Check your
- Deploy: Apply the supported
EnvoyFilterconfigurations to production workloads.
Benefits of modernization
- Resource Status clarity: Removes
found usage of unsupported fields: [...]warnings and errors from your compressorEnvoyFilterresource status. - Standardization: Aligns with current Envoy configuration best practices and
the
TRAFFIC_DIRECTORvalidations. - Future compatibility: Ensures your configurations work seamlessly with upcoming Envoy and Cloud Service Mesh versions.
Troubleshooting and support
If you encounter issues, consider the following:
- Double-check the YAML syntax and field placement.
- Examine Envoy proxy logs for detailed error messages:
kubectl logs -l app=your-app -c istio-proxy -n your-namespace. - Rollback to the previous
EnvoyFilterconfiguration if necessary. - Contact Google Cloud Support for further assistance.