无法使用无服务器 VPC 访问设置 Google Cloud Memorystore redis 实例

Unable to setup Google Cloud Memorystore redis instance with Serverless VPC access

我想设置一个 Google Cloud memorystore redis 实例并通过我的 google 云功能连接到它。遵循本指南后 https://thecloudfunction.com/blog/firebase-cloud-functions-and-redis/

我理解的一般步骤是:

  1. 启用无服务器 VPC 服务并创建一个连接器供我的函数使用。
  2. 启用redis并在同一IP地址范围内创建一个redis实例。

问题是,如果我先创建连接器(步骤 #1),然后在尝试创建 redis 实例(步骤 #2)时出现此错误:

Server response: Invalid value for field 'resource.ipCidrRange': '10.92.0.0/28'. Invalid IPCidrRange: 10.92.0.0/28 conflicts with peer network in active peering 'redis-peer-863826821838'.

如果我尝试翻转这些步骤,首先创建 redis 实例(第 2 步),然后创建连接器(第 1 步),然后在尝试创建连接器时出现此错误:

connector is in a bad state manual deletion recommended

根据第一个错误,我认为这是一些 IP 范围冲突的问题,但查看 VPC 连接我没有发现任何地方存在冲突:

据我了解,其中 none 应该与我 10.92.0.0/28 的 IP 范围冲突,对吗?

所有这一切都发生在 us-central1

想知道是否有人知道如何正确设置 redis 实例 + 连接器并克服这些错误,或者是否有人对在哪里查找此 IP 范围冲突以及如何解决它有任何建议。

谢谢!

好的,终于可以使用了。对于其他在这个问题上苦苦挣扎的人,这是我必须做的:

  1. 创建一个redis实例,而不是手动输入Instance IP address range。跳过字段并在没有字段的情况下创建它。这将生成一个不与任何其他范围冲突的 redis 实例。例如10.51.123.233
  2. 现在创建连接器并将其设置为创建的redis实例的ip范围。例如,如果您的 redis 实例生成了 10.51.123.233 的 IP,那么您需要将连接 IP 范围设置为 10.51.0.0/28

IP 地址将由服务 'occupied'

我正在使用 the official guide 学习 GCP 功能和 Redis。综上所述...

了解一下 CIDR 很有用。我发现这个 online tool 很有帮助。

  • 本质上 /28 表示 32 位中有多少位是 'locked' 作为前缀。 28 留下 4 个通配位即 16 个地址

Redis 和连接器地址不能重叠。像 OP 一样,我以为我正在将 redis IP 连接到该函数,但这是错误的。您的 VPC 内的 IP 地址将被连接器 'occupied'。 redis 也一样。

我通过指定自定义子网(使用 CIDR 10.1.0.0/28 预先创建)成功创建了连接器实例

gcloud compute networks vpc-access connectors create connector6 \
--region=us-central1 \
--subnet=connector-subnet \
--machine-type f1-micro

但是,为 redis 实例创建子网不起作用。相反,创建了一个 'redis-peer-...' VPC 网络对等点并导致上面 OP 中的 ip 冲突消息。

# BAD: Creating subnet 'redis-subnet' with CIDR 10.2.0.0/28
gcloud redis instances create redis6 \
--region=us-central1 --redis-version=redis_5_0 \
--network=vpc1 --reserved-ip-range=10.2.0.0/28

指定新的 IP 范围有效。

gcloud redis instances create redis6 \
--region=us-central1 --redis-version=redis_5_0 \
--network=vpc1 --reserved-ip-range=10.3.0.0/28

最后,再次部署函数成功了。

gcloud functions deploy visitCount \
--runtime nodejs10 \
--trigger-http \
--region us-central1 \
--vpc-connector projects/fc-redis-tutorial/locations/us-central1/connectors/connector6 \
--set-env-vars REDISHOST=10.3.0.3,REDISPORT=6379