title: Traefik as an ingress controller + Server GRPC - UNKNOWN: No status received
body: <p>I use traefik as an ingress controller in AKS, I have a grpc service that run correctly locally, but I have some problem behind traefik.</p>
  
  <p>When the GRPC server return an error, I receive it correctly, but when it send a normal response, I didn’t receive it:</p>
  
  <pre><code>grpcServer@grpc.test.com:443&gt; client.Ping({}, metadata, pr)
  EventEmitter {}
  grpcServer@grpc.test.com:443&gt; 
  Error:  { Error: 2 UNKNOWN: No status received
      at Object.exports.createStatusError (/usr/local/lib/node_modules/grpcc/node_modules/grpc/src/common.js:91:15)
      at Object.onReceiveStatus (/usr/local/lib/node_modules/grpcc/node_modules/grpc/src/client_interceptors.js:1204:28)
      at InterceptingListener._callNext (/usr/local/lib/node_modules/grpcc/node_modules/grpc/src/client_interceptors.js:568:42)
      at InterceptingListener.onReceiveStatus (/usr/local/lib/node_modules/grpcc/node_modules/grpc/src/client_interceptors.js:618:8)
      at callback (/usr/local/lib/node_modules/grpcc/node_modules/grpc/src/client_interceptors.js:845:24) code: 2, metadata: {}, details: 'No status received' }
  </code></pre>
  
  <p>vs</p>
  
  <pre><code>grpcServer@localhost:10000&gt; client.Ping({}, metadata, pr)
  EventEmitter {}
  grpcServer@localhost:10000&gt; 
  {
    "response": "PONG"
  }
  </code></pre>
  
  <p>Error:</p>
  
  <pre><code>grpcServer@grpc.test.com:443&gt; client.Ping({}, pr)
  EventEmitter {}
  grpcServer@grpc.test.com:443&gt; 
  Error:  { Error: 16 UNAUTHENTICATED: incorrect serial number
      at Object.exports.createStatusError (/usr/local/lib/node_modules/grpcc/node_modules/grpc/src/common.js:91:15)
      at Object.onReceiveStatus (/usr/local/lib/node_modules/grpcc/node_modules/grpc/src/client_interceptors.js:1204:28)
      at InterceptingListener._callNext (/usr/local/lib/node_modules/grpcc/node_modules/grpc/src/client_interceptors.js:568:42)
      at InterceptingListener.onReceiveStatus (/usr/local/lib/node_modules/grpcc/node_modules/grpc/src/client_interceptors.js:618:8)
      at callback (/usr/local/lib/node_modules/grpcc/node_modules/grpc/src/client_interceptors.js:845:24)
    code: 16,
    metadata:
     { 'content-length': '0', date: 'Wed, 06 Feb 2019 21:32:38 GMT' },
    details: 'incorrect serial number' }
  </code></pre>
  
  <p>The k8s service yml:</p>
  
  <pre><code>apiVersion: extensions/v1beta1
  kind: Ingress
  metadata:
    name: velcloud-grpc
    namespace: production
    annotations:
      kubernetes.io/ingress.class: traefik
      ingress.kubernetes.io/protocol: h2c
      traefik.protocol: h2c
  spec:
    rules:
      - host: grpc.test.com
        http:
          paths:
            - path: /
              backend:
                serviceName: velcloud-grpc
                servicePort: grpc
  </code></pre>
  
  <p>Edit: More information</p>
  
  <p>After some debugging, I inspected the received response:</p>
  
  <pre><code>{ client_close: true,
    metadata: { date: [ 'Wed, 06 Feb 2019 23:48:06 GMT' ] },
    read: &lt;Buffer 0a 04 50 4f 4e 47&gt;,
    status:
     { code: 2,
       details: 'No status received',
       metadata: Metadata { _internal_repr: {} } } } { code: 2,
    details: 'No status received'
  }
  </code></pre>
  
  <p>The only problem here is the status, the read content the right response once deserialized: <code>{ response: 'PONG' }</code></p>
  
  <p>I don't know why the status is set to 2 (UNKNOWN) and not 0 (OK).</p>