2017-04-13 55 views
2

我有一個3 nodejs grpc服務器pod和grpc服務的無頭kubernetes服務(返回所有3個pod ips,並且使用從pod內的getent主機測試的dns)。但是,所有grpc客戶端請求總是在單個服務器上結束。對無服務的kubernetes上的gRPC(nodejs)進行循環播放

根據https://stackoverflow.com/a/39756233/2952128(最後一段)每次通話循環賽應該是可能的2017年第一季度,我使用GRPC 1.1.2

我試着給{"loadBalancingPolicy": "round-robin"}new Client(address, credentials, options)選擇和使用dns:///service:port的地址。如果我正確理解文檔/代碼,則應將其傳遞到c-core並使用新實現的循環信道創建。 (https://github.com/grpc/grpc/blob/master/doc/service_config.md

這是怎麼循環負載平衡器現在應該工作?它是否已經與grpc 1.1.2一起發佈?

+0

您是否嘗試過服務類型:ClusterIP?它應該適用於循環法。請記住,gRPC客戶端可能會緩存連接,所以如果您僅使用一個客戶端進行測試,那麼可能是因爲gRPC。 –

+0

是的,我也嘗試過。它的行爲相同。也不確定這是否正確,因爲我期待gRPC的客戶端循環賽。 [鏈接](https://github.com/grpc/grpc/blob/master/doc/load-balancing.md)。因爲根據我的理解,這正是想要擁有許多緩存的開放式連接並在每次調用的基礎上進行更改。所以所有的客戶都需要所有的IPs,這就是爲什麼我嘗試了無頭。 – FibHeap

回答

3

在深入研究Grpc-c核心代碼和nodejs適配器之後,我發現它使用選項密鑰"grpc.lb_policy_name"。因此,構建gRPC客戶端的方式有

new Client(address, credentials, {"grpc.lb_policy_name": "round_robin"}) 

有效。 注意,在我原來的問題我也用round-robin而不是正確round_robin

我還沒有完全確定如何從服務端用的的NodeJS而不是使用客戶端(通道)選項覆蓋設置serviceConfig