gRPC's hosting requirement: HTTP/2, end to end
gRPC is built on HTTP/2 with protobuf, giving you fast, strongly typed, streaming RPC. The catch for hosting is that HTTP/2 must be preserved end to end. Many load balancers and proxies terminate HTTP/2 and downgrade to HTTP/1.1 to your backend, which silently breaks gRPC. Add bidirectional streaming and the fact that browsers can't speak raw gRPC (you need gRPC-Web or Connect), and you have a few specific requirements your host must meet.
What matters for gRPC
- HTTP/2 passthrough at the ingress/load balancer (cleartext h2c or h2 to the backend).
- No idle-timeout surprises for long-lived streaming RPCs.
- gRPC-Web or Connect support if browsers are clients.
- TLS/ALPN negotiating h2 correctly.
- Health checking via the gRPC health protocol.
The options
| Platform | HTTP/2 to backend | Streaming | gRPC-Web path | Notes |
|---|---|---|---|---|
| Google Cloud Run | Yes (h2c) | Yes | Via proxy | Good native gRPC support |
| AWS (ALB/NLB + ECS) | ALB supports gRPC | Yes | Envoy proxy | Configurable |
| Fly.io | Yes | Yes | DIY | Edge VMs |
| Kubernetes + Envoy/Linkerd | Yes | Yes | Envoy gRPC-Web | Full control |
| PandaStack | Yes (Kong/GKE) | Yes | Via gRPC-Web proxy | App + managed DB |
Cloud Run and Kubernetes
Google Cloud Run has solid native gRPC support, including h2c to your container — a clean managed option. On Kubernetes, Envoy or Linkerd handle gRPC load balancing properly (plain L4 round-robin breaks gRPC's connection reuse, so you want an L7-aware proxy or a service mesh). AWS ALB added gRPC target support, making ECS a viable path with the right config.
Where PandaStack fits
PandaStack runs gRPC services as containers on GKE behind Kong ingress, which supports HTTP/2, so your gRPC traffic reaches the backend over HTTP/2 rather than being downgraded. Deploy your server (Go, Rust/tonic, Java, Node, Python) as a container, attach a managed Postgres/MySQL with DATABASE_URL injected, and you have a typed RPC service with a database in one place:
# Go gRPC server
FROM golang:1 AS build
WORKDIR /src
COPY . .
RUN CGO_ENABLED=0 go build -o /server ./cmd/server
FROM gcr.io/distroless/static
COPY --from=build /server /server
ENV PORT=50051
EXPOSE 50051
ENTRYPOINT ["/server"]You also get live logs, server-side metrics, rollbacks, deploy history, custom domains, and automatic SSL. For streaming RPCs in production, run a warm instance so long-lived streams aren't interrupted by free-tier scale-to-zero.
Honest, specific guidance:
- Browser clients need gRPC-Web or Connect. Browsers can't call raw gRPC, so run a gRPC-Web translation layer (Envoy's gRPC-Web filter, or the Connect protocol which speaks both) — either as a sidecar pattern or by adopting Connect, which works over HTTP/1.1 and HTTP/2 and simplifies this a lot.
- Avoid free-tier scale-to-zero for streaming services — keep an instance warm.
- For internal service-to-service gRPC at scale with client-side load balancing, a dedicated mesh (Linkerd/Istio) gives finer control than a single ingress; PandaStack is ideal for north-south gRPC (clients calling your service) and standard internal calls.
Tip: consider Connect
If gRPC's proxy gymnastics frustrate you, the Connect protocol (from the buf ecosystem) speaks gRPC, gRPC-Web, and its own HTTP-friendly protocol from one server — it works cleanly behind ordinary HTTP proxies and is browser-friendly without a separate gRPC-Web layer. It's often the pragmatic choice on general app platforms.
Decision guide
- Managed, GCP-native gRPC → Cloud Run.
- Mesh-level control for internal RPC → Kubernetes + Linkerd/Istio.
- gRPC service + managed DB on one platform → PandaStack (warm for streaming; Connect for browsers).
References
- gRPC docs: https://grpc.io/docs/
- gRPC-Web: https://github.com/grpc/grpc-web
- Connect protocol (buf): https://connectrpc.com/docs/
- Envoy gRPC: https://www.envoyproxy.io/docs/envoy/latest/intro/arch_overview/http/grpc
- Cloud Run gRPC: https://cloud.google.com/run/docs/triggering/grpc
---
Shipping a gRPC service? PandaStack runs it on GKE over HTTP/2 with a managed database wired in — use Connect for browser clients and keep streaming services warm. Start free at https://dashboard.pandastack.io