Estou executando um cluster Kubernetes em uma nuvem pública (Azure / AWS / Google Cloud) e tenho alguns serviços não HTTP que gostaria de expor para os usuários.
Para serviços HTTP, normalmente eu usaria um recurso do Ingress para expor esse serviço publicamente através de uma entrada DNS endereçável.
Para serviços não HTTP, baseados em TCP (por exemplo, um banco de dados como o PostgreSQL), como devo expô-los ao consumo público?
Eu considerei usar NodePortserviços, mas isso exige que os nós estejam acessíveis publicamente (contando com kube-proxya rota para o nó apropriado). Eu preferiria evitar isso, se possível.
LoadBalanceros serviços parecem outra opção, embora eu não queira criar um balanceador de carga em nuvem dedicado para cada serviço TCP que quero expor.
Estou ciente de que o controlador NGINX Ingress suporta a exposição de serviços TCP e UDP , mas isso parece exigir uma definição estática dos serviços que você deseja expor. Para o meu caso de uso, esses serviços estão sendo criados e destruídos dinamicamente, portanto, não é possível definir esses mapeamentos de serviço antecipadamente em uma estática ConfigMap.