Kubernetes Traefik/Ngnix-(入口控制器)如何将请求转发到配置了相同端口号的两个不同服务。?

Kubernetes Traefik/Ngnix-(入口控制器)如何将请求转发到配置了相同端口号的两个不同服务。?,kubernetes,docker-compose,traefik,nginx-ingress,traefik-ingress,Kubernetes,Docker Compose,Traefik,Nginx Ingress,Traefik Ingress,基本上,我使用docker compose进行了以下Hdfs群集设置: IP为192.168.1.1的节点1的服务部署如下: Namenode1:9000 HMaster1: 8300 ZooKeeper1:1291 Namenode2:9000 ZooKeeper2:1291 IP为192.168.1.2的节点2的服务部署如下: Namenode1:9000 HMaster1: 8300 ZooKeeper1:1291 Namenode2:9000 ZooKeeper2:1291 Tr

基本上,我使用docker compose进行了以下Hdfs群集设置:

IP为192.168.1.1的节点1的服务部署如下:

Namenode1:9000
HMaster1: 8300
ZooKeeper1:1291
Namenode2:9000
ZooKeeper2:1291
IP为192.168.1.2的节点2的服务部署如下:

Namenode1:9000
HMaster1: 8300
ZooKeeper1:1291
Namenode2:9000
ZooKeeper2:1291

Traefik/Ngnix-(入口控制器)如何将请求转发到配置了相同端口号的两个不同服务?

关于入口和负载平衡在kubernetes中的工作原理,有几个很棒的教程,例如。作为一般规则,它有助于从服务和工作负载的角度来考虑,而不是从运行工作负载的特定节点的角度来考虑

部署在Kubernetes中的工作负载(所谓的
Pod
)有自己的内部IP地址,称为
ClusterIP
。该pod可以在该pod拥有的ip地址上打开一个或多个端口

如果您现在有几个pod来分配负载,例如5个web服务器进程或后端逻辑,那么客户端(集群内)很难跟踪所有这些pod IP,因为它们在pod更新或由于崩溃而重新启动时也会发生变化。这就是为什么Kubernetes有一个所谓的
服务的概念。它们提供了一个稳定的DNS名称和IP,然后透明地“转发”到一个健康的豆荚。因此,您的客户端只需要知道DNS名称,而不需要跟踪特定的pod IP

如果您现在想向公众公开这样的
服务
,有不同的方法。您可以将服务设置为
类型:LoadBalancer
,然后在云提供商上设置一些负载平衡器基础设施,将流量路由到节点,然后路由到POD,或者-您已经有了入口控制器,只需根据主机名和路径定义路由即可。入口控制器本身就是这样一种负载平衡服务,带有连接的云负载平衡器,并且还具有一些POD(例如带有traefik或nginx容器),这些POD随后会相应地路由您的数据包

回到你最初的问题:如果你想公开一个有几个相同类型的pod的服务,然后,您将首先使用
选择器创建一个与您的
Pod
相匹配的
服务
资源,然后创建一个提供主机名/路径并引用此服务的
入口
资源。入口控制器将拾取这些入口资源,并相应地配置traefik或nginx。入口控制器并不真正关心主机IP和端口号,因为它作用于内部kubernetes ClusterIP,所以当您有入口时,您甚至不需要(也不应该)直接公开这样的服务


我希望这能回答您关于通过入口控制器公开两个工作负载的问题。有关详细信息,请查看。基于您命名的服务(zookeeper,hdfs),负载平衡和入口可能不是这种情况所需要的。Zookeeper实例在大多数情况下都应该是内部的,并且需要单独寻址,因此您可能希望签出此用例。另外,还可以查看Kubernetes文档。

有一些关于入口和负载平衡如何在Kubernetes中工作的优秀教程,例如。作为一般规则,它有助于从服务和工作负载的角度来考虑,而不是从运行工作负载的特定节点的角度来考虑

部署在Kubernetes中的工作负载(所谓的
Pod
)有自己的内部IP地址,称为
ClusterIP
。该pod可以在该pod拥有的ip地址上打开一个或多个端口

如果您现在有几个pod来分配负载,例如5个web服务器进程或后端逻辑,那么客户端(集群内)很难跟踪所有这些pod IP,因为它们在pod更新或由于崩溃而重新启动时也会发生变化。这就是为什么Kubernetes有一个所谓的
服务的概念。它们提供了一个稳定的DNS名称和IP,然后透明地“转发”到一个健康的豆荚。因此,您的客户端只需要知道DNS名称,而不需要跟踪特定的pod IP

如果您现在想向公众公开这样的
服务
,有不同的方法。您可以将服务设置为
类型:LoadBalancer
,然后在云提供商上设置一些负载平衡器基础设施,将流量路由到节点,然后路由到POD,或者-您已经有了入口控制器,只需根据主机名和路径定义路由即可。入口控制器本身就是这样一种负载平衡服务,带有连接的云负载平衡器,并且还具有一些POD(例如带有traefik或nginx容器),这些POD随后会相应地路由您的数据包

回到你最初的问题:如果你想公开一个有几个相同类型的pod的服务,然后,您将首先使用
选择器创建一个与您的
Pod
相匹配的
服务
资源,然后创建一个提供主机名/路径并引用此服务的
入口
资源。入口控制器将拾取这些入口资源,并相应地配置traefik或nginx。入口控制器并不真正关心主机IP和端口号,因为它作用于内部kubernetes ClusterIP,所以当您有入口时,您甚至不需要(也不应该)直接公开这样的服务

我希望这能回答您关于通过入口控制器公开两个工作负载的问题。有关详细信息,请查看。基于您命名的服务(zookeeper,hdfs),负载平衡和入口可能不是这种情况所需要的。Zookeeper实例在大多数情况下都应该是内部的,并且需要单独寻址,因此您可能希望签出此用例。还可以查看Kubernetes文档。

我有两个不同的