当前位置: 首页 > 知识库问答 >
问题:

如何从Cloud Run/GCP的外部调用Cloud Run?

孙文康
2023-03-14

我有一个简单的Spring Boot服务'say-hi',可以在/say-hi下接收GET请求并返回'hello‘。它部署在托管云运行中。假设我不想向普通公众开放。现在我想做两件事:1。允许开发人员(我自己)访问'say-hi'2。允许云运行之外的另一个Spring Boot服务能够发出“say-hi”的呼叫

*   Trying 216.239.36.53...
*   Trying 2001:4860:4802:36::35...
* Immediate connect fail for 2001:4860:4802:36::35: Network is unreachable
*   Trying 2001:4860:4802:36::35...
* Immediate connect fail for 2001:4860:4802:36::35: Network is unreachable
*   Trying 2001:4860:4802:36::35...
* Immediate connect fail for 2001:4860:4802:36::35: Network is unreachable

对于我的目标2,我假设在这里有正确的会话来看待它。这是否意味着,如果我想从Cloud Run manged外部访问“say-hi”(无论是从我自己的笔记本电脑还是从其他GKE实例),我需要为我的项目启用IAP?如果是,如何将云运行与IAP集成?

共有1个答案

毋修为
2023-03-14

经过一整天的搜索和阅读。最后得到一个工作版本。Google Cloud Run给出的服务到服务身份验证文档真的误导了我对IAP的看法,这里的代码留下了一些不清楚的地方。原来调用云运行服务,我根本不需要IAP。非常感谢这个博客,我从那里获得了解决方案

  @PostMapping(value="/call-say-hi")
  public ResponseEntity<String> callSayHi() throws URISyntaxException, IOException {

    ServiceAccountCredentials serviceAccountCredentials =
        ServiceAccountCredentials.fromStream(new FileInputStream(SERVICE_ACCOUNT_JSON_KEY_PATH));
    serviceAccountCredentials.createScoped(IAM_SCOPE);
    IdTokenCredentials idTokenCredentials = IdTokenCredentials.newBuilder()
                                            .setIdTokenProvider(serviceAccountCredentials)
                                            .setTargetAudience(TARGET_AUDIENCE)
                                            .build();
    GenericUrl genericUrl = new GenericUrl(TARGET_AUDIENCE+"/say-hi");
    HttpCredentialsAdapter adapter = new HttpCredentialsAdapter(idTokenCredentials);
    HttpRequest request = httpTransport.createRequestFactory(adapter).buildGetRequest(genericUrl);
    request.setThrowExceptionOnExecuteError(false);
    HttpResponse response = request.execute();
    String r = response.parseAsString();
    System.out.println(r);
    return ResponseEntity.status(HttpStatus.OK).body(r);
  }

其中target_diudiates是部署的云运行服务URL

 类似资料:
  • 问题内容: 我有一个程序和一个脚本,希望将其合并到我的Web应用程序中。 我想使用它们来解析上传到我的网站的文件;处理过程可能需要几秒钟,因此我也避免阻止该应用程序。 我如何才能只接受文件,然后仅在控制器的子过程中运行程序和脚本? 问题答案: 参见child_process。这是一个使用的示例,它允许您在输出数据时写入stdin并从stderr / stdout中读取。如果您不需要写stdin并且

  • 问题内容: 我有一个非常简单的Java类,它使用输入验证以及明显的void set()和String get()方法来有效地装饰Map。 我希望能够有效地调用这些方法并从JVM外部处理返回值和异常,但仍在同一台计算机上 更新:我想到的调用者不是另一个JVM; 谢谢@戴夫雷 我的实施注意事项很典型 性能 易于实施和维护(简单吗?) 可靠性 灵活性(例如,我可以从远程计算机上拨打电话等) 有“正确的方

  • 问题内容: 我有一个具有称为的私有方法的类。我想从外面打电话。我认为应该可以反思,但是我得到了。有任何想法吗??? 问题答案: 利用使用其之前的Method对象的方法。

  • 问题内容: 你如何从Python脚本中调用外部命令(就像我在Unix Shell或Windows命令提示符下键入的一样)? 问题答案: 下面总结了调用外部程序的方法以及每种方法的优缺点: 将命令和参数传递到系统的外壳程序。很好,因为您实际上可以以这种方式一次运行多个命令,并设置管道和输入/输出重定向。例如: 但是,尽管这很方便,但是您必须手动处理外壳字符(例如空格等)的转义。另一方面,这也使您可以

  • 假设我有一个名为的扩展,my_extension一个名为的插件。 然后,我的控制器中有一个名为的函数。 如何通过通常的http GET请求从外部调用此?

  • 我有代码: 年级4.5.1对此警告为 但是link没有给我任何可以替换它的提示,因为我不能仅仅设置任务依赖项,比如dependsOn或FinalizdBy--它不是从其他任务调用的,而是从构建的末尾调用的。