首页 > 解决方案 > 使用 traefik 的 Grpc 负载平衡不起作用

问题描述

我希望使用 traefik 作为 grpc 负载均衡。这是 traefik.toml 文件配置。

logLevel = "INFO"
[entryPoints]
[entryPoints.http]
   address = ":2525"

[file]
   [backends]
      [backends.backend1]
         [backends.backend1.servers.server1]
            url = "http://localhost:6565"
            weight = 10

   [frontends]
      [frontends.frontend1]
      backend = "backend1"
         [frontends.frontend1.headers]
            # SSLRedirect = true
         [frontends.frontend1.routes.Route1]
            rule = "Host:localhost"

我的 grpc 服务器主机是localhost,端口是6565. localhost:6565Grpc 客户端向(服务器)发送 grpc 请求可以正常工作。但是当我将 traefik 配置为监听端口2525并运行traefik. 按照我的要求,将 grpc 客户端端口更改2525为不是负载平衡。

但是traefik根据访问日志检测到grpc(http2)请求。

127.0.0.1 - - [13/Jun/2018:05:23:16 +0000] "PRI * HTTP/2.0" 404 19 "-" "-" 1 "backend not found" "*" 0ms
127.0.0.1 - - [13/Jun/2018:05:23:16 +0000] "PRI * HTTP/2.0" 404 19 "-" "-" 2 "backend not found" "*" 0ms

它说backend not found。很难理解为什么会发生这种情况。我通过互联网寻求更好的解决方案。有人说https用这个。但是在NGINX使用时我们不需要使用https. 所以我需要这样的解决方案。有人可以给我一个更好的解决方案吗?

标签: load-balancinggrpctraefik

解决方案


根据官方问题和this doc

首先,我们需要将后端协议从http改为h2c,也就是没有 s 的 http2。

其次,traefik 将不支持h2c后端v1.7,因此当前版本将无法工作。正如官方 repo 所说,他们每隔一个月发布一次,当前版本是v1.6.4,所以我们可以在下个月拥有这个功能。

但是,如果你现在想拥有这个(像我一样),我们可以从源代码构建一个开发版本的 traefik。请参阅此文档,基本上只需克隆 repo 并构建。


推荐阅读