Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google cloud platform 我的云运行服务如何调用其他云运行服务?_Google Cloud Platform_Google Cloud Run - Fatal编程技术网

Google cloud platform 我的云运行服务如何调用其他云运行服务?

Google cloud platform 我的云运行服务如何调用其他云运行服务?,google-cloud-platform,google-cloud-run,Google Cloud Platform,Google Cloud Run,我有一个监听服务'https://myapp.a.run.app/dosomething,但我想利用Cloud Run的可伸缩性功能,因此在“dosomething”的控制器中,我向“dosomething”发送10个请求https://myapp.a.run.app/smalltask'; 由于我的应用程序配置为每个实例只允许服务一个请求,我预计10个实例将启动,所有实例都执行smalltask并返回(所有实例都在超时时间内) 但我不知道如何正确验证请求,因此这10个请求都会导致403个请求。

我有一个监听服务'https://myapp.a.run.app/dosomething,但我想利用Cloud Run的可伸缩性功能,因此在“dosomething”的控制器中,我向“dosomething”发送10个请求https://myapp.a.run.app/smalltask'; 由于我的应用程序配置为每个实例只允许服务一个请求,我预计10个实例将启动,所有实例都执行smalltask并返回(所有实例都在超时时间内)


但我不知道如何正确验证请求,因此这10个请求都会导致403个请求。对于云运行的服务,我在初始请求中手动传递一个承载令牌,尽管我希望在某个时候添加一些api代理。但是如果没有API代理,发送请求以使其被接受的正确方式是什么?应用程序正在以具有访问终结点权限的用户身份运行。

验证服务对服务的身份。

如果您的体系结构使用多个服务,那么这些服务可能需要相互通信

您可以使用同步或异步服务对服务通信:

对于异步通信,请使用

  • 用于一对一异步通信
  • 一对多异步通信
  • 用于定时异步通信
  • 用于编排服务
用于同步通信

一个服务使用其端点URL通过HTTP调用另一个服务。在这个用例中,最好确保每个服务只能向特定的服务发出请求。例如,如果您有一个登录服务,它应该能够访问用户配置文件服务,但它可能无法访问搜索服务

首先,您需要配置接收服务以接受来自呼叫服务的请求:

  • 将云运行调用程序(
    角色/Run.Invoker
    )角色授予接收服务上的调用服务标识。默认情况下,此标识为
    PROJECT\u编号-compute@developer.gserviceaccount.com
  • 在呼叫服务中,您需要:

  • 创建一个Google签名的OAuth ID令牌,将访问群体(
    aud
    )设置为接收服务的URL。此值必须包含架构前缀(
    http://
    https://
    ),并且
    aud
    值当前不支持自定义域

  • 将ID令牌包括在
    授权:承载ID\u令牌
    头中。当容器在云上运行(完全管理)时,您可以从元数据服务器获取此令牌。如果应用程序在Google Cloud之外运行,则可以从服务帐户密钥文件生成ID令牌


  • 有关Node/Python/Go/Java和其他语言的完整指南和示例,请参阅:

    感谢您的快速回答!尽管如此,即使遵循了指南(尝试了身份验证文档方法和教程方法),我在服务日志中也看到了401。与我确认的服务关联的标识本身具有调用权限;这可能是服务无法调用自身的未记录限制吗?请确保
    令牌\u请求\u url=metadata\u服务器\u令牌\u url+接收\u服务\u url
    通常人们会忘记添加后者。我遇到的问题是,在我的uri前面加上“http”而不是“https”。FWIW,python教程更新为使用库函数专门获取元数据令牌,因此
    google.oauth2.id\u令牌.fetch\u id\u令牌(auth\u req,target\u观众)
    而不是直接调用
    http://metadata/computeMetadata/...
    。我认为图书馆的使用更漂亮。要确认,基本上唯一的选择是在提出实际请求之前请求一个令牌?