【问题标题】:Google cloud run: Can a service know its own url?谷歌云运行:服务能知道自己的url吗?
【发布时间】:2021-01-08 12:20:08
【问题描述】:

我想知道部署在云上运行的容器是否可以通过某种方式获取自己的服务 url 或者是不可能的?

我想知道这一点,因为我想要一个为自己创建谷歌云任务的云运行工作者。

如果可以,怎么做?

【问题讨论】:

    标签: google-cloud-run


    【解决方案1】:

    我写了an article to self call Cloud Run service to prevent Cold Start。我用 Go 写的代码在my github

    这个想法是调用元数据服务器来找到项目编号和区域(像这样你没有这个硬编码或在 env var 中),然后你调用命名空间 API。

    如果您需要其他语言的帮助,请告诉我。

    【讨论】:

    • 我这样做并得到了undefined for service.status.url(在nodejs中)
    • 你能在你的问题中分享你的代码吗?我会在我这边尝试并重现您的错误,并且可能会修复它!
    【解决方案2】:

    如果您知道服务名称,则可以向https://{endpoint}/apis/serving.knative.dev/v1/{name} 发出 GET HTTP 请求

    Method: namespaces.services.get

    例如:

    curl -X GET -H "Authorization: Bearer $(gcloud auth print-access-token)"  https://us-central1-run.googleapis.com/apis/serving.knative.dev/v1/namespaces/your-project/services/your-service| grep url
    
    "url": "https://cloud-run-xxxxxxxxxx-uc.a.run.app"
    

    【讨论】:

      【解决方案3】:

      使用namespaces.services.get获取云运行服务信息,该api需要的一些信息

      1. 服务名称

        Cloud Run 提供了default environment variableK_SERVICE

      2. 项目编号

      3. 地区

      4. 访问令牌

      项目ID、区域和访问令牌可以从metadata server检索

      PROJECT_ID=$(curl "http://metadata.google.internal/computeMetadata/v1/project/project-id" -H "Metadata-Flavor: Google")
      REGION=$(curl "http://metadata.google.internal/computeMetadata/v1/instance/region" -H "Metadata-Flavor: Google" | sed "s/.*\///")
      TOKEN=$(curl -s "http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/token" -H "Metadata-Flavor: Google" | jq -r '.access_token')
      

      然后你可以使用namespaces.services.get获取json中的云运行服务信息,提取带有jqexport环境变量的url供应用使用

      export PUCLIC_URL=$(curl -s "https://${REGION}-run.googleapis.com/apis/serving.knative.dev/v1/namespaces/${PROJECT_ID}/services/${K_SERVICE}" -H "Authorization: Bearer ${TOKEN}" | jq -r '.status.url')
      

      curljq 可能需要安装,对于 alpine:apk add --no-cache curl jq

      Cloud Run 服务帐号需要run.services.get 权限才能调用namespaces.services.get

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-10-03
        • 1970-01-01
        • 2018-09-22
        • 2019-10-17
        • 1970-01-01
        • 2021-11-14
        • 2019-03-06
        相关资源
        最近更新 更多