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 上)的主要内容,如果未能解决你的问题,请参考以下文章
Envoy如何打败Linkerd成为L7负载平衡器的最佳选择?