我的云 运行 服务如何调用其他云 运行 服务?
How can my cloud run service call other cloud run services?
我有一个服务在 'https://myapp.a.run.app/dosomething' 上侦听,但我想利用 Cloud 运行 的可扩展性功能,因此在 'dosomething' 的控制器中,我发送了 10 个请求到'https://myapp.a.run.app/smalltask';我的应用程序配置为每个实例只允许服务一个请求,我希望有 10 个实例启动,全部执行它们的小任务,并且 return(全部在超时期限内)。
但我不知道如何正确验证请求,所以这 10 个请求都导致了 403。对于 Cloud 运行 服务,我在初始请求中手动传递了一个不记名令牌,尽管我希望在某个时候添加一些 api 代理。但是没有说 API 代理,发送请求以使其被接受的正确方法是什么?该应用程序是 运行 作为有权访问端点的用户。
正在验证 service-to-service
如果您的架构使用多个服务,这些服务可能需要相互通信。
您可以使用同步或异步service-to-service通信:
异步通信,使用
- Cloud Tasks 一对一异步通信
- Pub/Sub for一对多异步通信
- Cloud Scheduler 用于定期安排的异步通信。
- Cloud Workflows 用于编排服务。
用于同步通信
一项服务使用其端点 URL 通过 HTTP 调用另一项服务。在此用例中,确保每个服务只能向特定服务发出请求是个好主意。例如,如果您有登录服务,它应该可以访问 user-profiles 服务,但它可能不能访问搜索服务。
首先,您需要配置接收服务以接受来自调用服务的请求:
- 将 Cloud 运行 Invoker (
roles/run.invoker
) 角色授予接收服务上的调用服务身份。默认情况下,此标识为 PROJECT_NUMBER-compute@developer.gserviceaccount.com
.
在调用服务中,您需要:
创建一个 Google-signed OAuth ID 令牌,并将受众 (aud
) 设置为接收服务的 URL。此值必须包含架构前缀(http://
或 https://
),并且 aud
值目前不支持自定义域。
在 Authorization: Bearer ID_TOKEN
header 中包含 ID 令牌。您可以从元数据服务器获取此令牌,而容器在云 运行 上 运行(完全托管)。如果应用程序 运行 在 Google 云之外,您可以从服务帐户密钥文件生成 ID 令牌。
有关 Node/Python/Go/Java 和其他文章中的完整指南和示例,请参阅:Authenticating service-to-service
我有一个服务在 'https://myapp.a.run.app/dosomething' 上侦听,但我想利用 Cloud 运行 的可扩展性功能,因此在 'dosomething' 的控制器中,我发送了 10 个请求到'https://myapp.a.run.app/smalltask';我的应用程序配置为每个实例只允许服务一个请求,我希望有 10 个实例启动,全部执行它们的小任务,并且 return(全部在超时期限内)。
但我不知道如何正确验证请求,所以这 10 个请求都导致了 403。对于 Cloud 运行 服务,我在初始请求中手动传递了一个不记名令牌,尽管我希望在某个时候添加一些 api 代理。但是没有说 API 代理,发送请求以使其被接受的正确方法是什么?该应用程序是 运行 作为有权访问端点的用户。
正在验证 service-to-service
如果您的架构使用多个服务,这些服务可能需要相互通信。
您可以使用同步或异步service-to-service通信:
异步通信,使用
- Cloud Tasks 一对一异步通信
- Pub/Sub for一对多异步通信
- Cloud Scheduler 用于定期安排的异步通信。
- Cloud Workflows 用于编排服务。
用于同步通信
一项服务使用其端点 URL 通过 HTTP 调用另一项服务。在此用例中,确保每个服务只能向特定服务发出请求是个好主意。例如,如果您有登录服务,它应该可以访问 user-profiles 服务,但它可能不能访问搜索服务。
首先,您需要配置接收服务以接受来自调用服务的请求:
- 将 Cloud 运行 Invoker (
roles/run.invoker
) 角色授予接收服务上的调用服务身份。默认情况下,此标识为PROJECT_NUMBER-compute@developer.gserviceaccount.com
.
在调用服务中,您需要:
创建一个 Google-signed OAuth ID 令牌,并将受众 (
aud
) 设置为接收服务的 URL。此值必须包含架构前缀(http://
或https://
),并且aud
值目前不支持自定义域。在
Authorization: Bearer ID_TOKEN
header 中包含 ID 令牌。您可以从元数据服务器获取此令牌,而容器在云 运行 上 运行(完全托管)。如果应用程序 运行 在 Google 云之外,您可以从服务帐户密钥文件生成 ID 令牌。
有关 Node/Python/Go/Java 和其他文章中的完整指南和示例,请参阅:Authenticating service-to-service