我想知道部署在 cloud run 上的容器是否可以以某种方式获取自己的服务 url 还是不可能?
我想知道这一点,因为我想要一个为自己创建谷歌云任务的云运行工作者。
如果可以,怎么做?
答案 0 :(得分:1)
我写了an article to self call Cloud Run service to prevent Cold Start。我用 Go 写的代码在 my github
这个想法是调用元数据服务器来查找项目编号和区域(像这样你没有这个硬编码或在 env var 中),然后你调用命名空间 API。
如果您需要帮助以其他语言编写它,请告诉我。
答案 1 :(得分:0)
如果您知道服务名称,则可以向 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"
答案 2 :(得分:0)
使用namespaces.services.get获取云运行服务信息,这个api需要的一些信息
服务名称
Cloud Run 提供了 default environment variable K_SERVICE
项目 ID
地区
访问令牌
项目 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中检索云运行服务信息,使用jq
、export
环境变量提取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')
curl
和 jq
可能需要安装,对于 alpine:apk add --no-cache curl jq
Cloud Run 服务帐户需要 run.services.get
权限才能调用 namespaces.services.get