首页 文章

istio grpc负载 balancer 外网

提问于
浏览
0

仅仅为了上下文,我有这个设置:

istio mesh                    external service
          grpc            |        grpc                     2 * istances
app:client -> envoy ->    |     aws classic load balance -> app:server

我有两个示例应用程序(客户端和服务器),客户端通过grpc持久连接向服务器发送请求,服务器返回其私有IP .

我使它工作,但客户端总是向同一个应用程序发送请求,而不是在它的两个实例之间循环 .

如果场景发生在网格中,则循环可以工作,但不是ouside . 我试图查看文档来查找内容,但这些示例都是关于mysql服务器的 .

我在没有istio的情况下进行了测试,只有应用程序将其连接指向envoy(使用envoy配置为代理与aws elb的连接)并且循环发生了 . 我不知道为什么当istio控制流量时不会发生这种情况 .

问题是,有没有人知道如何在istio中为外部服务循环grpc请求(相同的连接)?

谢谢

1 回答

  • 0

    gRPC通过利用http / 2并通过持久TCP连接发出多个请求来工作 . 因为这种基于简单连接的负载 balancer 不像HTTP1.1请求那样工作 .

    我完全确定你的情况发生了什么,但可能是你的Istio Egress网关正在 Build 一个单独的TCP连接到ELB,它也与ELB后面的一个实例 Build 了一个TCP连接 . . 然后所有请求都通过该连接 . 据我所知,ELB不能正确支持HTTP / 2,因此可能是某些协议丢弃或导致结果的其他机制 .

    在修复它方面你有几个我能想到的选择(免责声明,我没有必要这样做,所以理论上):

    • 较新的ALB(应用程序负载均衡器,而不是旧的ELB)支持HTTP / 2,因此如果它与所有后端节点 Build 持久连接并且知道如何在它们之间对这些http / 2请求进行负载 balancer ,则可能以您需要的方式运行

    • 完全删除AWS负载均衡器,而是为EC2节点提供可互联网地址的IP地址(带有公共地址的ENI),在公共DNS中注册这些地址,然后使用能够在这些主机上执行负载均衡的gRPC客户端库 . 客户端

    请阅读此内容以获得更深入的解释:https://kubernetes.io/blog/2018/11/07/grpc-load-balancing-on-kubernetes-without-tears/

    编辑:此线程表示ALB以gRPC需要的方式“'t work '”,虽然信息大约是一年:https://groups.google.com/forum/#!topic/grpc-io/8s7UHY_Q1po

相关问题