Bridge to Kubernetes Not Working With Grpc Service

3/10/2021

Does Bridge to Kubernetes works with Grpc services ?<br/> I have in Kubernetes a Http gateway which communicates with a grpc service.<br/> I'm able to run the gateway project locally via Bridge to Kubernetes and receive http requests sent to the gateway service in the Kubernetes cluster.<br/> When running the Grpc service locally via Bridge to Kubernetes, the grpc requests sent to the grpc service in the Kubernetes cluster via the gateway service are not forwarded to my local dev machine.<br/>

On the Kubernetes cluster, looking at the forward pod (the one replacing my real grpc service pod by bridge to kubernetes) logs, I can see it is forwarding on the correct port (5005):

2021-03-10T10:54:49.5165135Z | RemoteAgent | TRACE | ReversePortForwardConnector created for port 5005\nOperation context: <json>{"clientRequestId":"ff87d8a3-50cf-40e9-ade6-999cf0134a17","correlationId":"a25c866e-cc5c-4a69-82e4-e144d9411f38:f66d8e62cc62:5a4a2f5120d5","requestId":null,"userSubscriptionId":null,"startTime":"2021-03-10T10:54:43.9384338Z","userAgent":"RemoteAgent/1.0.20210126.4","requestHttpMethod":null,"requestUri":null,"version":"1.0.20210126.4","requestHeaders":{},"loggingProperties":{"applicationName":"RemoteAgent","deviceOperatingSystem":"Linux 5.4.0-65-generic #73-Ubuntu SMP Mon Jan 18 17:25:17 UTC 2021","framework":".NET Core 3.1.11","processId":1,"targetEnvironment":"Production"}}</json>

2021-03-10T10:54:49.5306948Z | RemoteAgent | TRACE | ReversePortForwardConnector start listening on port 5005

When sending a request to the gateway, I can see the forwarder pod receive the request coming from the gateway, but doesn't forward it to my local dev machine:

2021-03-10T10:59:51.7216091Z | RemoteAgent | TRACE | AgentHub received for 5005, id 3, size 491

2021-03-10T10:59:53.7781637Z | RemoteAgent | TRACE | AgentHub disconnect for 5005, id 3\nOperation context: <json>{"clientRequestId":"ff87d8a3-50cf-40e9-ade6-999cf0134a17","correlationId":"a25c866e-cc5c-4a69-82e4-e144d9411f38:f66d8e62cc62:5a4a2f5120d5","requestId":null,"userSubscriptionId":null,"startTime":"2021-03-10T10:54:43.9384338Z","userAgent":"RemoteAgent/1.0.20210126.4","requestHttpMethod":null,"requestUri":null,"version":"1.0.20210126.4","requestHeaders":{},"loggingProperties":{"applicationName":"RemoteAgent","deviceOperatingSystem":"Linux 5.4.0-65-generic #73-Ubuntu SMP Mon Jan 18 17:25:17 UTC 2021","framework":".NET Core 3.1.11","processId":1,"targetEnvironment":"Production"}}</json>

2021-03-10T10:59:53.7791763Z | RemoteAgent | TRACE | PortForwardConnector.Disconnect 3

2021-03-10T10:59:53.7797928Z | RemoteAgent | TRACE | AgentHub closed for 5005, id 3

2021-03-10T10:59:53.7807672Z | RemoteAgent | TRACE | ReversePortForwardConnector.StartReceiveDataAsync exception 'Unable to read data from the transport connection: Operation canceled.' when invoking handler. Close.

On the gateway side, I see the following logs:

2021-03-10T11:05:58.056425797Z info: System.Net.Http.HttpClient.RedisLockGrpcServiceClient.LogicalHandler[100]
2021-03-10T11:05:58.056437689Z       Start processing HTTP request POST http://my.service.name.qa.svc.cluster.local:5005/RedisLockGrpcService.RedisLockGrpcService/AcquireLock

2021-03-10T11:05:58.056506665Z info: System.Net.Http.HttpClient.RedisLockGrpcServiceClient.ClientHandler[100]
2021-03-10T11:05:58.056513072Z       Sending HTTP request POST http://my.service.name.qa.svc.cluster.local:5005/RedisLockGrpcService.RedisLockGrpcService/AcquireLock

2021-03-10T11:06:00.122757112Z fail: Grpc.Net.Client.Internal.GrpcCall[6]
2021-03-10T11:06:00.122767931Z       Error starting gRPC call.
2021-03-10T11:06:00.122771595Z System.Net.Http.HttpRequestException: An error occurred while sending the request.
2021-03-10T11:06:00.122774131Z  ---> System.IO.IOException: The request was aborted.
2021-03-10T11:06:00.122776838Z  ---> System.IO.IOException: The response ended prematurely, with at least 9 additional bytes expected.
2021-03-10T11:06:00.122778929Z    at System.Net.Http.Http2Connection.ReadAtLeastAsync(Stream stream, Memory`1 buffer, Int32 minReadBytes)
2021-03-10T11:06:00.122781228Z    at System.Net.Http.Http2Connection.EnsureIncomingBytesAsync(Int32 minReadBytes)
2021-03-10T11:06:00.122797606Z    at System.Net.Http.Http2Connection.ReadFrameAsync(Boolean initialFrame)
2021-03-10T11:06:00.122800082Z    at System.Net.Http.Http2Connection.ProcessIncomingFramesAsync()
2021-03-10T11:06:00.122801790Z    --- End of inner exception stack trace ---
2021-03-10T11:06:00.122803975Z    at System.Net.Http.Http2Connection.Http2Stream.CheckResponseBodyState()
2021-03-10T11:06:00.122805517Z    at System.Net.Http.Http2Connection.Http2Stream.TryEnsureHeaders()
2021-03-10T11:06:00.122807080Z    at System.Net.Http.Http2Connection.Http2Stream.ReadResponseHeadersAsync(CancellationToken cancellationToken)
2021-03-10T11:06:00.122808600Z    at System.Net.Http.Http2Connection.SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
2021-03-10T11:06:00.122810131Z    --- End of inner exception stack trace ---
2021-03-10T11:06:00.122811641Z    at System.Net.Http.Http2Connection.SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
2021-03-10T11:06:00.122813161Z    at System.Net.Http.HttpConnectionPool.SendWithRetryAsync(HttpRequestMessage request, Boolean doRequestAuth, CancellationToken cancellationToken)
2021-03-10T11:06:00.122815615Z    at System.Net.Http.RedirectHandler.SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
2021-03-10T11:06:00.122817242Z    at System.Net.Http.DiagnosticsHandler.SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
2021-03-10T11:06:00.122818859Z    at Microsoft.Extensions.Http.Logging.LoggingHttpMessageHandler.SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
2021-03-10T11:06:00.122820416Z    at Microsoft.Extensions.Http.Logging.LoggingScopeHttpMessageHandler.SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
2021-03-10T11:06:00.122838745Z    at System.Net.Http.HttpClient.FinishSendAsyncUnbuffered(Task`1 sendTask, HttpRequestMessage request, CancellationTokenSource cts, Boolean disposeCts)
2021-03-10T11:06:00.122844461Z    at Grpc.Net.Client.Internal.GrpcCall`2.GetResponseHeadersCoreAsync()

2021-03-10T11:06:00.123445505Z info: Grpc.Net.Client.Internal.GrpcCall[3]
2021-03-10T11:06:00.123451724Z       Call failed with gRPC error status. Status code: 'Internal', Message: 'Error starting gRPC call. HttpRequestException: An error occurred while sending the request. IOException: The request was aborted. IOException: The response ended prematurely, with at least 9 additional bytes expected.'.
-- Sagi Noibaor
bridge
c#
kubernetes

0 Answers