1

我有一个服务器到服务器的调用,我使用 GRPC(带有 .net core 5)它在本地工作和测试。

之后,我将所有服务移至 Kubernetes Pod(Docker 桌面),并通过流程进行了测试(使用 swagger post-call),它也在那里工作。

现在为了监控,我添加了 ISTIO 并将标签添加到我的命名空间“ istio-injection=enabled ”重新启动了我所有的 Pod,现在每个 Pod 内都有 2 个容器。

我测试了基本服务(再次大摇大摆)并且它正在工作。在测试 GRPC 调用时。呼叫方说呼叫失败

Grpc.Core.RpcException: Status(StatusCode="Unavailable", Detail="upstream connect error or disconnect/reset before headers.reset reason: protocol error")

我检查了 GRPC 服务器端的日志,它对这个调用一无所知,并且服务正在运行。然后我有点认为错误来自调用方,而它无法或无法调用 GRPC 服务器。

在此处输入图像描述

错误详情:

Grpc.Core.RpcException: Status(StatusCode="Unavailable", Detail="upstream connect error or disconnect/reset before headers. reset reason: protocol error") 
at Basket.API.GrpcServices.DiscountGrpcService.GetDiscount(String productName) in /src/Services/Basket/Basket.API/GrpcServices/DiscountGrpcService.cs:line 21 
at Basket.API.Controllers.BasketController.UpdateBasket(ShoppingCart basket) in /src/Services/Basket/Basket.API/Controllers/BasketController.cs:line 47 at lambda_method7(Closure , Object ) 
at Microsoft.AspNetCore.Mvc.Infrastructure.ActionMethodExecutor.AwaitableObjectResultExecutor.Execute(IActionResultTypeMapper mapper, ObjectMethodExecutor executor, Object controller, Obje

再次,我删除了 Istio 并进行了测试,它再次开始工作(没有改变任何东西)我添加了 istio 并且它再次开始失败。所有其他服务都在使用 istio 但不是这个调用(这只是我有的 GRPC 调用)。

4

1 回答 1

2

我在https://istiobyexample.dev/grpc/找到了一个解决方案,它描述了丢失的项目。

istio 建议使用名称和版本标签作为标签,但更重要的是在使用 GRPC 时,暴露 GRPC 的服务需要具有端口名称 GRPC。

我添加了重新启动服务并开始按预期工作。同样,这不是我解决的问题。所有功劳都归于链接 https://istiobyexample.dev/grpc/ 和下面发布的图片。

在此处输入图像描述

于 2021-11-24T16:09:14.630 回答