Configura una extensión perimetral

Service Extensions permite que los balanceadores de cargas de aplicaciones compatibles usen complementos para insertar procesamiento personalizado en la ruta de procesamiento. Las extensiones de borde se ejecutan en la ruta de procesamiento de solicitudes cuando el balanceador de cargas recibe encabezados de solicitud y antes de que evalúe el mapa de URL o llame a Cloud CDN, lo que te permite influir en el almacenamiento en caché y el enrutamiento. En esta página, se describe cómo configurar las extensiones de borde.

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 para un balanceador de cargas de aplicaciones apunta a los siguientes recursos:

  • Regla de reenvío a la que se adjuntará
  • Un complemento

La extensión 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. Solo puedes adjuntar una extensión de borde a una regla de reenvío y solo puedes incluir un complemento en una cadena de extensión de borde.

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

Configuración con complementos

En esta sección, se usa un ejemplo para mostrarte cómo configurar una extensión de borde con un complemento que reescribe el encabezado de la solicitud :host en service-extensions.com cuando la ruta coincide con /extensions. El host anterior y el host recién configurado se asignan a servicios de backend en diferentes regiones, lo que demuestra el comportamiento de enrutamiento.

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 usan en las 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 borde.

    Sigue las instrucciones de la página Configura un balanceador de cargas de aplicaciones externo global con backends de grupos de instancias de VM para todos los pasos, excepto los siguientes:

    • Nombra el servicio de backend como service-one.
    • El punto service-one apunta a una instancia de máquina virtual (VM) en la región A.
    • De forma predeterminada, el punto gl7-gxlb-url-map apunta a service-one.
  3. Configura un servicio de backend adicional, service-two, y dirígelo a una VM en la región B.

  4. Al mapa de URL, agrega un comparador de rutas de acceso que apunte a service-two. Usa el comando gcloud compute url-maps add-path-matcher con los siguientes valores de muestra:

    gcloud compute url-maps add-path-matcher gl7-gxlb-url-map \
        --path-matcher-name=rewrite-host \
        --default-service=service-two \
        --new-hosts=service-extensions.com \
        --location=global
    
  5. Configura una forma de enviar solicitudes de prueba a tu servicio (por ejemplo, ejecutando curl).

Configura una extensión perimetral con un complemento

  1. Comprueba el comportamiento antes de configurar una extensión.

    1. Verifica que una solicitud sin una ruta explícita vaya a la región A:

      curl 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 comando gcloud compute forwarding-rules describe.

      El resultado es similar al siguiente y muestra que la página se entrega desde una VM en region A:

      Page served from region-A-vm
      
    2. Verifica que no haya coincidencias para /extensions en el mapa de URL:

      curl FORWARDING_RULE_IP/extensions
      

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

      El resultado indica que no hay ninguna coincidencia para /extensions en el mapa de URL. El resultado es similar a lo siguiente:

      <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
      <html><head>
      <title>404 Not Found</title>
      </head><body>
      ...
      
  2. Configura la extensión perimetral.

    Console

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

      Ir a Extensiones del servicio

    2. Haz clic en Crear extensión.

      Se abrirá un asistente que te guiará por algunos pasos iniciales.

    3. En el producto, selecciona Load Balancing. Luego, haz clic en Continuar.

      Aparecerá una lista de los balanceadores de cargas de aplicaciones admitidos.

    4. Para el tipo de balanceador de cargas, selecciona Balanceador de cargas de aplicaciones externo global. Luego, haga clic en Continuar.

    5. En el tipo de extensión, selecciona Extensiones de Edge 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 no se pueden editar.

    7. En la sección 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 puede terminar con un guion.

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

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

    8. En Reglas de reenvío, selecciona una o más reglas de reenvío para asociarlas con la extensión, por ejemplo, cr-xlb-forwarding-rule.

      No se pueden seleccionar las reglas de reenvío que ya están asociadas con otra extensión, y aparecen inhabilitadas.

    9. En Cadenas de extensiones, agrega una o más cadenas de extensiones para ejecutar una solicitud coincidente.

      Para agregar una cadena de extensiones, haz lo siguiente y, luego, haz clic en Listo:

      • En Cadena de extensión nueva, especifica un nombre único.

        El nombre debe 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.

      • Para que coincidan las solicitudes en 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.path.startsWith("/extensions").

        Las extensiones de Edge te permiten usar solo una expresión regular por expresión CEL.

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

      • Agrega una extensión para que se ejecute en una solicitud coincidente. En el caso de las extensiones de borde, solo puedes especificar una extensión.

        En Extensiones, haz lo siguiente y, luego, haz clic en Listo:

        • En Tipo de programabilidad, selecciona Complementos.

        • En Nombre de la extensión, especifica un nombre único.

          El nombre debe cumplir con la 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, una letra o un número.

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

        • En Forward headers, haz clic en Add header 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: Para Fail open, si deseas que la extensión se abra ante fallas, selecciona Habilitado. En este caso, si la llamada a la extensión falla o se agota el tiempo de espera, el procesamiento de la solicitud o la respuesta continúa sin errores. También se ejecutan las extensiones posteriores en la cadena de extensión.

          De forma predeterminada, el campo Fail open no está seleccionado. En este caso, si no se entregaron los encabezados de respuesta al cliente descendente, se devuelve al cliente un código de estado HTTP 500 genérico. Si se entregaron encabezados de respuesta, se restablece el flujo HTTP al cliente descendente.

    10. Haz clic en Crear extensión.

    gcloud

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

      cat >edge-plugin.yaml <<EOF
          name: edge-ext
          forwardingRules:
          - https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/global/forwardingRules/cr-xlb-forwarding-rule
          loadBalancingScheme: EXTERNAL_MANAGED
          extensionChains:
          - name: "chain1"
            matchCondition:
              celExpression: 'request.path.startsWith("/extensions")'
            extensions:
            - name: 'ext1'
              service: projects/PROJECT_ID/locations/global/wasmPlugins/WASM_PLUGIN
              failOpen: false
              supportedEvents:
              - REQUEST_HEADERS
      EOF
      

      Reemplaza lo siguiente:

      • PROJECT_ID: El ID del proyecto
      • WASM_PLUGIN: Es el ID o el nombre completamente calificado del complemento.

      Las extensiones de Edge te permiten usar solo una expresión regular por expresión CEL.

    2. Importa la extensión de conexión. Usa el comando gcloud service-extensions lb-edge-extensions import con los siguientes valores de muestra:

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

    Después de crear una extensión de borde, el nuevo complemento tarda un poco en distribuirse en todas las ubicaciones. La hora puede variar según la ubicación, ya que el complemento no se entrega a todas las ubicaciones de forma simultánea.

  3. Para verificar que la extensión de Edge funcione según lo esperado, usa el mismo comando curl:

    curl FORWARDING_RULE_IP/extensions
    

    El resultado es similar al siguiente y muestra que la página se entrega desde una VM en region B:

    Page served from region-B-vm
    

    Para verificar que el complemento solo se ejecute para las solicitudes con el prefijo de ruta /extension, repite el comando curl sin una ruta.

    curl FORWARDING_RULE_IP
    

    El resultado es similar a lo siguiente:

    Page served from region-A-vm
    

Limitaciones de las extensiones de conexión de integración

  • Solo puedes adjuntar una extensión de borde a una regla de reenvío.
  • Las extensiones de Edge no admiten el procesamiento del cuerpo HTTP.
  • Las extensiones de borde te permiten usar solo una expresión regular por expresión CEL.

Para conocer las limitaciones que se aplican a todas las extensiones, consulta Limitaciones de las extensiones.

¿Qué sigue?