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_length
  • content_length
  • content_type
  • disable_on_etag_header
  • remove_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_length
O
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_length
O
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_type
O
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 EnvoyFilter con 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 EnvoyFilter y 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 EnvoyFilter para confirmar que ya no aparezcan las advertencias o los errores de found 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.
  • Implementación: Aplica las configuraciones de EnvoyFilter admitidas 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 recurso EnvoyFilter del compresor.
  • Estandarización: Se alinea con las prácticas recomendadas actuales de configuración de Envoy y las TRAFFIC_DIRECTOR validaciones.
  • 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.