#node.js #google-cloud-platform #grpc #google-cloud-run #grpc-node
#node.js #google-облачная платформа #grpc #google-cloud-run #grpc-узел
Вопрос:
Новичок в 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.
Кажется, что описанное выше работает, когда служба открыта для публичных запросов, но не работает, когда у вас установлен сервер как внутренний. Есть идеи?
Комментарии:
1. Это также задокументировано в cloud.google.com/run/docs/triggering/grpc#request-auth . В двух словах вам нужно предоставить
Authentication
заголовок для исходящих RPC (заголовки в gRPC называются «метаданными»).
Ответ №1:
Вы должны добавить учетные данные в метаданные запроса. Вот пример
...
// 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 для этого. Но не полностью, просто получите токен и используйте его в метаданных запроса
...
request(tokenRequestOptions)
.then((token) => {
// add the token to the metadata
});
// Make the call
...