Google Cloud VPC 中的网络连接

本页介绍了如何设置从集成连接器到后端服务(例如托管在 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 项目中时,如何建立专用连接。

下图显示了从集成连接器到 Google Cloud VPC 中托管的服务的专用网络连接设置:

如需在 Google Cloud VPC 中设置与后端服务的专用连接,请完成以下步骤:

创建 PSC 服务连接

如需通过集成连接器建立专用连接,您必须使用 PSC 服务连接将服务公开给集成连接器。服务附件始终使用负载平衡器。因此,如果您的服务未部署在负载平衡器后面,则需要配置负载平衡器。

  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 服务连接中将集成连接器项目列入许可名单后,创建一个端点连接以使用 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