进入 ClusterIP 的入口路由连接和 Kubernetes 中的 Headless 服务有什么区别?

What is the different between ingress route connection into ClusterIP and Headless service in Kubernetes?

我知道 ClusterIPHeadless 服务的基本概念。

我认为关键的区别在于 ClusterIP 通过应用一些 iptable 规则在底层 pods 之间进行某种负载平衡。
然后 Headless 只是在 DNS 中注册的 pods 的 IP 地址列表。

我的问题是,如果 ClusterIP 执行“负载平衡”工作,是否意味着入口控制器只执行路由而不执行负载平衡?
如果使用 Headless 作为服务类型,我可以配置入口控制器并让它接管负载平衡工作吗?

谢谢。

服务通过 select 或标签向其注册的所有 pods 映射,并向 pods 中的任何一个发送流量,只需要与其通信仅服务,它将 select 一些 pod 将请求路由到,而无头服务与 clusterIP 完全不同,因此它仅使用 Pod 的 IP,有机会与 pods.

直接通信

假设您部署了一组 Kafka 代理,并且您想要获取有关一个代理中的主题的信息,那么您可以通过无头服务来实现。

现在,为了让这些 pods 与外部世界对话,它们需要暴露给负载均衡器层,入口的作用是将域 URL 映射到后端服务,并且只有 ingress 的服务暴露在负载均衡器层,其余的留在引擎盖下。

这样做的好处是,您可以将防火墙规则附加到入口,URL可以进行重写,可以实现粘性会话,即服务不能提供这样的东西。

And my question is, if ClusterIP do the "load balancing" job, does that mean the ingress controller just do the routing but not load balancing?

AFAIK,Ingress 公开某些 Services,并将外部请求路由到多个 Services。它通常与负载平衡器层集成以处理外部请求,但它不仅仅用于负载平衡。

What if using Headless as the service type, can I configure the ingress controller and let it take over the load balancing job?

Headless的用例中,它专为负载平衡和事务管理方面的自我管理应用程序而设计。有时,Kubernetes 上的 clusterIP 负载平衡不适合已经具有相同功能的应用程序或中间件。