6

Google Cloud Run 的新手,尝试让两个 node.js 微服务通过 gRPC 进行内部通信。

客户端界面:

constructor(address: string, credentials: grpc.ChannelCredentials, options?: object);

客户端代码:

const client: MyClient = new MyClient('my-service-abcdefgh3a-ew.a.run.app:443', grpc.credentials.createSsl());

服务器代码:

const server = new grpc.Server();
server.addService<IMyServer>(MyService, new MyServer());
server.bind(`0.0.0.0:${process.env.PORT}`, grpc.ServerCredentials.createInsecure());
server.start();

服务器设置为监听 443。

当服务对公共请求开放时,上述方法似乎有效,但当您将服务器设置为内部时无效。有任何想法吗?

4

1 回答 1

3

您必须在请求元数据中添加凭据。这里有一个例子

...
 // Create a client for the protobuf spec
  const client = new protoObj.Greeter(HOST, grpc.credentials.createInsecure());

  // Build gRPC request
  const metadata = new grpc.Metadata();
  metadata.add('authorization', `Bearer ${JWT_AUTH_TOKEN}`);

  // Execute gRPC request
  client.sayHello({name: GREETEE}, metadata, (err, response) => {...

第二个问题,如何获取 JWT_AUTH_TOKEN。这里有 Cloud Run 的文档来执行此操作。但不完全,简单的获取token,在请求的元数据中使用

...
request(tokenRequestOptions)
  .then((token) => {
  // add the token to the metadata
  });

// Make the call
...
于 2020-08-24T20:49:58.487 回答