Kubernetes grpc http 2error

Posted

技术标签:

【中文标题】Kubernetes grpc http 2error【英文标题】: 【发布时间】:2020-04-16 07:18:36 【问题描述】:

我在 eks 上部署了一个 grpc 服务,并使用 ingress 公开该服务。我部署了一个演示 https 应用程序,它工作正常。但是,我对 grpc 应用程序有疑问。该服务正在运行,但是当我记录该服务时出现错误。 grpc 请求甚至没有发送到服务器。日志如下

level=info msg="grpc: Server.Serve 未能创建 ServerTransport: 连接错误:desc = \"传输:http2Server.HandleStreams 收到来自客户端的虚假问候:\\"GET / HTTP/1.1\\r\\nHost: 19\\"\"" 系统=系统

它似乎应该接收http2,但它只有HTTP/1.1??

对于入口我尝试了

    alb.ingress.kubernetes.io/listen-ports: '["HTTP": 80, "HTTPS":443]'
    alb.ingress.kubernetes.io/actions.ssl-redirect: '"Type": "redirect", "RedirectConfig":  "Protocol": "HTTPS", "Port": "443", "StatusCode": "HTTP_301"'
    alb.ingress.kubernetes.io/certificate-arn: arn:aws:acm:xxxx
    alb.ingress.kubernetes.io/load-balancer-attributes: 'routing.http2.enabled=true'

对于 service.yml

  annotations:
    service.alpha.kubernetes.io/app-protocols: '"grpc":"HTTP2", "http": "HTTP2"'

对于部署的服务,它似乎很好。一旦我部署了入口,它就会一直出现上述错误。

【问题讨论】:

将您的解决方案发布为答案并将其标记为已接受的答案。 【参考方案1】:

不确定 Ingress 是否支持 HTTP2/gRPC。如果你使用 GKE,你可以试试ESP

【讨论】:

看来 alb 不支持 http2 github.com/kubernetes-sigs/aws-alb-ingress-controller/issues/… 谢谢【参考方案2】:

我使用 Istio 服务网格来解决这个问题。 Istio 虚拟服务可以路由 HTTP1.1 HTTP2 GRPC 流量 通过将服务端口名称设置为 grpc 或使用 grpc- 作为前缀。 Istio 将使用 HTTP2 协议配置服务

【讨论】:

以上是关于Kubernetes grpc http 2error的主要内容,如果未能解决你的问题,请参考以下文章

gRPC的平滑关闭和在Kubernetes上的服务摘流方案总结

JSON RPC 与 HTTP2 与 grpc 有啥区别?

gRPC系列:实际场景中的grpc,kubernetes容器运行时接口

基于Go/Grpc/kubernetes/Istio开发微服务的最佳实践尝试

使用 gRPC 微服务和 Kubernetes 进行路由

gRPC GoLang Test