当前位置: 首页 > 知识库问答 >
问题:

如何在Kubernetes中公开非HTTP、TCP服务?

范安歌
2023-03-14

我正在公有云(Azure/AWS/Google cloud)中运行一个Kubernetes集群,我有一些非HTTP服务要为用户公开。

对于HTTP服务,Id通常使用Ingress资源通过可寻址的DNS条目公开地公开该服务。

对于非HTTP、基于TCP的服务(例如,诸如PostgreSQL之类的数据库),我应该如何公开这些服务以供公共使用?

我考虑过使用nodeport服务,但这要求节点本身可以公开访问(依赖kube-proxy路由到适当的节点)。如果可能的话,我更愿意避免这件事。

LoadBalancer服务似乎是另一种选择,尽管我不想为我要公开的每个TCP服务创建一个专用的云负载均衡器。

我知道NGINX Ingress controller支持公开TCP和UDP服务,但这似乎需要对要公开的服务进行静态定义。对于我的用例,这些服务是动态创建和销毁的,因此不可能在静态configmap中预先定义这些服务映射。

共有2个答案

宿建本
2023-03-14

对于非HTTP、基于TCP的服务(例如,诸如PostgreSQL之类的数据库),我应该如何公开这些服务以供公共使用?

这取决于您期望最终用户如何处理这些服务?正如您指出的,有了入口,就有可能使用虚拟主机将所有请求路由到同一个入口控制器,然后使用host:头在集群内分派。

对于TCP服务(如PostgreSQL)来说,没有这样的头。因此,您必须使用基于IP的机制,或者在面向Internet的IP上为每一个都分配一个专用端口

如果您的客户机知道IPv6,那么考虑到IPv6提供的绝对巨大的IP空间,为每个服务分配专用的IP地址是绝对合理的。但除此之外,您需要转动两个旋钮:IP和端口。

然后,如何在集群内将这些连接路由到正确的服务将取决于如何解决第一个问题

夏青青
2023-03-14

也许这个工作流程可以提供帮助:

(我做的假设是云提供商是AWS)

>

  • AWS控制台:创建一个隔离的VPC并创建您的Kubernetes ec2实例(或自动缩放组),禁用公共IP的创建。这使得无法从Internet访问该实例,您仍然可以通过专用IP(ex,172.30.1.10)通过Site2站点VPN或通过具有公共IP的同一VPC中的辅助ec2实例进行访问。

    Kubernetes:创建一个具有固定节点端口的服务(例如Postgres的35432)。

    AWS控制台:在节点的同一VPC中创建一个经典的o Layer 4 Loadblancer,在Listeners选项卡中打开端口35432(以及您可能需要的其他端口),通过“目标组”指向您的一个或所有节点。端口数量不收费。

    在这一点上,我不知道如何自动更新负载均衡器的目标组中的当前活动节点,这可能是一个自动缩放功能的问题,如果有的话...也许是一个带有bash脚本的Cron作业,从AWS API中提取信息并更新目标组?

  •  类似资料:
    • 我正在尝试公开公共IPv6地址上的kubernetes TCP服务。应用程序在IPv4上运行良好,但我无法在IPv6上配置它。问题是这不是HTTP服务。当前服务按类型完成:非标准端口11042上的LoadBalancer。所以我认为它创建了网络负载均衡器。 支持IPv6的文档转发规则如下:目标HTTP代理目标HTTPS代理、目标SSL代理、目标TCP代理,但TCP代理已关闭可使用的端口列表。我也尝

    • 用库伯涅茨-Kafka作为迷你库伯的起点。 这使用StatefulSet和headless服务在集群内进行服务发现。 我们的目标是对外展示各个Kafka经纪人,其内部地址为: 限制是这个外部服务能够专门针对经纪人。 做这件事的正确(或一种可能)方法是什么?是否可以通过< code > Kafka-x . broker . Kafka . SVC . cluster . local:9092 公开外

    • 我试图更多地了解服务在Kubernetes中是如何工作的。以这个示例yaml文件为例。 另外,如果我必须从k8集群中的另一个吊舱B访问吊舱landoopkafka的端口8081,我如何访问它? 太感谢你了。

    • 什么是port和targetport? 是否为每个代理设置LoadBalancer服务? 这些多个代理是否映射到cloud LB的单个公共IP地址? K8S/Cloud之外的服务如何访问单个代理?通过使用?或者使用?。还有,这里用的是哪个端口?还是? 如何在Kafka Broker的属性中指定此配置?对于k8s集群内部和外部的服务,As端口可能不同。 请帮忙。

    • 我在一个基于OpenStack的私有云上有一个Kubernetes集群。需要在特定端口上公开我的服务。我可以使用Nodeport来完成此操作。但是,如果我尝试创建与第一个类似的另一个服务,我将无法公开它,因为我必须使用相同的端口,并且它已经被第一个服务占用了。 我注意到我可以在公共云中使用LoadBalancer,但我假设这在OpenStack中是不可能的?我也尝试使用Kubernetes的Ing