程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了gRPC 节点微服务与 istio 网格中的另一个微服务通信大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决gRPC 节点微服务与 istio 网格中的另一个微服务通信?

开发过程中遇到gRPC 节点微服务与 istio 网格中的另一个微服务通信的问题如何解决?下面主要结合日常开发的经验,给出你关于gRPC 节点微服务与 istio 网格中的另一个微服务通信的解决方法建议,希望对你解决gRPC 节点微服务与 istio 网格中的另一个微服务通信有所启发或帮助;

在我的 k8s pod 中,我通过 Istio 部署了几个 gRPC 微服务,该服务位于处理 Web 客户端路由的网关后面。当我需要从客户端(浏览器)向这些服务中的任何一个发送 RPC 时,一切都很好。

我现在想直接从服务 B 调用服务 A。我该怎么做?

两个服务器如何实例化的代码:

  const server = new grpc.Server();
  server.addService(MyService,new MyServiceImpl());
  server.bindAsync(`0.0.0.0:${PORT_A}`,grpc.ServerCredentials.createInsecure(),() => {
    server.start();
  });

一个服务帐户正与 Google_APPliCATION_CREDENTIALS 和我的部署 YAML 中的一个秘密一起使用。

要从服务 B 调用服务 A,我认为服务 B 中的代码如下所示:

    const serviceAClIEnt: MyServiceClIEnt = new MyServiceClIEnt(`0.0.0.0:${PORT_A}`,creds);
    const req = new SomeRpcRequest()...;
    serviceAClIEnt.someRpc(req,(err: grpc.ServiceError,response: SomeRpcResponse) => {
      // yay!
    });

这是天真吗?我不确定的一件事是实例化客户端时需要传递的凭据。我收到抱怨说我需要传递 ChannelCredentials,但我尝试创建这些凭据的所有机制都不起作用。

我意识到的另一件事是 0.0.0.0 不可能是正确的,因为每个服务都在与 sIDecar 代理配对的自己的容器中......那么我如何正确路由 RPC 并附加正确的凭据?

我正在尝试以这种方式构建信用:

let callCreds = grpc.CallCredentials.createFromGoogleCredential(myOauthClIEnt);
let channelCreds = grpc.ChannelCredentials.createSsl().compose(callCreds);
const serviceAClIEnt = new MyServiceClIEnt(`0.0.0.0:${PORT_A}`,channcelCreds);

而且我神秘地收到以下错误堆栈:

UnhandledPromiseRejectionWarning: TypeError: Channel credentials must be a ChannelCredentials object
    at new Channelimplementation (/bish/proto/activitIEs/node_modules/@grpc/grpc-Js/build/src/channel.Js:69:19)
    at new ClIEnt (/bish/proto/activitIEs/node_modules/@grpc/grpc-Js/build/src/clIEnt.Js:58:36)
    at new ServiceClIEntImpl (/bish/proto/activitIEs/node_modules/@grpc/grpc-Js/build/src/make-clIEnt.Js:58:5)
    at PresenceService.<anonymous> (/bish/src/servers/presence/dist/presence.Js:348:44)
    at step (/bish/src/servers/presence/dist/presence.Js:33:23)
    at Object.next (/bish/src/servers/presence/dist/presence.Js:14:53)
    at fulfilled (/bish/src/servers/presence/dist/presence.Js:5:58)
    at processticksAndRejections (internal/process/task_queues.Js:97:5)

这很奇怪,因为 channelCreds 是一个 ComposedChannelCredentialsImpl,实际上它扩展了 ChannelCredentials

解决方法

好的,至少现在知道“通道凭据必须是 ChannelCredentials 对象”错误的根本原因。我正在并排开发节点包作为符号链接,每个依赖项都有自己的 grpc-js 副本。

https://github.com/npm/npm/issues/7742#issuecomment-257186653

大佬总结

以上是大佬教程为你收集整理的gRPC 节点微服务与 istio 网格中的另一个微服务通信全部内容,希望文章能够帮你解决gRPC 节点微服务与 istio 网格中的另一个微服务通信所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: