Grpc bidirectional streaming not working

I'm trying out traefik as a potential candidate for an ingress and api proxy, but am having some trouble.

I have a backend service which running a grpc server and expecting to receive both unary calls and bidirectional streams.

My test setup is like this:

  • Running a vagrant guest with the backend service and traefik as ingress
  • Traefik uses Consul Catalog as the service backend
  • Running my grpc test client from my host into the vagrant guest on the same machine.
  • The test client first sends a unary call, then tries to run two consecutive bidirectional streams

I can set the amount of data sent by the test client when running it, currently I'm not quite sure of the exact size but I set it to the smallest possible which is not more than a few kb at most.

The result is that the unary call works perfectly, but the bidirectional stream just hangs immediately even when the amount of data is very small. When running the same setup as above, but directly to the service inside the vagrant guest there is no delay or hang, and the same goes for trying it with the fabio proxy which also works just fine.

So what could be the reason why the streaming fails with traefik?

Here is the configuration for the service and router (I have tried it with and without the middleware, it makes no difference to the behavior I'm experiencing):

tags = [
      "external.enable=true",
      "external.http.middlewares.limit.buffering.maxRequestBodyBytes=200000000",
      "external.http.middlewares.limit.buffering.memRequestBodyBytes=200000000",
      "external.http.middlewares.limit.buffering.maxResponseBodyBytes=200000000",
      "external.http.middlewares.limit.buffering.memResponseBodyBytes=200000000",
      "external.http.routers.${NOMAD_TASK_NAME}.middlewares=limit",
      "external.http.routers.${NOMAD_TASK_NAME}.rule=Host(`myservice.${DOMAIN}`)",
      "external.http.routers.${NOMAD_TASK_NAME}.entrypoints=http",
      "external.http.services.${NOMAD_TASK_NAME}.loadbalancer.server.scheme=h2c",
 ]