2

尝试使用完全托管的云运行将 SQL 实例连接到 Cloud Run 服务工作正常,但是当我尝试通过 Anthos 连接服务时(这是必需的,因为我们需要在服务上使用 websockets)我只是得到 ENOENT(无条目),更新 IAM 为具有正确权限的 GKE,重新创建了启用所有服务的集群/

这是我正在执行的部署命令

    gcloud run deploy \
    --project ${GOOGLE_PROJECT_ID} \
    --platform gke \
    --cluster dev \
    --cluster-location ${GOOGLE_COMPUTE_ZONE} \
    --image gcr.io/${GOOGLE_PROJECT_ID}/${PROJECT_NAME} \
    --set-cloudsql-instances "${GOOGLE_PROJECT_ID}:europe-west1:dev" \
    --set-env-vars "$(tr '\n' ',' < "${ENV_KEY_PRODUCTION}")" \
    --set-env-vars "SERVICE=${1}" \
    --set-env-vars "DB_HOST=/cloudsql/${GOOGLE_PROJECT_ID}:europe-west1:dev" \
    "${1}"

如果我使用 SQL 中的私有 IP 并删除--set-cloudsql-instancesDB_HOST 并将其设置为私有 IP,它就可以工作。

但是添加--set-cloudsql-instances应该为 GKE 集群中的服务创建一个 sidecar 并允许它连接到 SQL?

4

1 回答 1

4

文档不清楚...参数“--set-cloudsql-instances”仅适用于 Cloud Run Managed version。该部分的第一句话很重要。并且文档中的限制不明确

仅适用于连接到 Cloud Run(全托管)。指定 --platform=managed 以使用:

--[no-]allow-unauthenticated 是否启用允许未经身份验证的服务访问。这可能需要一些时间才能生效。使用 --allow-unauthenticated 启用和 --no-allow-unauthenticated 禁用。

--clear-vpc-connector 删除此服务的 VPC 连接器。

--revision-suffix=REVISION_SUFFIX 指定修订名称的后缀。修订名称始终自动以服务名称开头。例如,为名为“helloworld”的服务指定 [--revision-suffix=v1],将导致名为“helloworld-v1”的修订。

--vpc-connector=VPC_CONNECTOR 设置此服务的 VPC 连接器。这些标志修改此服务连接到的 Cloud SQL 实例。如果 Cloud SQL 实例与您的 Cloud Run 服务位于同一项目和区域中,您可以指定该实例的名称;否则为实例指定 ::。最多可以指定其中之一:

--add-cloudsql-instances=[CLOUDSQL-INSTANCES,...] 将给定值附加到当前 Cloud SQL 实例。

--clear-cloudsql-instances 清空当前的 Cloud SQL 实例。

--remove-cloudsql-instances=[CLOUDSQL-INSTANCES,...] 从当前 Cloud SQL 实例中删除给定值。

--set-cloudsql-instances=[CLOUDSQL-INSTANCES,...] 用给定的值完全替换当前的 Cloud SQL 实例。

于 2020-09-18T12:47:12.850 回答