如果我有一个 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,会比较慢。
|--> 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,会比较慢。