如何从云跑GCP的外侧调用云跑?

我有一个简单的Spring Boot服务’say-hi’,在say-hi下接受GET请求并返回’hello’。它部署在托管的Cloud Run中。假设我不想把它开放给公众。现在我想做两件事:1.允许开发者(我自己)访问’say-hi’2.允许Cloud Run之外的另一个Spring Boot服务能够调用’say-hi’。

对于我的目标1。

奇怪的是curl命令不能用,但Insomnia可以用 基本上,我按照 医生,我把我的google账号添加到versrun.invoker中,但curl命令说Network is unrechable。 curl -H "Authorization: Bearer $(gcloud auth print-identity-token)" http://say-hi-0-1-0-q6g2cgbzna-ew.a.run.app:8080/say-hi -v错误。

*   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

然而,如果我运行 gcloud auth print-identity-token 分别获取token,然后从Insomnia客户端发送GET请求,成功了…… 我想知道为什么…

对于我的目标2我假设正确的环节来看待它 此处. 这是否意味着如果我想从Cloud Run管理的外部访问’say-hi’(包括从我自己的笔记本电脑和其他GKE实例),我需要为我的项目启用IAP? 如果是,如何将Cloud Run与IAP集成?

解决方案:

经过一整天的搜索和阅读。终于得到一个工作版本。给定文档的 服务对服务 谷歌云跑给的真的是误导了我的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_AUDIENCE是部署的云跑服务URL

给TA打赏
共{{data.count}}人
人已打赏
未分类

JSON Schema:验证一个自定义的$ref'd对象数组。

2022-9-26 11:22:22

未分类

如何设置编辑文本等于空安卓

2022-9-26 11:33:18

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索