大佬教程收集整理的这篇文章主要介绍了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,请注明来意。