GCP API 计算引擎网关
GCP API Gateway for Compute Engine
我在 api 网关营销页面上找到了以下片段。
所以我在计算引擎上为我的应用 运行 设置 API 网关。由于找不到任何关于如何在 API 引擎上配置计算引擎的文档,我使用内部 DNS 创建了以下配置。enter link description here
swagger: "2.0"
info:
title: API Endpoints
description: API Endpoints
version: 1.0.1
schemes:
- https
produces:
- application/json
paths:
/indexes:
get:
summary: Return Search Indexes
operationId: searchIndexes
x-google-backend:
address: http://my_internal_dns_for_compute_engine.c.myproject.internal/indexes
path_translation: APPEND_PATH_TO_ADDRESS
responses:
"200":
description: A successful response
schema:
type: string
"403":
description: Failed to authenticate
当我使用 gcloud 部署配置时,出现以下错误
Waiting for API Config [my-api-config-v6] to be created for API
[my-api]...failed.
ERROR: (gcloud.beta.api-gateway.api-configs.create) Wait for Service
Config creation: Backend URL
"http://my_internal_dns_for_compute_engine.c.myproject.internal/indexes" is
forbidden: cannot route requests to an internal address.
看来内部 DNS 不受支持(很明显)。
我的计算引擎实例只能通过 VPC 网络访问。如何将我的 api 网关连接到 VPC 网络以及如何通过它访问我的计算引擎?
今天,你无法做到这一点。您的 API 网关是无服务器服务,您不能在其上插入 serverless VPC connector。我已经与 Google 讨论过这个问题(因为它与 Cloud Scheduler、Cloud Task 和 PubSub 推送订阅等问题相同)并且很快就会发生一些事情。敬请期待!!
无论如何,现在要解决您的问题,您有 2 个解决方案(至少,一个肯定的,一个要测试的)
- 第一个(肯定的)解决方案是拥有一个“代理”。另一个具有 public 访问权限的计算引擎,或具有无服务器 VPC 连接器的云 Function/Cloud Run/App 引擎服务。云 Function/Cloud Run/App 引擎更好,因为您可以使用 IAM 保护访问(无 public 访问)
- 第二个(测试)解决方案是部署 Cloud Endpoint, I mean ESPv2 on Cloud Run instead of using API gateway. In fact, API Gateway is, for now, a managed solution of ESPv2 on Cloud Run. And if you plug a serverless VPC connector on Cloud Run, it should work. I wrote an article on the ESPv2 & Cloud Run 用法。 如果我有时间,我会使用无服务器 VPC 连接器对其进行测试并让您知道。要不,你也试试吧。
编辑 1
我已经测试了第二种解决方案,它适用于内部 IP(以及云上的无服务器 VPC 连接器 运行 部署了 ESPv2 的端点服务),不适用于内部 DNS 名称。
我在 api 网关营销页面上找到了以下片段。
所以我在计算引擎上为我的应用 运行 设置 API 网关。由于找不到任何关于如何在 API 引擎上配置计算引擎的文档,我使用内部 DNS 创建了以下配置。enter link description here
swagger: "2.0"
info:
title: API Endpoints
description: API Endpoints
version: 1.0.1
schemes:
- https
produces:
- application/json
paths:
/indexes:
get:
summary: Return Search Indexes
operationId: searchIndexes
x-google-backend:
address: http://my_internal_dns_for_compute_engine.c.myproject.internal/indexes
path_translation: APPEND_PATH_TO_ADDRESS
responses:
"200":
description: A successful response
schema:
type: string
"403":
description: Failed to authenticate
当我使用 gcloud 部署配置时,出现以下错误
Waiting for API Config [my-api-config-v6] to be created for API [my-api]...failed.
ERROR: (gcloud.beta.api-gateway.api-configs.create) Wait for Service Config creation: Backend URL "http://my_internal_dns_for_compute_engine.c.myproject.internal/indexes" is forbidden: cannot route requests to an internal address.
看来内部 DNS 不受支持(很明显)。
我的计算引擎实例只能通过 VPC 网络访问。如何将我的 api 网关连接到 VPC 网络以及如何通过它访问我的计算引擎?
今天,你无法做到这一点。您的 API 网关是无服务器服务,您不能在其上插入 serverless VPC connector。我已经与 Google 讨论过这个问题(因为它与 Cloud Scheduler、Cloud Task 和 PubSub 推送订阅等问题相同)并且很快就会发生一些事情。敬请期待!!
无论如何,现在要解决您的问题,您有 2 个解决方案(至少,一个肯定的,一个要测试的)
- 第一个(肯定的)解决方案是拥有一个“代理”。另一个具有 public 访问权限的计算引擎,或具有无服务器 VPC 连接器的云 Function/Cloud Run/App 引擎服务。云 Function/Cloud Run/App 引擎更好,因为您可以使用 IAM 保护访问(无 public 访问)
- 第二个(测试)解决方案是部署 Cloud Endpoint, I mean ESPv2 on Cloud Run instead of using API gateway. In fact, API Gateway is, for now, a managed solution of ESPv2 on Cloud Run. And if you plug a serverless VPC connector on Cloud Run, it should work. I wrote an article on the ESPv2 & Cloud Run 用法。 如果我有时间,我会使用无服务器 VPC 连接器对其进行测试并让您知道。要不,你也试试吧。
编辑 1
我已经测试了第二种解决方案,它适用于内部 IP(以及云上的无服务器 VPC 连接器 运行 部署了 ESPv2 的端点服务),不适用于内部 DNS 名称。