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 NodePort
serviços, mas isso exige que os nós estejam acessíveis publicamente (contando com kube-proxy
a rota para o nó apropriado). Eu preferiria evitar isso, se possível.
LoadBalancer
os 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
.