我在公共云(Azure/AWS/Google Cloud)上运行一个Kubernetes集群,有一些非HTTP服务我想要向用户暴露。
对于HTTP服务,我通常会使用Ingress资源通过可寻址的DNS条目将该服务公开。
针对非HTTP、基于TCP协议的服务(例如PostgreSQL数据库),我应该如何向公众公开这些服务呢?
我考虑使用NodePort
服务,但这需要节点本身是公开可访问的(依赖kube-proxy路由到适当的节点)。如果可能的话,我希望避免这种情况。
LoadBalancer
服务似乎是另一个选择,但我不想为我想要暴露的每个TCP服务创建专用的云负载均衡器。
我知道NGINX Ingress控制器支持公开TCP和UDP服务,但那似乎需要静态定义你想要公开的服务。对于我的用例,这些服务是动态创建和销毁的,因此无法事先在静态ConfigMap
中定义这些服务映射。