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 项目中时,如何建立专用连接。

下图显示了从集成连接器到 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 测试