在我的 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
答案 0 :(得分:0)
好的,至少现在知道“通道凭据必须是 ChannelCredentials 对象”错误的根本原因。我正在并排开发节点包作为符号链接,每个依赖项都有自己的 grpc-js 副本。
https://github.com/npm/npm/issues/7742#issuecomment-257186653