两个内部 Cloud 运行 node.js 微服务如何通过 gRPC 成功通信?
How can two internal Cloud Run node.js microservices successfully communicate via gRPC?
新接触 Google Cloud 运行 并尝试让两个 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。
当服务对 public 请求开放时,以上内容似乎有效,但当您将服务器设置为内部时,上述内容无效。有什么想法吗?
您必须在请求元数据中添加凭据。 Here an example
...
// 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。 Here the documentation of Cloud Run to do this。但不完全,只是获取token并在请求的元数据中使用它
...
request(tokenRequestOptions)
.then((token) => {
// add the token to the metadata
});
// Make the call
...
新接触 Google Cloud 运行 并尝试让两个 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。
当服务对 public 请求开放时,以上内容似乎有效,但当您将服务器设置为内部时,上述内容无效。有什么想法吗?
您必须在请求元数据中添加凭据。 Here an example
...
// 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。 Here the documentation of Cloud Run to do this。但不完全,只是获取token并在请求的元数据中使用它
...
request(tokenRequestOptions)
.then((token) => {
// add the token to the metadata
});
// Make the call
...