Google Cloud VPC 中的网络连接
本页介绍了如何设置从 Integration Connectors 到后端服务(例如托管在 Google Cloud VPC 中的 MySQL、Postgres 和 SQL Server)的专用连接。
本页面假定您熟悉以下概念:
与 Google Cloud VPC 的专用连接可以属于以下任一类别:
- 后端服务和 PSC 服务连接都位于同一 Google Cloud 项目或 VPC 中。
- 后端服务和 PSC 服务附件位于不同的 Google Cloud 项目或 VPC 中。
注意事项
创建 PSC 服务连接时,请考虑以下要点:
- PSC 服务连接和负载均衡器是在同一 VPC 内的不同子网中创建的。具体而言,服务连接始终是在 NAT 子网中创建的。
- 来自负载均衡器和健康检查探测的流量应发送到同一端口。
- 配置防火墙规则以促进流量流动。
入站规则
来自 PSC 服务附件的子网的流量应到达您的后端服务。
出站规则
除非配置了特定的拒绝规则,否则 Google Cloud 项目中默认启用出站流量。
- 您的所有 Google Cloud 组件(例如 PSC 服务连接和负载均衡器)都应位于同一区域。
与 Google Cloud VPC 中的后端服务的专用连接
本部分介绍了当后端服务和 PSC 服务附件位于同一 Google Cloud 项目中时,如何建立专用连接。
下图显示了从 Integration Connectors 到 Google Cloud VPC 中托管的服务的专用网络连接设置:
如需在 Google Cloud VPC 中设置与后端服务的专用连接,请完成以下步骤:
创建 PSC 服务连接
如需通过 Integration Connectors 建立专用连接,您必须使用 PSC 服务连接将服务公开给 Integration Connectors。服务附件始终使用负载均衡器。因此,如果您的服务未部署在负载均衡器后面,则需要配置负载均衡器。
- 创建健康检查探测,并允许来自探测的流量。
- 创建健康检查探测。
gcloud compute health-checks create tcp HEALTH_CHECK_NAME --port BACKEND_SERVER_PORT --region=REGION
在此命令中,将 BACKEND_SERVER_PORT 设置为 3306,这是 MySQL 服务器的默认端口。
- 创建一条防火墙规则,以允许来自探测的流量。
gcloud compute firewall-rules create VPC_NETWORK-allow-health-check --direction=INGRESS --priority=1000 --network=VPC_NETWORK --allow=tcp:BACKEND_SERVER_PORT --source-ranges=35.191.0.0/16,130.211.0.0/22
- 创建健康检查探测。
- 创建 L4 内部负载均衡器,并允许来自负载均衡器的流量。
- 创建后端服务。
gcloud compute backend-services create BACKEND_SERVICE --load-balancing-scheme=internal --protocol=tcp --health-checks=HEALTH_CHECK_NAME --health-checks-region=REGION
- 将实例组添加到后端服务。
gcloud compute backend-services add-backend BACKEND_SERVICE --instance-group=INSTANCE_GROUP_NAME --instance-group-zone=ZONE
- 创建转发规则。
gcloud compute forwarding-rules create FORWARDING_RULE_NAME --load-balancing-scheme=internal --network=VPC_NETWORK --subnet=SUBNET_NAME_2 --ip-protocol=TCP --ports=BACKEND_SERVER_PORT --backend-service=BACKEND_SERVICE --backend-service-region=REGION
-
创建防火墙规则,以允许从负载平衡器传入实例组的内部流量。
gcloud compute firewall-rules create VPC_NETWORK-allow-internal --direction=INGRESS --priority=1000 --network=VPC_NETWORK --action=ALLOW --rules=all --source-ranges=SUBNET_RANGE_2
- 创建后端服务。
- 创建服务连接
- 为 PSC NAT 创建子网。以下命令会创建一个名称为
psc-nat-subnet1
且用途为PRIVATE_SERVICE_CONNECT
的子网。gcloud compute networks subnets create psc-nat-subnet1 \ --network=VPC_NETWORK --range=SUBNET_RANGE_1 \ --purpose=PRIVATE_SERVICE_CONNECT
- 创建防火墙规则,允许从 PSC NAT 到负载均衡器的流量。
gcloud compute network-firewall-policies rules create PRIORITY --firewall-policy FIREWALL_POLICY_NAME_SA \ --direction=INGRESS --network=VPC_NETWORK \ --action=allow --allow=tcp:BACKEND_SERVER_PORT --src-ip-ranges=SUBNET_RANGE_1
- 创建需要明确批准的服务连接。
gcloud compute service-attachments create SERVICE_ATTACHMENT_NAME --producer-forwarding-rule=FORWARDING_RULE_NAME --connection-preference=ACCEPT_MANUAL --consumer-accept-list=SERVICE_DIRECTORY_PROJECT_ID=LIMIT --nat-subnets=psc-nat-subnet1
在此命令中,LIMIT 是项目的连接限制。连接限制是指可以连接到此服务的使用方 PSC 端点的数量。如需获取 SERVICE_DIRECTORY_PROJECT_ID,请执行以下步骤:
-
您可以创建 PSC 服务附件,使其仅接受来自指定 Google Cloud 项目的请求。不过,若要执行此操作,您需要知道与 Google Cloud 项目关联的服务目录的项目 ID。如需获取服务目录的项目 ID,您可以使用 List Connections API,如以下示例所示。
语法
curl -X GET \ -H "authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json" \ "https://connectors.googleapis.com/v1/projects/CONNECTORS_PROJECT_ID/locations/-/connections"
请替换以下内容:
- CONNECTORS_PROJECT_ID:您创建关联时所用的 Google Cloud 项目的 ID。
示例
此示例会获取
connectors-test
Google Cloud 项目的服务目录的项目 ID。curl -X GET \ -H "authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json" \ "https://connectors.googleapis.com/v1/projects/connectors-test/locations/-/connections"
在终端上运行此命令会显示类似如下所示的输出:
..... { "connections": [ { "name": "projects/connectors-test/locations/asia-northeast1/connections/big-query-iam-invalid-sa", "createTime": "2022-10-07T09:02:31.905048520Z", "updateTime": "2022-10-07T09:22:39.993778690Z", "connectorVersion": "projects/connectors-test/locations/global/providers/gcp/connectors/bigquery/versions/1", "status": { "state": "ACTIVE" }, "configVariables": [ { "key": "project_id", "stringValue": "connectors-test" }, { "key": "dataset_id", "stringValue": "testDataset" } ], "authConfig": {}, "serviceAccount": "564332356444-compute@developer.gserviceaccount.com", "serviceDirectory": "projects/abcdefghijk-tp/locations/asia-northeast1/namespaces/connectors/services/runtime", "nodeConfig": { "minNodeCount": 2, "maxNodeCount": 50 } }, ....
在示例输出结果中,对于
connectors-test
Google Cloud 项目,服务目录的项目 ID 为abcdefghijk-tp
。
-
- 为 PSC NAT 创建子网。以下命令会创建一个名称为
创建 PSC 服务连接后,请创建端点连接以使用 PSC 服务连接。如需了解详情,请参阅创建端点附件。
不同 Google Cloud 项目之间的专用连接
本部分介绍了当后端服务和 PSC 服务连接位于不同的 Google Cloud 项目或 VPC 中时,如何建立专用连接。
下图显示了专用网络连接设置,其中 PSC 服务附件和后端服务位于不同的 Google Cloud 项目中:
如需为不同的 Google Cloud 项目设置专用连接,请完成以下步骤:
配置专用连接
如需配置专用连接,请执行以下步骤:
- 创建负载均衡器。如果您已有负载均衡器,请跳过此步骤。
- 创建可用区级 NEG。如需了解详情,请参阅创建区域性 NEG。
- 将可用区级 NEG 添加为后端,然后创建以下规则:
- 创建转发规则。
gcloud compute forwarding-rules create FORWARDING_RULE_NAME \ --load-balancing-scheme=internal --network=VPC_NETWORK --subnet=SUBNET_NAME_2 \ --ip-protocol=TCP --ports=BACKEND_SERVER_PORT --backend-service=BACKEND_SERVICE \ --backend-service-region=REGION
-
创建防火墙规则,以允许从负载平衡器传入实例组的内部流量。
gcloud compute firewall-rules create FIREWALL_RULE_NAME_INTERNAL \ --direction=INGRESS --priority=1000 --network=VPC_NETWORK \ --action=ALLOW --rules=all --source-ranges=SUBNET_RANGE_2
- 创建转发规则。
- 创建服务连接
- 为 PSC NAT 创建子网。以下命令会创建一个名称为
psc-nat-subnet1
且用途为PRIVATE_SERVICE_CONNECT
的子网。gcloud compute networks subnets create psc-nat-subnet1 \ --network=VPC_NETWORK --range=SUBNET_RANGE_1 \ --purpose=PRIVATE_SERVICE_CONNECT
- 创建防火墙规则,允许从 PSC NAT 到负载均衡器的流量。
gcloud compute network-firewall-policies rules create PRIORITY --firewall-policy FIREWALL_POLICY_NAME_SA \ --direction=INGRESS --network=VPC_NETWORK \ --action=allow --allow=tcp:BACKEND_SERVER_PORT --src-ip-ranges=SUBNET_RANGE_1
- 创建需要明确批准的服务连接。
gcloud compute service-attachments create SERVICE_ATTACHMENT_NAME --producer-forwarding-rule=FORWARDING_RULE_NAME --connection-preference=ACCEPT_MANUAL --consumer-accept-list=SERVICE_DIRECTORY_PROJECT_ID=LIMIT --nat-subnets=psc-nat-subnet1
在此命令中,LIMIT 是项目的连接限制。连接限制是指可以连接到此服务的使用方 PSC 端点的数量。如需获取 SERVICE_DIRECTORY_PROJECT_ID,请执行以下步骤:
-
您可以创建 PSC 服务附件,使其仅接受来自指定 Google Cloud 项目的请求。不过,若要执行此操作,您需要知道与 Google Cloud 项目关联的服务目录的项目 ID。如需获取服务目录的项目 ID,您可以使用 List Connections API,如以下示例所示。
语法
curl -X GET \ -H "authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json" \ "https://connectors.googleapis.com/v1/projects/CONNECTORS_PROJECT_ID/locations/-/connections"
请替换以下内容:
- CONNECTORS_PROJECT_ID:您创建关联时所用的 Google Cloud 项目的 ID。
示例
此示例会获取
connectors-test
Google Cloud 项目的服务目录的项目 ID。curl -X GET \ -H "authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json" \ "https://connectors.googleapis.com/v1/projects/connectors-test/locations/-/connections"
在终端上运行此命令会显示类似如下所示的输出:
..... { "connections": [ { "name": "projects/connectors-test/locations/asia-northeast1/connections/big-query-iam-invalid-sa", "createTime": "2022-10-07T09:02:31.905048520Z", "updateTime": "2022-10-07T09:22:39.993778690Z", "connectorVersion": "projects/connectors-test/locations/global/providers/gcp/connectors/bigquery/versions/1", "status": { "state": "ACTIVE" }, "configVariables": [ { "key": "project_id", "stringValue": "connectors-test" }, { "key": "dataset_id", "stringValue": "testDataset" } ], "authConfig": {}, "serviceAccount": "564332356444-compute@developer.gserviceaccount.com", "serviceDirectory": "projects/abcdefghijk-tp/locations/asia-northeast1/namespaces/connectors/services/runtime", "nodeConfig": { "minNodeCount": 2, "maxNodeCount": 50 } }, ....
在示例输出结果中,对于
connectors-test
Google Cloud 项目,服务目录的项目 ID 为abcdefghijk-tp
。
-
- 为 PSC NAT 创建子网。以下命令会创建一个名称为
将“Integration Connectors”项目列入服务附件的许可名单
您可以创建 PSC 服务附件,使其仅接受来自指定 Google Cloud 项目的请求。不过,为此,您需要与 Google Cloud 项目关联的服务目录的项目 ID。如需获取服务目录的项目 ID,您可以使用 List Connections API,如以下示例所示。
语法
curl -X GET \ -H "authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json" \ "https://connectors.googleapis.com/v1/projects/CONNECTORS_PROJECT_ID/locations/-/connections"
请替换以下内容:
- CONNECTORS_PROJECT_ID:您创建关联时所用的 Google Cloud 项目的 ID。
示例
此示例会获取 connectors-test
Google Cloud 项目的服务目录的项目 ID。
curl -X GET \ -H "authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json" \ "https://connectors.googleapis.com/v1/projects/connectors-test/locations/-/connections"
在终端上运行此命令会显示类似如下所示的输出:
..... { "connections": [ { "name": "projects/connectors-test/locations/asia-northeast1/connections/big-query-iam-invalid-sa", "createTime": "2022-10-07T09:02:31.905048520Z", "updateTime": "2022-10-07T09:22:39.993778690Z", "connectorVersion": "projects/connectors-test/locations/global/providers/gcp/connectors/bigquery/versions/1", "status": { "state": "ACTIVE" }, "configVariables": [ { "key": "project_id", "stringValue": "connectors-test" }, { "key": "dataset_id", "stringValue": "testDataset" } ], "authConfig": {}, "serviceAccount": "564332356444-compute@developer.gserviceaccount.com", "serviceDirectory": "projects/abcdefghijk-tp/locations/asia-northeast1/namespaces/connectors/services/runtime", "nodeConfig": { "minNodeCount": 2, "maxNodeCount": 50 } }, ....
在示例输出结果中,对于 connectors-test
Google Cloud 项目,服务目录的项目 ID 为 abcdefghijk-tp
。
在 PSC 服务连接中将 Integration Connectors 项目列入许可名单后,创建一个端点连接以使用 PSC 服务连接。如需了解详情,请参阅创建端点附件。
创建端点连接
将端点附件作为 IP 地址如需了解如何将端点附件创建为 IP 地址,请参阅将端点附件创建为 IP 地址。
将端点连接用作主机名在某些情况下(例如启用了 TLS 的后端),目的地要求您使用主机名(而非专用 IP)执行 TLS 验证。如果为主机目的地使用专用 DNS 而非 IP 地址,除了将端点附件创建为 IP 地址之外,您还必须配置托管式区域。如需了解如何将端点附件创建为主机名,请参阅将端点附件创建为主机名。
稍后,在将连接配置为使用端点连接时,您可以选择此端点连接。
配置连接以使用端点连接
现在,您已创建端点连接,接下来可以在关联中使用该端点连接。创建新连接或更新现有连接时,在“目标”部分中,选择端点连接作为目标类型,然后从端点连接列表中选择您创建的端点连接。
如果您创建了托管区域,请选择主机地址作为目标类型,并使用您在创建托管区域时创建的 A 记录。
问题排查提示
如果您在使用专用连接时遇到问题,请遵循本部分列出的准则,以免出现常见问题。
- 如需验证端点附件是否设置正确且 PSC 连接是否已建立,请检查连接状态。如需了解详情,请参阅验证端点附件连接。
- 确保防火墙规则采用以下配置:
- 您必须允许来自 PSC 服务附件的子网的流量到达您的后端服务。
- 负载均衡器必须能够将流量发送到您的后端服务。
- 直通式负载平衡器 (L4 TCP/UDP ILB)
来自 PSC 服务附件的 NAT IP 的请求必须能够到达您的后端。这些 NAT IP 地址是从 PSC NAT 子网范围自动分配的,因此您必须允许服务附件所在的整个 NAT 子网 IP 地址范围。如需查找 PSC NAT 子网,请使用以下命令:
gcloud compute networks subnets list --project=PROJECT_ID --region=REGION --filter="purpose=PRIVATE_SERVICE_CONNECT"
- 基于代理/HTTP(S) 负载均衡器 (L4 代理 ILB、L7 ILB)
来自代理负载均衡器的请求来自该区域的代理专用子网。因此,您需要配置防火墙规则,以允许来自代理专用子网范围的请求到达您的后端。如需查找代理专用子网,请使用以下命令:
gcloud compute networks subnets list --project=PROJECT_ID --region=REGION --filter="purpose=REGIONAL_MANAGED_PROXY"
- 健康检查探测必须能够访问您的后端系统。Google Cloud 健康检查探测具有固定的 IP 地址范围(35.191.0.0/16、130.211.0.0/22)。因此,必须允许这些 IP 地址向您的后端服务器发送流量。
如需了解如何排查负载平衡器问题,请参阅排查内部应用负载平衡器问题。
- 直通式负载平衡器 (L4 TCP/UDP ILB)
来自 PSC 服务附件的 NAT IP 的请求必须能够到达您的后端。这些 NAT IP 地址是从 PSC NAT 子网范围自动分配的,因此您必须允许服务附件所在的整个 NAT 子网 IP 地址范围。如需查找 PSC NAT 子网,请使用以下命令:
- Google Cloud 连接性测试可用于找出网络配置中的任何缺口。如需了解详情,请参阅创建和运行 Connectivity Tests。