如果我有一个 public 负载平衡器,直接的服务到服务通信如何实现负载平衡?

If I have a public load balancer, how does direct service-to-service communication get load balanced?

                                  |--> service1:8081 --> pod1-a, pod1-b, pod1-c
   UI -> load balancer -> ingress (mydomain.com)
                                  |--> service2:8082 --> pod2-a, pod2-b, pod2-c

所以从 service1 开始,我可以直接用 http://service2:8082 调用 service2,但是由于这不是通过 UI -> 负载均衡器完成的,所以如何这得到负载平衡?我不应该直接调用 service2 而是通过 mydomain.com/service2 调用它,这样它就必须通过流程吗?

如果绕过入口,即直接从 service1 调用 http://service2:8082,Kubernetes 会根据默认 Proxy-mode: iptables.

选择一个随机后端

如果您使用 ipvs 之类的东西,您可以稍微调整一下。比如设置循环。

如果您只想循环,也可以使用旧的 Proxy-mode: userspace

所有这些选项都可以使用 kube-proxy 上的 -proxy-mode ProxyMode 标志进行配置。

从另一个服务调用一个服务将命中节点上的 iptable 路由并选择服务端点以将流量路由到。这样会更快。

如果通过 mydomain.com/service2 调用,那么流量会经过额外的 L7 ingress,会比较慢。