GCP连接到SQL以获得Cloud Run Anthos Node.js服务

问题描述

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

这是我正在执行的deploy命令

    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-instances并将DB_HOST设置为私有IP,那么它将起作用。

但是添加--set-cloudsql-instances应该为GKE集群中的服务提供辅助工具并允许其连接到sql吗?

解决方法

文档不清晰...参数'--set-cloudsql-instances' is only available for Cloud Run Managed version。本节的第一句话很重要。而且文档中的限制尚不清楚

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

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

-clear-vpc连接器 删除此服务的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实例。