我一直在尝试设置Google Cloud SQL的私有IP连接,它绑定到的IP范围是手动分配的,但没有成功。我不知道这是不是实现中的错误,因为它还处于测试阶段,是否文档中缺少了什么,或者我只是做错了什么。(底部有一个命令行会话,用于快速总结我所看到的内容。)
最初,我将其设置为自动分配IP范围。一切都运行得很好,除了它选择了172.17.0.0/24,这是我的GCE实例上由docker管理的网络之一,所以我无法从那里连接(但可以在没有docker的另一台机器上连接)。因此,我尝试了手动分配的路线。
首先,我删除了为我创建的所有相关网络对象。有两个VPC Peerings,cloudsql-postgres-googleapis-com和servicenetworking-googleapis-com,我删除了它们,然后我确认与它们关联的路由条目也消失了。
然后,我按照https://cloud.google.com/vpc/docs/configure-private-services-access#allocating-range的指示创建了10.10.0.0/16,因为我想在我的default网络中创建它,这是自动模式,所以我被限制在下半部分(目前是清楚的)。
在这一点上,我返回到Cloud SQL实例创建页面,因为它应该为我完成其余的工作。我勾选了“私有IP”框,选择了default网络。
我当时没有做笔记,所以我的记忆可能是有缺陷的,特别是因为我在后来的尝试中的经验总是不同的,但我记得看到的是在网络选择下拉列表下面,它说“此实例将使用现有的托管服务连接”。我认为这意味着它将使用我创建的地址范围,并继续创建实例,但该实例再次登录到172.17.0.0/24网络。
回到第三次,也就是之前那条消息的地方,它有一个列出了我的地址范围的选择框。再说一次,我的记忆力很差,所以我不知道我是看到还是点击了“连接”按钮,但最终结果是一样的。
在第四次尝试时,我确实注意到了"Connect“按钮,并确保单击它,并等待它显示成功。在某种程度上,它确实做到了:它用我之前看到的关于使用现有连接的相同消息替换了下拉菜单和按钮。同样,该实例是在错误的网络上创建的。
我尝试了第五次,这一次创建了一个新的地址范围,并使用了一个新的名称-- google-managed-services-default --这是我第一次启动时自动分配给它的名称(也是私有服务访问文档所建议的)。但即使有了这个名字,并明确地选择了它,我仍然在错误的网络上得到了实例。
实际上,我现在看到,在单击"Connect“之后,我可以检查路由,并看到创建的路由是到172.17.0.0/24的。
如果我从命令行执行所有操作,似乎也会发生同样的事情:
$ gcloud beta compute addresses list
NAME ADDRESS/RANGE TYPE PURPOSE NETWORK REGION SUBNET STATUS
google-managed-services-default 10.11.0.0/16 INTERNAL VPC_PEERING default RESERVED
$ gcloud beta services vpc-peerings connect \
--service=servicenetworking.googleapis.com \
--ranges=google-managed-services-default \
--network=default \
--project=...
$ gcloud beta services vpc-peerings list --network=default
---
network: projects/.../global/networks/default
peering: servicenetworking-googleapis-com
reservedPeeringRanges:
- google-managed-services-default
---
network: projects/.../global/networks/default
peering: cloudsql-postgres-googleapis-com
reservedPeeringRanges:
- google-managed-services-default
$ gcloud beta compute routes list
NAME NETWORK DEST_RANGE NEXT_HOP PRIORITY
peering-route-ad7b64a0841426ea default 172.17.0.0/24 cloudsql-postgres-googleapis-com 1000所以现在我不确定还能尝试什么。是不是有什么状态是我没想清楚的?如何将路由连接到地址范围?当我只要求一个时,为什么它创造了两个peerings?如果我手动创建到正确地址范围的路由,我认为这不会起作用,因为Postgres端点仍然位于错误的地址。
(是的,我可以重新配置docker,但我不希望这样做。)
发布于 2019-01-26 08:54:45
我在这里发现https://cloud.google.com/sql/docs/mysql/private-ip,这似乎是正确的行为:
当您建立了内网服务访问连接,并创建了为该连接配置了内网IP的云SQL实例后,云SQL服务所使用的对应(内部)子网和范围将无法修改和删除。删除对等项和您的网段也是如此。内部配置建立后,在同一地域创建的内网IP配置的云SQL实例将使用原有的内部配置。
发布于 2019-03-26 05:12:28
事实证明,Google Cloud的服务机制中的某个地方存在错误,现在已经修复。有关参考,请参阅https://issuetracker.google.com/issues/118849070上的对话。
https://stackoverflow.com/questions/53112449
复制相似问题