Exposición de un punto final del servicio TCP K8s a Internet público sin un equilibrador de carga

Así que estoy trabajando en un proyecto que implica administrar muchas instancias de postgres dentro de un clúster k8s. Cada instancia se gestiona utilizando unaStateful Set con unService para la comunicación de red. Necesito exponer cadaService al Internet público a través de DNS en el puerto 5432.

El enfoque más natural aquí es usar los k8sLoad Balancer recurso y algo así como dns externos para asignar dinámicamente un nombre DNS a un punto final del equilibrador de carga. Esto es excelente para muchos tipos de servicios, pero para las bases de datos hay una limitación masiva: el idle timeout de conexión. Los AWS ELB tienen un límite de tiempo de inactividad máximo de 4000 segundos. Hay muchas consultas / transacciones analíticas de larga duración que exceden fácilmente esa cantidad de tiempo, sin mencionar las operaciones potencialmente de larga duración comopg_restore.

Así que necesito algún tipo de solución que me permita evitar las limitaciones de los equilibradores de carga. @Node IPs están fuera de discusión ya que necesitaré el puerto5432 expuesto para cada instancia de postgres en el clúster. @Ingress también parece menos que ideal ya que es un proxy de capa 7 que solo admite HTTP / HTTPS. He visto soluciones alternativas con nginx-ingress que involucran algunas trampas de mapas de configuración, pero estoy un poco preocupado por comprometerme a hackear así para un proyecto grande. @ExternalName es intrigante, pero incluso si puedo encontrar una mejor documentación, creo que puede terminar teniendo limitaciones similares aNodeIP.

Cualquier sugerencia sería muy apreciada.

Respuestas a la pregunta(2)

Su respuesta a la pregunta