Estoy ejecutando un clúster de Kubernetes en una nube pública (Azure / AWS / Google Cloud), y tengo algunos servicios que no son HTTP que me gustaría exponer para los usuarios.
Para los servicios HTTP, normalmente usaría un recurso Ingress para exponer ese servicio públicamente a través de una entrada DNS direccionable.
Para servicios no basados en HTTP, basados en TCP (por ejemplo, una base de datos como PostgreSQL), ¿cómo debo exponerlos para el consumo público?
Pensé en usar los NodePort
servicios, pero esto requiere que los nodos sean accesibles públicamente (confiando en la kube-proxy
ruta al nodo apropiado). Prefiero evitar esto si es posible.
LoadBalancer
Los servicios parecen otra opción, aunque no quiero crear un equilibrador de carga en la nube dedicado para cada servicio TCP que quiero exponer.
Soy consciente de que el controlador NGINX Ingress admite la exposición de servicios TCP y UDP , pero eso parece requerir una definición estática de los servicios que le gustaría exponer. Para mi caso de uso, estos servicios se crean y destruyen dinámicamente, por lo que no es posible definir estas asignaciones de servicios por adelantado en una estática ConfigMap
.