Lo que quiero poder hacer es conectarme a un servidor postgres como este:
psql -h postgres-a.example.com -p 9000
Esa conexión debe recibirla un servidor proxy (como nginx o haproxy) y se redirigirá a la base de datos A debido al nombre de host postgres-a.example.com . Si uso postgres-b.example.com y el mismo puerto, debería ir a la base de datos B.
He estado investigando esto, pero todavía no estoy 100% seguro de cómo funcionaría. Leí que la única forma de redirigir una conexión TCP (psql) basada en el nombre de host es usar el encabezado SNI. Pero todavía no entiendo si necesitaremos un certificado SSL para esto, o si necesitaremos usar https://postgres-a.example.com (Eso no tiene ningún sentido para mí). ¿Cómo funcionará?
¿Puede alguien ayudarme a entender esto?
Sí. Necesitará un certificado para TLS/SSL y puede enrutar las solicitudes en función de req.ssl_sni al backend adecuado.
No estoy seguro de si psql usa SNI, pero creo que esto debe verificarlo.
frontend public_ssl bind :::9000 v4v6 crt /usr/local/etc/haproxy-certs option tcplog tcp-request inspect-delay 5s tcp-request content accept if { req.ssl_hello_type 1 } use-server postgres-a if { req.ssl_sni -i postgres-a.example.com } use-server postgres-b if { req.ssl_sni -i postgres-b.example.com } backend postgres-a server postgres-a FURTHER SERVER PARAMS backend postgres-b server postgres-b FURTHER SERVER PARAMS He creado una publicación de blog con una imagen para una descripción más detallada.
https://www.me2digital.com/blog/2019/05/haproxy-sni-routing/