Configura una extensión de tráfico

Las Extensiones del servicio permiten que los balanceadores de cargas de aplicaciones compatibles usen complementos o envíen texto destacado a los servicios de backend para insertar procesamiento personalizado en la ruta de procesamiento. Las extensiones de tráfico se ejecutan en último lugar en la ruta de procesamiento de solicitudes y en primer lugar en la ruta de procesamiento de respuestas para modificar los encabezados y las cargas útiles sin afectar la elección del servicio de backend. En esta página, se describe cómo configurar las extensiones de tráfico.

Para obtener una descripción general de las extensiones del balanceador de cargas de aplicaciones, consulta Descripción general de las extensiones de Cloud Load Balancing.

Una extensión de tráfico para un balanceador de cargas de aplicaciones apunta a los siguientes recursos:

  • Una regla de reenvío para adjuntar
  • Un complemento o un servicio de backend de texto destacado cuyos backends ejecutan la API de gRPC ext_proc

Una extensión de tráfico agrupa los servicios de extensión relacionados en una o más cadenas. Puedes configurar complementos y textos destacados en la misma cadena de extensión. Cada cadena de extensión selecciona el tráfico en el que se actuará mediante las condiciones de coincidencia de Common Expression Language (CEL). El balanceador de cargas evalúa una solicitud en función de la condición de coincidencia de cada cadena de manera secuencial. Cuando una solicitud coincide con las condiciones definidas por una cadena, todas las extensiones de la cadena actúan sobre la solicitud. Solo una cadena coincide con una solicitud determinada.

Cada extensión de una cadena puede tener su propio conjunto de eventos admitidos. Las modificaciones que realiza una extensión en el contenido de la solicitud y la respuesta son visibles para las extensiones restantes de la cadena. Para las extensiones configuradas para admitir eventos de respuesta, la secuencia de extensiones se invierte en la ruta de respuesta.

La extensión de tráfico hace referencia a la regla de reenvío del balanceador de cargas a la que se adjuntará. Después de configurar el recurso, el balanceador de cargas comienza a enviar solicitudes coincidentes a los servicios de extensión.

Para obtener información sobre los límites relacionados con las extensiones, consulta la página Cuotas y límites.

Configura con complementos

En esta sección, se muestra cómo configurar una extensión de tráfico con un complemento.

Todos los recursos de extensión que hacen referencia a un complemento determinado deben ser del mismo tipo. Las extensiones también deben tener el mismo esquema de balanceo de cargas. No puedes configurar extensiones de Cloud Load Balancing con complementos que ya se usen en extensiones de Media CDN.

Antes de comenzar

  1. Crea un complemento que contenga tu código personalizado.

  2. Crea y configura un balanceador de cargas de aplicaciones que admita complementos de extensión de tráfico.

    Por ejemplo, configura un balanceador de cargas de aplicaciones externo global con backends de grupos de instancias de VM.

  3. Configura una forma de enviar solicitudes de prueba a tu servicio, por ejemplo, ejecutando curl. Si usas un balanceador de cargas interno, crea una VM de cliente para realizar pruebas.

Configura una extensión de tráfico con un complemento

En el siguiente ejemplo, se te ayuda a configurar una extensión de tráfico con un complemento que agrega un encabezado de respuesta, hello: service-extensions, cuando el host coincide con example.com.

  1. Verifica si hay una coincidencia para example.com en el mapa de URL.

    1. Ejecuta el siguiente comando curl en la regla de reenvío de la VM de cliente:

      curl -D - -H "host: example.com" FORWARDING_RULE_IP
      

      Reemplaza FORWARDING_RULE_IP por la dirección IP de la regla de reenvío. Para encontrar la dirección IP, usa el gcloud compute forwarding-rules describe comando.

      El resultado es similar a este:

      HTTP/1.1 200 OK
      ...
      content-length: 46
      content-type: text/html
      via: 1.1 google
      
  2. Configura la extensión de tráfico.

    Console

    1. En la Google Cloud consola de, ve a la página Extensiones del servicio.

      Ir a Extensiones del servicio

    2. Haz clic en Crear extensión.

      Se abrirá un asistente para guiarte a través de algunos pasos iniciales.

    3. Para el producto, selecciona Balanceo de cargas. Luego, haz clic en Continuar.

      Aparecerá una lista de balanceadores de cargas de aplicaciones compatibles.

    4. Para el tipo de balanceador de cargas, selecciona Balanceador de cargas de aplicaciones externo global o Balanceador de cargas de aplicaciones interno entre regiones. Luego, haz clic en Continuar.

    5. Para el tipo de extensión, selecciona Extensiones de tráfico y, luego, haz clic en Continuar.

    6. Para abrir el formulario Crear extensión, haz clic en Continuar.

      En el formulario Crear extensión, observa que las selecciones anteriores, que aparecen en la parte superior de la página, no se pueden editar.

    7. En la sección Conceptos básicos, haz lo siguiente:

      1. Especifica un nombre único para la extensión.

        El nombre debe comenzar con una letra minúscula seguida por un máximo de 62 letras minúsculas, números o guiones, y no debe terminar con un guion.

      2. Opcional: Ingresa una breve descripción sobre la extensión con un máximo de 1,024 caracteres.

    8. Opcional: En la sección Etiquetas, haz clic en Agregar etiqueta. Luego, en la fila que aparece, haz lo siguiente:

      • En Clave, ingresa un nombre de clave.
      • En Valor, ingresa un valor para la clave.

      Para agregar más pares clave-valor, haz clic en Agregar etiqueta. Puedes agregar un máximo de 64 pares clave-valor.

      Para obtener más información sobre las etiquetas, consulta Crea y actualiza etiquetas para proyectos.

    9. En Reglas de reenvío, selecciona una o más reglas de reenvío para asociar con la extensión, por ejemplo, http-content-rule.

      Las reglas de reenvío que ya están asociadas con otra extensión no se pueden seleccionar y aparecen como no disponibles.

    10. En Extensión, para agregar una extensión que se ejecutará para una solicitud coincidente, haz lo siguiente:

      • Para que coincidan las solicitudes para las que se ejecuta la cadena de extensión, en Condición de coincidencia, especifica una expresión de Common Expression Language (CEL) —por ejemplo, request.host == "example.com".

        Para obtener más información sobre las expresiones de CEL, haz clic en Obtener ayuda sobre la sintaxis o consulta la referencia del lenguaje del comparador de CEL.

      • En Tipo de programabilidad, selecciona Complementos.

      • En Complemento, selecciona un complemento creado con Extensiones del servicio para el mismo producto y tipo de extensión.

      • En Eventos, selecciona uno o más tipos de eventos HTTP que llamen a la extensión.

      • En Reenviar atributos, selecciona los atributos que deseas que reenvíe la extensión. Para obtener más información, consulta Atributos admitidos.

      • En Reenviar encabezados, haz clic en Agregar encabezado y, luego, agrega encabezados HTTP para reenviar a la extensión (desde el cliente o el backend). Si no se especifica un encabezado, se envían todos.

      • Opcional: Si la extensión agota el tiempo de espera o falla y deseas que continúe el procesamiento de la solicitud o la respuesta, en Fail open, selecciona Habilitado. También se ejecutan las extensiones posteriores de la cadena.

        De forma predeterminada, la opción Fail open no está seleccionada. En este caso, cuando se produce un error, se detiene el procesamiento de la solicitud o la respuesta. Si los encabezados de respuesta no se entregaron al cliente de nivel inferior, se muestra un código de estado HTTP 500 genérico al cliente. Si se entregaron los encabezados de respuesta, se restablece la transmisión HTTP al cliente.

        Se prefiere la opción predeterminada de mantener Fail open sin seleccionar cuando se prioriza la seguridad o la integridad. Habilitar Fail open, en especial para operaciones no críticas, ayuda a priorizar la disponibilidad.

      Si deseas especificar más de una extensión o cadenas de extensión en lugar de una sola extensión, haz clic en el botón Cambiar al modo avanzado al final del formulario y especifica las extensiones y cadenas necesarias. Las extensiones se ejecutan en la secuencia en la que se enumeran.

      Especifica nombres únicos para cada extensión y cadena de extensión. Los nombres deben cumplir con RFC-1034, usar solo letras minúsculas, números y guiones, y tener una longitud máxima de 63 caracteres. Además, el primer carácter debe ser una letra y el último debe ser una letra o un número.

    11. Haz clic en Create Extension.

    gcloud

    1. Define el complemento en un archivo YAML y asócialo con una regla de reenvío, por ejemplo, http-content-rule.

      cat >traffic-plugin.yaml <<EOF
          name: traffic-ext
          forwardingRules:
          - https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/forwardingRules/http-content-rule
          loadBalancingScheme: EXTERNAL_MANAGED
          extensionChains:
          - name: "chain1"
            matchCondition:
              celExpression: 'request.host == "example.com"'
            extensions:
            - name: 'ext1'
              service: projects/PROJECT_ID/locations/LOCATION/wasmPlugins/WASM_PLUGIN
              failOpen: false
              supportedEvents:
              - RESPONSE_HEADERS
              forwardAttributes:
              - request.host
              - request.path
      EOF
      

      Reemplaza lo siguiente:

      • PROJECT_ID: la ID del proyecto.
      • REGION: la región de la regla de reenvío El valor debe coincidir con el valor especificado para la ubicación del complemento.
      • LOCATION: la ubicación del complemento como global o una región
      • WASM_PLUGIN: el ID o el nombre completamente calificado del complemento

      Para obtener más información sobre los campos del archivo YAML, consulta ExtensionChain en la documentación de la API. Para obtener información sobre los atributos admitidos, consulta Atributos admitidos.

    2. Importa la extensión de tráfico. Usa el gcloud service-extensions lb-traffic-extensions import comando con los siguientes valores de muestra.

      gcloud service-extensions lb-traffic-extensions import traffic-ext \
          --source=traffic-plugin.yaml \
          --location=global
      

    Después de crear una extensión de tráfico, se tarda un poco en distribuir el nuevo complemento en todas las ubicaciones. El tiempo puede variar según las ubicaciones porque el complemento no se entrega a todas las ubicaciones de forma simultánea.

  3. Para verificar que la extensión de tráfico funcione como se espera, usa el mismo comando curl:

    curl -D - -H "host: example.com" FORWARDING_RULE_IP
    

    El resultado incluye el encabezado de respuesta hello: service-extensions.

    HTTP/1.1 200 OK
    ...
    content-length: 46
    content-type: text/
    hello: service-extensions
    via: 1.1 google
    

    Para validar que la extensión solo segmenta el tráfico de example.com, repite el comando curl sin el encabezado host.

    curl -D - FORWARDING_RULE_IP
    

    El resultado es similar a este:

    HTTP/1.1 200 OK
    ...
    content-length: 46
    content-type: text/html
    via: 1.1 google
    

Configura extensiones de tráfico para servicios administrados por el usuario con textos destacados

En esta sección, se muestra cómo configurar una extensión de tráfico para un servicio de backend de texto destacado administrado por el usuario con un texto destacado.

Antes de comenzar

Crea los recursos necesarios como se describe en Configura un servicio de backend de texto destacado.

Configura una extensión de tráfico con un texto destacado

En el siguiente ejemplo, se te ayuda a configurar una extensión de tráfico con un texto destacado para llamar cuando el host coincide con example.com. El servidor de extensión de tráfico en callout-vm agrega un encabezado de respuesta, hello: service-extensions, a las solicitudes coincidentes.

  1. Verifica si hay una coincidencia para example.com en el mapa de URL.

    1. Ejecuta el siguiente comando curl en la regla de reenvío de la VM de cliente:

      curl -D - -H "host: example.com" FORWARDING_RULE_IP
      

      Reemplaza FORWARDING_RULE_IP por la dirección IP de la regla de reenvío. Para encontrar la dirección IP, usa el gcloud compute forwarding-rules describe comando.

      El resultado es similar a este:

      HTTP/1.1 200 OK
      ...
      content-length: 46
      content-type: text/html
      via: 1.1 google
      
      Page served from: l7-ilb-backend-example-1c7t
      
  2. Configura la extensión de tráfico.

    Console

    1. En la Google Cloud consola de, ve a la página Extensiones del servicio.

      Ir a Extensiones del servicio

    2. Haz clic en Crear extensión.

      Se abrirá un asistente para guiarte a través de algunos pasos iniciales.

    3. Para el producto, selecciona Balanceo de cargas. Luego, haz clic en Continuar.

      Aparecerá una lista de balanceadores de cargas de aplicaciones compatibles.

    4. Selecciona un tipo de balanceador de cargas. Para los balanceadores de cargas regionales, también especifica la región. Haz clic en Continuar.

    5. Para el tipo de extensión, selecciona Extensiones de tráfico y, luego, haz clic en Continuar.

    6. Para abrir el formulario Crear extensión, haz clic en Continuar.

      En el formulario Crear extensión, observa que las selecciones anteriores, que aparecen en la parte superior de la página, no se pueden editar.

    7. En la sección Conceptos básicos, haz lo siguiente:

      1. Especifica un nombre único para la extensión.

        El nombre debe comenzar con una letra minúscula seguida por un máximo de 62 letras minúsculas, números o guiones, y no debe terminar con un guion.

      2. Opcional: Ingresa una breve descripción sobre la extensión con un máximo de 1,024 caracteres.

    8. Opcional: En la sección Etiquetas, haz clic en Agregar etiqueta. Luego, en la fila que aparece, haz lo siguiente:

      • En Clave, ingresa un nombre de clave.
      • En Valor, ingresa un valor para la clave.

      Para agregar más pares clave-valor, haz clic en Agregar etiqueta. Puedes agregar un máximo de 64 pares clave-valor.

      Para obtener más información sobre las etiquetas, consulta Crea y actualiza etiquetas para proyectos.

    9. En Reglas de reenvío, selecciona una o más reglas de reenvío para asociar con la extensión, por ejemplo, l7-ilb-forwarding-rule.

      Las reglas de reenvío que ya están asociadas con otra extensión no se pueden seleccionar y aparecen como no disponibles.

    10. En Extensión, para agregar una extensión que se ejecutará para una solicitud coincidente, haz lo siguiente:

      • En Tipo de programabilidad, selecciona Textos destacados.

      • Para que coincidan las solicitudes para las que se ejecuta la cadena de extensión, en Condición de coincidencia, especifica una expresión de Common Expression Language (CEL) —por ejemplo, request.host == "example.com".

        Para obtener más información sobre las expresiones de CEL, haz clic en Obtener ayuda sobre la sintaxis o consulta la referencia del lenguaje del comparador de CEL.

      • En Autoridad, ingresa el encabezado authority de la solicitud gRPC que se envió desde el balanceador de cargas al servicio de extensión.

      • En Servicio de backend, selecciona un servicio de backend creado siguiendo las instrucciones en Configura un servicio de backend de texto destacado.

      • En Tiempo de espera, especifica un valor entre 10 y 1,000 milisegundos después del cual se agota el tiempo de espera de un mensaje en la transmisión.

      • En Eventos, selecciona uno o más tipos de eventos HTTP que llamen a la extensión.

      • En Reenviar atributos, selecciona los atributos que deseas que reenvíe la extensión. Para obtener más información, consulta Atributos admitidos.

      • En Reenviar encabezados, haz clic en Agregar encabezado y, luego, agrega encabezados HTTP para reenviar a la extensión (desde el cliente o el backend). Si no se especifica un encabezado, se envían todos.

      • Opcional: Si la extensión agota el tiempo de espera o falla y deseas que continúe el procesamiento de la solicitud o la respuesta, en Fail open, selecciona Habilitado. También se ejecutan las extensiones posteriores de la cadena.

        De forma predeterminada, la opción Fail open no está seleccionada. En este caso, cuando se produce un error, se detiene el procesamiento de la solicitud o la respuesta. Si los encabezados de respuesta no se entregaron al cliente de nivel inferior, se muestra un código de estado HTTP 500 genérico al cliente. Si se entregaron los encabezados de respuesta, se restablece la transmisión HTTP al cliente.

        Se prefiere la opción predeterminada de mantener Fail open sin seleccionar cuando se prioriza la seguridad o la integridad. Habilitar Fail open, en especial para operaciones no críticas, ayuda a priorizar la disponibilidad.

      • En Metadatos, haz clic en Agregar metadatos y especifica valores de muestra como se sugiere. En Clave, especifica key y, en Valor, especifica value.

        Haz clic en Agregar metadatos para agregar otro par clave-valor. En Clave, especifica fr y, en Valor, especifica forwarding_rule_id.

        El campo Metadatos te permite pasar cualquier información adicional del balanceador de cargas al servidor de extensión. Los metadatos se envían en un mensaje ProcessingRequest y se codifican como protobuf.Struct. Cualquier texto dentro de los metadatos que coincida con el ID de regla de reenvío especificado se reemplaza por la URL de recurso completamente calificada de la regla de reenvío asociada con la solicitud del cliente.

        El tamaño total de los metadatos debe ser inferior a 1 KiB. La cantidad total de claves en los metadatos debe ser inferior a 20. La longitud de cada clave debe ser inferior a 64 caracteres. La longitud de cada valor debe ser inferior a 1,024 caracteres. Todos los valores deben ser cadenas.

      Si deseas especificar más de una extensión o cadenas de extensión en lugar de una sola extensión, haz clic en el botón Cambiar al modo avanzado al final del formulario y especifica las extensiones y cadenas necesarias. Las extensiones se ejecutan en la secuencia en la que se enumeran.

      Especifica nombres únicos para cada extensión y cadena de extensión. Los nombres deben cumplir con RFC-1034, usar solo letras minúsculas, números y guiones, y tener una longitud máxima de 63 caracteres. Además, el primer carácter debe ser una letra y el último debe ser una letra o un número.

    11. Haz clic en Create Extension.

    gcloud

    1. Define el texto destacado en un archivo YAML y asócialo con la regla de reenvío. Usa los valores de muestra proporcionados.

      cat >traffic.yaml <<EOF
          name: traffic-ext
          forwardingRules:
          - https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/forwardingRules/l7-ilb-forwarding-rule
          loadBalancingScheme: INTERNAL_MANAGED
          extensionChains:
          - name: "chain1"
            matchCondition:
              celExpression: 'request.host == "example.com"'
            extensions:
            - name: 'ext11'
              authority: ext11.com
              service: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/backendServices/l7-ilb-callout-service
              failOpen: false
              timeout: 0.1s
              metadata:
                "key": "value"
                "fr": "forwarding_rule_id"
              supportedEvents:
              - RESPONSE_HEADERS
              forwardAttributes:
              - request.host
              - request.path
      EOF
      

      Reemplaza PROJECT_ID por el ID del proyecto.

      El campo metadata en la configuración de la extensión te permite pasar cualquier información adicional del balanceador de cargas al servidor de extensión. Los metadatos se envían en un mensaje ProcessingRequest y se codifican como protobuf.Struct. Cualquier texto dentro de los metadatos que coincida con el ID de regla de reenvío especificado se reemplaza por la URL de recurso completamente calificada de la regla de reenvío asociada con la solicitud del cliente.

      El tamaño total de metadata debe ser inferior a 1 KiB. La cantidad total de claves en los metadatos debe ser inferior a 16. La longitud de cada clave debe ser inferior a 64 caracteres. La longitud de cada valor debe ser inferior a 1,024 caracteres. Todos los valores deben ser cadenas.

      Para obtener más información sobre los campos del archivo YAML, consulta ExtensionChain en la documentación de la API. Para obtener información sobre los atributos admitidos, consulta Atributos admitidos.

    2. Importa la extensión de tráfico. Usa el gcloud service-extensions lb-traffic-extensions import comando con los siguientes valores de muestra.

      gcloud service-extensions lb-traffic-extensions import traffic-ext \
          --source=traffic.yaml \
          --location=us-west1
      
  3. Verifica que la extensión de tráfico funcione como se espera. Usa el mismo comando curl:

    curl -D - -H "host: example.com" FORWARDING_RULE_IP
    

    El resultado incluye el encabezado de respuesta hello: service-extensions.

    HTTP/1.1 200 OK
    ...
    content-length: 46
    content-type: text/
    hello: service-extensions
    via: 1.1 google
    
    Page served from: l7-ilb-backend-example-1c7t
    

    Para validar que la extensión solo segmenta el tráfico de example.com, repite el comando curl sin el encabezado host.

    curl -D - FORWARDING_RULE_IP
    

    El resultado es similar a este:

    HTTP/1.1 200 OK
    ...
    content-length: 46
    content-type: text/html
    via: 1.1 google
    
    Page served from: l7-ilb-backend-example-1c7t
    

¿Qué sigue?