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。服务附件始终使用负载均衡器。因此,如果您的服务未部署在负载均衡器后面,则需要配置负载均衡器。

  1. 创建健康检查探测,并允许来自探测的流量。
    1. 创建健康检查探测。
      gcloud compute health-checks create tcp HEALTH_CHECK_NAME --port BACKEND_SERVER_PORT --region=REGION

      在此命令中,将 BACKEND_SERVER_PORT 设置为 3306,这是 MySQL 服务器的默认端口。

    2. 创建一条防火墙规则,以允许来自探测的流量。
      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
  2. 创建 L4 内部负载均衡器,并允许来自负载均衡器的流量。
    1. 创建后端服务
      gcloud compute backend-services create BACKEND_SERVICE --load-balancing-scheme=internal --protocol=tcp --health-checks=HEALTH_CHECK_NAME --health-checks-region=REGION 
    2. 将实例组添加到后端服务。
      gcloud compute backend-services add-backend BACKEND_SERVICE --instance-group=INSTANCE_GROUP_NAME --instance-group-zone=ZONE
    3. 创建转发规则
      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
    4. 创建防火墙规则,以允许从负载平衡器传入实例组的内部流量。
      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
  3. 创建服务连接
    1. 为 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
    2. 创建防火墙规则,允许从 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
    3. 创建需要明确批准的服务连接。
      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 服务连接后,请创建端点连接以使用 PSC 服务连接。如需了解详情,请参阅创建端点附件

不同 Google Cloud 项目之间的专用连接

本部分介绍了当后端服务和 PSC 服务连接位于不同的 Google Cloud 项目或 VPC 中时,如何建立专用连接。

下图显示了专用网络连接设置,其中 PSC 服务附件和后端服务位于不同的 Google Cloud 项目中:

如需为不同的 Google Cloud 项目设置专用连接,请完成以下步骤:

配置专用连接

如需配置专用连接,请执行以下步骤:

  1. 创建负载均衡器。如果您已有负载均衡器,请跳过此步骤。
    1. 创建可用区级 NEG。如需了解详情,请参阅创建区域性 NEG
    2. 将可用区级 NEG 添加为后端,然后创建以下规则:
      1. 创建转发规则
        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
      2. 创建防火墙规则,以允许从负载平衡器传入实例组的内部流量。
        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
  2. 创建服务连接
    1. 为 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
    2. 创建防火墙规则,允许从 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
    3. 创建需要明确批准的服务连接。
      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

将“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 地址向您的后端服务器发送流量。
    • Google Cloud 连接性测试可用于找出网络配置中的任何缺口。如需了解详情,请参阅创建和运行 Connectivity Tests