GKE 上的 GRPC 负载平衡(在 L7、HTTP/2 + TLS 上)

Posted

技术标签:

【中文标题】GKE 上的 GRPC 负载平衡(在 L7、HTTP/2 + TLS 上)【英文标题】:GRPC load balancing on GKE (on L7, HTTP/2 + TLS) 【发布时间】:2019-02-20 21:46:29 【问题描述】:

如何在 L7 上的 GKE 上为 GRPC 服务进行负载均衡(使用 Ingress over HTTP/2 + TLS)?

我知道我可以选择使用 L4(TCP 层)来配置具有“LoadBalancer”类型的服务。但我想知道是否可以通过 HTTP/2+TLS 使用 Ingress + L7 负载均衡。

我还看到“GKE 不支持到后端的 HTTP/2”。 (在https://cloud.google.com/load-balancing/docs/backend-service#HTTP2-limitations)。但不知道是不是真的。

【问题讨论】:

目前还不支持。您需要稍等片刻才能通过Ingress 进行配置。 :) 但是您可以尝试模仿 Ingress 在 GCP 网络 API 对象上的实际操作,并尝试自己使用 HTTP/2 端口重新创建它,但我不推荐这样做。现在我建议暂时做 L4。 :) @AhmetB-Google 现在可以使用 Ingress 了吗?如果是的话,你会在文档上有一个指针吗?如果没有,您是否有关于 L4 解决方案的文档指针?这将非常有帮助,因为我找不到使用 GKE 和 GRPC + TLS 获得有效解决方案的方法。 【参考方案1】:

当您使用 https 时,GKE Ingress 现在可以load balance with HTTP/2。

要在负载均衡器(入口控制器)和您的 pod 之间获取 HTTP/2,您的服务需要一个额外的注解:

apiVersion: v1
kind: Service
metadata:
  annotations:
    cloud.google.com/app-protocols: '"my-port":"HTTP2"'

此外,您的 pod 大多使用 TLS 并配置了 ALPN h2。这可以做到,例如使用 HAProxy 作为 http2 configuration 的 sidecar。我已在 GKE 上成功使用此设置。

【讨论】:

谢谢,我已经做到了,它正在工作,但我没有在这里写。在尝试了这个解决方案后,我们开始使用 Contour。

以上是关于GKE 上的 GRPC 负载平衡(在 L7、HTTP/2 + TLS 上)的主要内容,如果未能解决你的问题,请参考以下文章

在服务器端输出上禁用 gRPC 负载平衡

Envoy如何打败Linkerd成为L7负载平衡器的最佳选择?

谷歌云负载均衡器 + GKE 入口

即使使用负载平衡器地址,gRPC 客户端也不使用 grpc-lb

ETCD:gRPC代理

grpc v1.34.1 的客户端负载平衡,nameResolverFactory 已弃用