我正在研究一个小 gRCP API,但遇到了一个小问题。我希望可以从 React 前端访问 gRPC 服务,这意味着我需要一个能够转换 gRPC -> HTTP1 的特使代理,反之亦然。
TL;DR我想我可以联系到特使代理,但代理没有正确路由到我的服务。
我将把服务信息放在这里并解释下面发生的事情。
我的每个服务的 K8s(部署和服务)yaml 文件:
模拟部署
Envoy 配置文件和 docker 镜像
Envoy Config
Envoy Dockerfile
这是一个快速的健全性检查,确保我的服务正常工作,忽略特使代理:
> kubectl get services
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 37d
sim-dep NodePort 10.105.65.65 <none> 9090:30780/TCP 3s
sim-dep-http1 NodePort 10.111.190.170 <none> 8080:30948/TCP 3s
sim-envoy-proxy NodePort 10.110.178.132 <none> 9091:32068/TCP 17h
> curl <minikube ip>:30948/v1/todo/all
{"api":"v1","toDos":[{}]}
> ./client-grpc -server=192.168.99.100:30780
<success from server, too much to put here but it works>
所以据我了解,这个特使代理应该接受端口 9091 上的连接,然后将它们重新路由到端口 9090 上的地址 sim-dep(K8s DNS 正在运行)。
这是我在 React 上运行时的代码和错误我的主机上的应用程序(不在 minikube 中)。
var todoService = new ToDoServiceClient(
"http://192.168.99.100:32068/",
null,
null
);
var todo = new ToDo();
todo.setTitle("JS Created ToDo");
todo.setDescription("This todo was created with JS client");
var createRequest = new CreateRequest();
createRequest.setApi("v1");
createRequest.setTodo(todo);
var response = await todoService.create(createRequest, {}, <callback>);
日志:
upstream connect error or disconnect/reset before headers
我假设这意味着它无法在某个级别连接,但该错误不是很具有描述性。我也无法通过特使代理卷曲,但我确实尝试使用 PostMan 发送请求并得到了这个:
我不太确定该怎么做,但它似乎正在到达特使,但没有到达服务。我将不胜感激任何帮助!:) 如果我错过了这里的任何信息,请告诉我。谢谢!