Actualiza la configuración del compresor de EnvoyFilter
Varios campos de nivel superior en la superficie de la API del filtro envoy.extensions.filters.http.compressor.v3.Compressor están obsoletos en Envoy (consulta la definición de la fuente).
Estos parámetros de configuración se trasladaron a bloques response_direction_config.common_config y request_direction_config.common_config dedicados.
En esta guía, se proporciona el contexto y los pasos necesarios para actualizar tus recursos de EnvoyFilter a un formato compatible. La migración a este formato moderno garantiza que tus configuraciones sigan siendo compatibles con las actualizaciones posteriores, se benefician de una mayor claridad estructural y se alinean con las prácticas recomendadas de modernización de Cloud Service Mesh.
Comprende la necesidad de modernización
El filtro Compressor de Envoy proporciona compresión y descompresión sobre la marcha de los cuerpos HTTP, lo que ayuda a reducir el uso del ancho de banda y a mejorar el rendimiento de la aplicación.
Cloud Service Mesh con el plano de control TRAFFIC_DIRECTOR (consulta Cómo verificar la implementación del plano de control) requiere el uso de la versión compatible de la API de EnvoyFilter. Las implementaciones heredadas que usan campos de nivel superior obsoletos (como content_length, content_type, disable_on_etag_header, remove_accept_encoding_header o runtime_enabled) seguirán funcionando, pero se recomienda actualizarlas de inmediato por motivos de confiabilidad.
Cuando se usan estos campos obsoletos, las validaciones se implementan de forma progresiva en los canales de versiones (primero Rapid, luego Regular y, por último, Stable). Las validaciones del plano de control se aplican según el momento en que se produjeron las implementaciones:
| Tipo de implementación | Comportamiento de la validación |
|---|---|
| Implementaciones heredadas (se implementaron antes de que se habilitaran las validaciones) | El plano de control establece un estado de advertencia en tu recurso personalizado (CR) EnvoyFilter que dice: found usage of unsupported fields: [...]. La configuración se seguirá aplicando para la retrocompatibilidad, pero debes migrar a los campos admitidos para garantizar la compatibilidad continua. |
| Implementaciones admitidas (se implementó después de habilitar las validaciones) | El plano de control bloquea estrictamente el uso de campos no admitidos. La aplicación de la configuración genera un error en el recurso EnvoyFilter con el mensaje found usage of unsupported fields: [...], y se rechazará la configuración no admitida. |
Actualizar tus configuraciones resuelve estas advertencias y errores en el estado de tu recurso, y garantiza que tus configuraciones cumplan con las validaciones.
Identifica configuraciones obsoletas
Tu configuración de EnvoyFilter debe actualizarse si estableces cualquiera de los siguientes campos directamente en el bloque typed_config:
min_content_lengthcontent_lengthcontent_typedisable_on_etag_headerremove_accept_encoding_header
Puedes enumerar tus EnvoyFilters con el siguiente comando:
kubectl get envoyfilters --all-namespaces -o yaml
Inspecciona el resultado de los parches de EnvoyFilters envoy.filters.http.compressor.
Formatos de configuración
En las siguientes secciones, se proporcionan ejemplos de las configuraciones obsoletas y modernizadas del filtro Compressor Envoy dentro de un recurso EnvoyFilter.
Ejemplo de una configuración obsoleta
Si la sección de parche de tu EnvoyFilter se parece al siguiente fragmento, significa que usa el formato obsoleto:
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
Ejemplo de la configuración modernizada
Los campos obsoletos se deben mover al objeto response_direction_config (o request_direction_config si corresponde):
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"
Campos y rutas de migración compatibles
Para obtener una lista completa de los campos admitidos, consulta la guía Extensibilidad del plano de datos con EnvoyFilter. En la siguiente tabla, se detalla la asignación para migrar los campos obsoletos más comunes.
| Ruta del campo obsoleto | Ruta del campo moderna | Notas |
|---|---|---|
typed_config.min_content_length |
typed_config.response_direction_config.common_config.min_content_lengthO typed_config.request_direction_config.common_config.min_content_length |
Establece el tamaño mínimo de la respuesta O la solicitud, respectivamente, para activar la compresión. |
typed_config.content_length |
typed_config.response_direction_config.common_config.min_content_lengthO typed_config.request_direction_config.common_config.min_content_length |
Alias anterior de min_content_length. Cambia el nombre a min_content_length en la ruta de acceso nueva. |
typed_config.content_type |
typed_config.response_direction_config.common_config.content_typeO typed_config.request_direction_config.common_config.content_type |
Es un array de tipos de contenido que se comprimirán. |
typed_config.disable_on_etag_header |
typed_config.response_direction_config.disable_on_etag_header |
Inhabilita la compresión si la respuesta contiene un encabezado ETag. |
typed_config.remove_accept_encoding_header |
typed_config.response_direction_config.remove_accept_encoding_header |
Quita el encabezado Accept-Encoding de las solicitudes antes de enviarlas al upstream. |
Plan de migración
Te recomendamos que actualices tus parámetros de configuración de EnvoyFilter siguiendo las prácticas recomendadas estándar de implementación y pruebas de tu organización. Ten en cuenta estos pasos generales durante la migración:
- Identifica: Busca todos los recursos de
EnvoyFiltercon el filtro Compressor y los campos obsoletos, como se describe en Cómo identificar configuraciones obsoletas. - Prueba: Modifica el código YAML de tus recursos
EnvoyFiltery prueba los cambios en un entorno de preproducción. Verifica que la compresión esté activa para los tipos y tamaños de contenido esperados. - Supervisa y valida:
- Verifica el estado de tu recurso
EnvoyFilterpara confirmar que ya no aparezcan las advertencias o los errores defound usage of unsupported fields: [...]. - Supervisa las métricas clave: uso de CPU, latencia y consumo de ancho de banda.
- Inspecciona los encabezados de respuesta (por ejemplo,
Content-Encoding: gzip) y confirma la compresión.
- Verifica el estado de tu recurso
- Implementación: Aplica las configuraciones de
EnvoyFilteradmitidas a las cargas de trabajo de producción.
Beneficios de la modernización
- Claridad del estado del recurso: Quita las advertencias y los errores
found usage of unsupported fields: [...]del estado del recursoEnvoyFilterdel compresor. - Estandarización: Se alinea con las prácticas recomendadas actuales de configuración de Envoy y las
TRAFFIC_DIRECTORvalidaciones. - Compatibilidad futura: Garantiza que tus configuraciones funcionen sin problemas con las próximas versiones de Envoy y Cloud Service Mesh.
Solución de problemas y asistencia
Si tienes problemas, considera lo siguiente:
- Verifica la sintaxis y la ubicación de los campos de YAML.
- Examina los registros del proxy de Envoy para obtener mensajes de error detallados:
kubectl logs -l app=your-app -c istio-proxy -n your-namespace. - Si es necesario, revierte a la configuración anterior de
EnvoyFilter. - Comunícate con el equipo de Google Cloud Asistencia para obtener más ayuda.