I have three Spring Boot microservices deployed on Google Cloud Run:
-
API Gateway
-
Ingress:
all -
Publicly accessible
-
-
Service A
-
Returns: “hello from A”
-
Desired ingress:
internal-and-cloud-load-balancing
-
-
Service B
-
Returns: “hello from B and hello from A”
-
Calls Service A internally
-
Desired ingress:
internal-and-cloud-load-balancing
-
My goal is:
-
Only the API Gateway should be exposed to the internet.
-
Services A and B should be internal-only (not publicly reachable).
-
The call flow should be:
API Gateway → Service B → Service A
Problem
When I set Services A and B to ingress = internal-and-cloud-load-balancing, the API Gateway cannot reach them.
I consistently get:
404 Not Found
I initially deployed everything in europe-west1. After reading this related question:
Google Cloud Run 404 Error on internal traffic between services
…I tried deploying in other regions as well, but the issue persists.
I also checked the official documentation:
https://cloud.google.com/run/docs/securing/ingress (cloud.google.com in Bing)
…but I still cannot make API Gateway reach internal Cloud Run services.
What I want to understand
-
Do Cloud Run services with
internal-and-cloud-load-balancingrequire a Shared VPC even if all services are in the same project? -
Do I need a Serverless VPC Connector for API Gateway → Cloud Run internal traffic?
-
Is API Gateway even able to call Cloud Run services that are restricted to internal ingress, or is an additional load balancer required?
Additional context
-
All services are deployed in the same region and same project.
-
When I switch ingress back to
all, everything works as expected.