创建 VPC 访问连接器的混乱

问题描述 投票:0回答:3

我正在尝试设置无服务器 VPC 访问

无服务器 VPC 访问使您能够从 Cloud Functions 直接连接到 Compute Engine 虚拟机实例、Memorystore 实例、Cloud SQL 实例,

听起来很棒。但文档对于初学者来说并不是超级友好。第 2 步是创建一个连接器,对此我有几个问题:

在网络字段中,选择要连接的 VPC 网络。

我的下拉列表仅包含“默认”。这是正常的吗? IO 应该在这里看到什么?

在 IP 范围字段中,输入未使用的 CIDR /28 IP 范围。此范围内的地址用作通过连接器发送的流量的源地址。此 IP 范围不得与 VPC 网络中任何现有的 IP 地址预留重叠。

我不知道在这里做什么。我尝试使用链接文档中的信息,首先)输入我选择的区域的 IP,然后)输入该区域之外的 IP。两者都会导致创建的连接器出现错误。 “

Connector is in a bad state, manual deletion is recommended

如果创建失败,文档将继续执行几个故障排除步骤:

指定不与 VPC 网络中任何现有 IP 地址预留重叠的 IP 范围。

我不知道这意味着什么。也许就像,如果我有其他连接器,我应该确保新连接器的 IP 范围不会与这些连接器重叠。这只是一个猜测,但无论如何我没有。

授予您的项目使用ID为serverless-vpc-access-images的项目中的Compute Engine虚拟机映像的权限。有关如何相应更新组织策略的信息,请参阅设置图像访问限制。

这让我看到另一个关于更新我的组织的“图像政策”的文档。这个问题让我无法理解,我什至认为我不应该在这里。

这一切都始于

想要从 Firebase 连接到 SQL Server 实例。创建 VPC 连接器似乎是一个很好的步骤,但我在每个障碍上都遇到了困难。云居民可以帮我解决其中的一些困惑吗?

google-cloud-platform cloud google-cloud-sql vpc
3个回答
11
投票
我认为您已经解决了问题,但我会写一个答案来总结所有步骤以供将来参考。

1。创建无服务器 VPC 访问

我认为最好的参考是按照此

doc中的步骤操作。在步骤7中,它显示以下内容:

在 IP 范围字段中,输入未保留的 CIDR /28 IP 范围。

您可以使用的 IP 是例如 10.8.0.0/28 甚至 10.64.0.0/28,条件是它未用于任何其他网络。您可以前往

VPC 网络 > VPC 网络查看正在使用的 IP。在网络字段中,您将有“默认”选项,所以没关系。

这可能需要几分钟,因此在此期间您可以创建 SQL Server/MySQL/PostgreSQL 实例。

2。创建 CloudSQL 实例

创建您所需的实例(

MySQL/PostgreSQL/SQL Server)。在您的情况下,它将是一个 SQL Server 实例。另请检查这些步骤以在创建时为您的实例配置私有IP,或者如果您已经创建了实例,则可以检查this。记下私有 IP,稍后您将用到它。

3.创建云函数

在创建云函数之前,您需要授予CF服务帐号使用VPC的权限。请按照以下

步骤

然后按照以下

步骤配置您的函数的连接器以使用VPC。在第 5 步中,内容如下:

在 VPC 连接器字段中,按以下格式输入连接器的完全限定名称:

projects/PROJECT_ID/locations/REGION/connectors/CONNECTOR_NAME

无需使用此格式添加您的 VPC。已有一个列表可供您选择 VPC。最后部署你的函数。

我写了一个小函数来测试连接。我更喜欢使用 Python,但它比 NodeJS 需要更多的系统依赖。

index.js

var express = require('express'); var app = express(); var sql = require("mssql"); exports.helloWorld = (req, res) => { var config = { user: 'sqlserver', password: 'password', server: 'Your.SQL.Priavte.IP', database: 'dbname' }; // connect to your database sql.connect(config, function (err) { if (err) console.log(err); // create Request object var request = new sql.Request(); // query to the database and get the records request.query('select * from a_table', function (err, recordset) { if (err) console.log(err) // send records as a response res.send(recordset); }); }); };

package.json

{ "name": "sample-http", "version": "0.0.1", "dependencies": { "express": "4.17.1", "mssql": "6.0.1" } }

仅此而已! :D

值得一提的是,此过程更多的是关于将 Cloud Functions 连接到 SQL Server,因为已经有一种更简单的方法将 CF 连接到 PostgreSQL 和 MySQL。


0
投票
我发现此类连接器可以使用的 IP 数量存在硬性限制。您可以增加配额或切换到其他区域。 对 IP 的硬限制是通过免费套餐的配额来实现的

https://console.cloud.google.com/iam-admin/quotas

不在免费套餐中时,您可以请求增加配额。


0
投票
就我而言,我需要将

projects/serverless-vpc-access-images

 添加到 

https://console.cloud.google.com/iam-admin/orgpolicies/compute-trustedImageProjects

因为我们正在强制将图像项目列入白名单。

添加后,我就能够创建 VPC 连接器。

© www.soinside.com 2019 - 2024. All rights reserved.