cjh*_*ell 8 cloud networking tcp kubernetes
我正在公共云(Azure / AWS / Google Cloud)中运行Kubernetes集群,并且我想向用户提供一些非HTTP服务。
对于HTTP服务,我通常会使用Ingress资源通过可寻址的DNS条目公开公开该服务。
对于非HTTP,基于TCP的服务(例如PostgreSQL之类的数据库),我应该如何公开这些服务以供公众使用?
我考虑过使用NodePort服务,但这要求节点本身是可公开访问的(依赖于kube-proxy路由到适当的节点)。如果可能的话,我宁愿避免这种情况。
LoadBalancer服务似乎是另一个选择,尽管我不想为要公开的每个 TCP服务创建专用的云负载平衡器。
我知道NGINX Ingress控制器支持公开TCP和UDP服务,但这似乎需要静态定义要公开的服务。就我的用例而言,这些服务是动态创建和销毁的,因此不可能在static中预先定义这些服务映射ConfigMap。
对于非 HTTP、基于 TCP 的服务(例如 PostgreSQL 等数据库),我应该如何公开这些服务以供公众使用?
好吧,这取决于您期望最终用户如何处理这些服务?正如您所指出的,通过 Ingress,可以使用虚拟托管将所有请求路由到同一个 Ingress 控制器,然后使用标Host:头在集群内进行分派。
对于 TCP 服务,例如 PostgreSQL,没有这样的标头。因此,您必须拥有一种基于 IP 的机制,或者在面向 Internet 的 IP 上为每个机制分配一个专用端口
如果您的客户了解 IPv6,考虑到 IPv6 提供的绝对庞大的 IP 空间,为每个服务分配专用 IP 地址是绝对合理的。但除此之外,您还有两个旋钮需要转动:IP 和端口。
从那里开始,如何将集群内的这些连接路由到正确的服务将取决于您如何解决第一个问题
| 归档时间: |
|
| 查看次数: |
144 次 |
| 最近记录: |