Configura la reescritura de URL para balanceadores de cargas de HTTP(S) externos

En este ejemplo, se muestra cómo reescribir la ruta de acceso especificada en una solicitud.

Antes de comenzar

  • Obtén información sobre las reescrituras de URL.

  • Obtén información sobre los mapas de URL en general y los comparadores de rutas de acceso en particular.

  • En el ejemplo de reescritura de URL, se supone que ya creaste un balanceador de cargas de HTTP(S) externo mediante los pasos que se describen en Configura un balanceador de cargas con depósitos de Cloud Storage.

    Ese ejemplo te guía en la creación de dos recursos:

    • http://IP_ADDRESS/never-fetch/three-cats.jpg
    • http://IP_ADDRESS/love-to-fetch/two-dogs.jpg

    En estos casos, /never-fetch/three-cats.jpg se almacena en /cats, que es el servicio predeterminado, y /love-to-fetch/two-dogs.jpg se almacena en /dogs.

    En este punto, el mapa de URL se ve de la siguiente manera:

    gcloud compute url-maps describe http-lb
    
    creationTimestamp: '2020-10-13T11:18:10.561-07:00'
    defaultService: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendBuckets/cats
    fingerprint: MKfYsObzqgw=
    hostRules:
    - hosts:
      - '*'
      pathMatcher: path-matcher-1
    id: '1420501688756228493'
    kind: compute#urlMap
    name: test-bucket
    pathMatchers:
    - defaultService: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendBuckets/cats
      name: path-matcher-1
      pathRules:
      - paths:
        - /love-to-fetch/*
        service: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendBuckets/dogs
    selfLink: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/urlMaps/http-lb
    

Modifica el mapa de URL

En este ejemplo, reescribes la URL /love-to-fetch/ para que los usuarios puedan llegar a la imagen two-dogs.jpg con esta URL simplificada:

  • http://IP_ADDRESS/two-dogs.jpg

Para ello, debes modificar el mapa de URL del balanceador de cargas de la siguiente manera:

Console

Edita tu balanceador de cargas

  1. Ve a la página Balanceo de cargas en Google Cloud Console.
    Ir a la página Balanceo de cargas
  2. Haz clic en http-lb.
  3. Haz clic en Editar .
  4. Mantén la ventana abierta para continuar.

Cambia las reglas de host y ruta de acceso

  1. En la columna izquierda de la pantalla, haz clic en Reglas de host y ruta de acceso.
  2. Selecciona Regla avanzada de host y de ruta de acceso (redireccionamiento y reescritura de URL).
  3. Haz clic en la fila que contiene la regla de ruta no predeterminada, en este caso, la fila que tiene un asterisco (*) para todos los hosts.
  4. Haz clic en el ícono de lápiz  para la fila /love-to-fetch/* Route traffic to a single backend: dogs.
  5. En Rutas de acceso, borra /love-to-fetch/* y agrega /*.
  6. En Acción, selecciona Enrutar el tráfico a un solo backend.
  7. Haz clic en Acción de complemento (reescritura de URL).
  8. Deja en blanco Reescritura del host.
  9. En Reescritura de prefijo de ruta de acceso, ingresa /love-to-fetch/.
  10. En Backend, selecciona dogs.
  11. Haz clic en Guardar.
  12. Haz clic en Listo. La regla de host y ruta de acceso nueva se verá de la siguiente manera:

    Rutas de acceso Acción Backend
    Cualquiera que no coincida (predeterminado) Enrutar el tráfico a un solo backend cats
    /* Enrutar el tráfico a un solo backend dogs

  13. Si todo parece correcto, haz clic en Actualizar para actualizar el balanceador de cargas de HTTP.

gcloud

  1. Crea un archivo /tmp/http-lb.yaml YAML y asegúrate de reemplazar PROJECT_ID por el ID del proyecto.

    Cuando un usuario solicita el /* de la ruta de acceso, la ruta se reescribe en el backend a la ubicación real del contenido, que es /love-to-fetch/*.

    defaultService: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendBuckets/cats
    hostRules:
    - hosts:
      - '*'
      pathMatcher: path-matcher-1
    name: http-lb
    pathMatchers:
    - defaultService: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendBuckets/cats
      name: path-matcher-1
      pathRules:
      - paths:
        - /*
        routeAction:
          urlRewrite:
            pathPrefixRewrite: /love-to-fetch/
        service: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendBuckets/dogs
    tests:
    - description: Test routing to backend bucket, dogs
      host: example.com
      path: /love-to-fetch/test
      service: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendBuckets/dogs
    
  2. Valida el mapa de URL.

    gcloud compute url-maps validate --source /tmp/http-lb.yaml
    

    Si las pruebas pasan y el comando genera un mensaje de éxito, guarda los cambios en el mapa de URL.

  3. Actualiza el mapa de URL.

    gcloud compute url-maps import http-lb \
       --source /tmp/http-lb.yaml \
       --global
    

Realiza pruebas

Toma nota de la dirección IPv4 que se reservó:

gcloud compute addresses describe example-ip \
    --format="get(address)" \
    --global

Después de esperar varios minutos para que los cambios se propaguen, puedes probar esta configuración.

En la línea de comandos, ejecuta el siguiente comando curl:

curl http://IP_ADDRESS/two-dogs.jpg

En un navegador, abre http://IP_ADDRESS/two-dogs.jpg.

¿Qué sigue?