mTLS topology Akira
Canonical pattern
Akira usa mTLS per segmenti quando esiste un intermediary canonico:
Backend / workers
|
| TLS + client certificate
v
PgBouncer
|
| TLS + client certificate
v
PostgreSQL
PgBouncer resta parte della trust zone stateful e non viene bypassato per il
traffico applicativo ordinario. Il backend, i worker e i job async continuano a
usare PgBouncer sulla porta 6432; PgBouncer apre connessioni TLS proprie verso
PostgreSQL 5432.
Rationale
- PgBouncer e' un connection pooler trusted intermediary: termina la sessione client e apre sessioni server separate verso PostgreSQL.
- True end-to-end mTLS backend -> PostgreSQL e' incompatibile con il pooling in transaction mode, perche' PgBouncer deve vedere SQL plaintext per multiplexing e gestione delle transazioni.
- Il placement corrente co-loca PgBouncer sui nodi DB, dentro il tier stateful raggiungibile via Tailscale.
- Il beneficio operativo di PgBouncer, incluso il capacity gain documentato in TASK-170, prevale sulla purezza di un collegamento diretto backend -> database.
Non-pattern
Non usare un bypass sistematico di PgBouncer per ottenere mTLS diretto backend -> PostgreSQL nel pilot. Quel pattern perderebbe il pooling in transaction mode e sposterebbe la gestione delle connessioni sui processi applicativi.
Le DSN dirette verso PostgreSQL 5432 restano ammesse per migration, DBA task e
operazioni che richiedono una sessione Postgres stabile, come documentato in
docs/architecture/connection-pooling.md.
Service identity
step-ca emette certificati leaf separati per i ruoli interni:
backend.crtper backend e client applicativi su management;pgbouncer.crtper PgBouncer come client verso PostgreSQL e server verso i client applicativi;postgres.crtper PostgreSQL server TLS;- certificati dedicati per NATS, worker e bridge quando parlano con NATS o database.
Il controllo mTLS autentica ogni hop. Non promette cifratura applicativa end-to-end attraverso PgBouncer.