Round Robin for gRPC (nodejs) on kubernetes with headless service
我有一个3个nodejs grpc服务器Pod和一个grpc服务的无头kubernetes服务(返回所有3个Pod IP以及在Pod内用getent主机测试过的dns)。 但是,所有grpc客户端请求总是最终在单个服务器上结束。
根据https://stackoverflow.com/a/39756233/2952128(最后一段),2017年第一季度每个呼叫应该可以进行轮询。我使用的是grpc 1.1.2
我试图给{"loadBalancingPolicy":"round-robin"}作为new Client(address, credentials, options)的选项,并使用dns:///service:port作为地址。 如果我正确地理解了文档/代码,则应将其归为C核,并使用新实现的循环通道创建。 (https://github.com/grpc/grpc/blob/master/doc/service_config.md)
现在轮流负载均衡器应该如何工作? 它已经随grpc 1.1.2发布了吗?
-
您是否尝试过服务类型:ClusterIP? 它应该与循环兼容。 请记住,一个gRPC客户端可能正在缓存连接,因此,如果仅使用一个客户端进行测试,则可能是由于gRPC所致。
-
是的,我也尝试过。 它的行为相同。 也不确定那是否正确,因为我期望gRPC的客户端Round Robin。 链接。 因为据我所知,正是这个想法拥有许多缓存的打开连接并在每次调用的基础上进行更改。 因此,所有客户端都需要所有IP,这就是我尝试Headless的原因。
在深入研究Grpc-c核心代码和nodejs适配器之后,我发现它可以通过使用选项键"grpc.lb_policy_name"来工作。 因此,使用
1
| new Client(address, credentials, {"grpc.lb_policy_name":"round_robin"}) |
作品。
请注意,在我最初的问题中,我还使用了round-robin而不是正确的round_robin
我仍然不太确定如何使用nodejs从服务端设置serviceConfig,而不是使用客户端(通道)选项覆盖。