I was wondering if any of you know how to achieve that a GCP load balancer redirect to an url with "CORS enabled". What do I mean by that?, well I have the following scenario:
So my flow is as follow:
This works as expected if requested by a simple HTTP Request
(like cURL or Postman) but fails if its requested on a website. Why?, because the preflight OPTIONS
request is redirected and that brings a CORS error Redirect is not allowed for a preflight request
, and even if the OPTIONS
request is skipped, a simple GET
request will also have a redirected
response without the CORS headers (which will fail).
Is this possible?, if so how can I achieve it?, I tried to add a cors policy on LB A but a LB can't have a routeAction
with a urlRedirect
.
Practically I just want to inject the CORS headers on the 301 Response to avoid the error.
After a long time searching for a solution I finally got to a "working" conclusion.
If you want that a google's load balancer inject some headers (specially cors headers) on a request thats redirected to another domain, then you are out of luck (also mentioned here). Even with the new LB version it seems that is not possible (at the moment, am sure this feature will release in some time). Maybe there is a way of doing it, but neither the docs nor the api seems to tell you how.
Then you just "can't" do this?. Well, no, the classic
load balancer has something call an Internet NEG
which is like having "external backends" you can point to, so I just create various NEGs to meet my needs and attach them in the LB as backends. So I accomplish my example as follow:
If LB B has the domain lb-b.com and LB C has lb-c.com
full domain name
as lb-b.com and lb-c.com respectiblyThen create 2 backend services on LB A with each one associated with each NEG.
Finally select Advanced host and path rule
and create one Path rule
for each LB, for example for LB B:
/pathB/*
Route traffic to a single backend
/
(if you want to "remove" the pathB
prefix on the forward)