# PgBouncer Configuration - Rendered by Vault Agent # Proxies Kratos connections to PostgreSQL with dynamic Vault credentials {{ with secret "database/creds/nexus-kratos-app" -}} [databases] ; Kratos connects here, PgBouncer uses Vault credentials for PostgreSQL ; connect_query sets search_path since PgBouncer doesn't support it as startup param ; Both 'nexus' and 'kratos' aliases route to the same backend with kratos schema nexus = host=db.example.local port=5432 dbname=nexus user={{ .Data.username }} password={{ .Data.password }} connect_query='SET search_path TO kratos,public' kratos = host=db.example.local port=5432 dbname=nexus user={{ .Data.username }} password={{ .Data.password }} connect_query='SET search_path TO kratos,public' [pgbouncer] listen_addr = 127.0.0.1 listen_port = 6432 unix_socket_dir = /var/run/pgbouncer ; Trust localhost - only local processes can connect ; PgBouncer handles real auth to PostgreSQL with Vault credentials auth_type = trust auth_file = /etc/pgbouncer/userlist.txt ; Connection pooling pool_mode = session max_client_conn = 100 default_pool_size = 20 min_pool_size = 5 reserve_pool_size = 5 ; Timeouts server_connect_timeout = 15 server_idle_timeout = 600 client_idle_timeout = 0 ; Logging logfile = /var/log/pgbouncer/pgbouncer.log log_connections = 1 log_disconnections = 1 log_pooler_errors = 1 ; Admin admin_users = pgbouncer stats_users = pgbouncer ; Pid file for SIGHUP from Vault Agent pidfile = /var/run/pgbouncer/pgbouncer.pid {{- end }}