It’s pretty easy to exhaust a DB if you have many replicas of a service connecting, each at high concurrency. 20 replicas at 20 connections each is enough to hit limits (like on Cloud SQL for GCP)
As you say, you can write a service to stand in front of the DB and mediate access, but PgBouncer is already written AND production ready