Google Cloud 托管服务中的网络连接

本页面介绍了如何设置从 Integration Connectors 到后端服务 (例如 CloudSQL for MySQLCloudSQL for PostgreSQLCloudSQL for SQL Server)的专用连接。本页面假定您熟悉以下概念:

注意事项

创建 PSC 服务连接时,请考虑以下要点:

  • PSC 服务连接和负载均衡器是在同一 VPC 内的不同子网中创建的 。具体而言,服务连接始终在 NAT 子网中创建。
  • SOCKS5 代理服务器必须绑定到 0.0.0.0:<port> IP 地址,因为此地址 是负载均衡器和健康检查探测的入站流量所必需的。如需了解详情,请参阅 健康检查
  • 来自负载均衡器和健康检查探测的流量应发送到同一端口。
  • 配置防火墙规则以方便流量流动。

    入站规则

    • 来自 PSC 服务连接的子网的流量应到达您的后端服务。
    • 在 ILB 的子网内,ILB 应能够向 SOCKS5 代理服务器发送流量。
    • 健康检查探测应能够访问 SOCKS5 代理服务器。Google Cloud 健康检查探测具有固定的 IP 范围 (35.191.0.0/16, 130.211.0.0/22)。因此,这些 IP 可以被允许向 SOCKS 代理服务器发送流量。

    出站规则

    除非配置了特定的拒绝规则,否则 Google Cloud 项目中默认启用出站流量。

  • 您的所有 Google Cloud 组件(例如 PSC 服务连接和负载均衡器)都应位于同一区域中。
  • 确保您的 SOCKS5 代理服务器在以下场景中接受流量:
    • 直通式负载平衡器(L4 TCP/UDP ILB): 来自 PSC 服务 连接的 NAT IP 的请求应能够到达您的 SOCKS5 代理服务器。因此,您必须 允许服务连接的整个 NAT 子网的 IP 范围。如需了解详情, 请参阅 Private Service Connect 子网
    • 基于代理的/HTTP(s) 负载均衡器(L4 代理 ILB、L7 ILB): 所有新请求 源自负载均衡器。因此,您的 SOCKS5 代理服务器应接受来自 VPC 网络的代理子网的请求。如需了解详情,请参阅 基于 Envoy 的负载平衡器的代理专用子网

配置专用连接

一些托管式 Google Cloud 服务(例如 CloudSQL MySQL )会公开 PSC 服务连接以实现专用连接。在这些情况下, 您可以跳过此步骤来创建 PSC 服务连接,并且可以使用代管式服务提供的 PSC 服务连接来创建 Integration Connectors 端点连接。

在以下情况下,您必须创建新的 PSC 服务连接:

  • Google Cloud 代管式服务不公开服务连接, 但使用专用服务访问通道公开 IP 地址。
  • Google Cloud 代管式服务公开服务连接,但 不允许将 Integration Connectors 项目列入许可名单以使用该服务连接。

以下部分详细介绍了针对这两种情况创建服务连接的步骤 。创建服务连接后,您必须创建端点连接配置连接以使用该端点连接。

为限制访问的代管式服务创建服务连接

代管式服务可能不允许将 Integration Connectors 项目列入许可名单以使用其公开的服务连接。在这种情况下,您必须创建一个使用该服务连接的负载均衡器,并通过在您的项目中创建另一个服务连接来向 Integration Connectors 公开该负载均衡器。

下图显示了一个公开服务连接的代管式服务:

如需查看公开服务连接的代管式服务的示例,请参阅 MongoDB Atlas 集群的专用连接

创建以 PSC NEG 作为后端的负载均衡器

  1. 创建 NEG 以连接到已发布的服务。
  2. 将后端添加到区域级内部代理网络负载平衡器。

如需了解详情,请参阅创建 Private Service Connect NEG

创建服务连接

  1. 为 PSC NAT 创建子网。
  2. 创建防火墙规则,以允许从 PSC NAT 到负载均衡器的请求
  3. 创建服务连接。

如需了解详情,请参阅创建 PSC 服务连接

允许来自 Integration Connectors 项目的 Private Service Connect 连接

如需了解如何将来自 Integration Connectors 项目的 Private Service Connect 连接列入许可名单,请参阅将 Integration Connectors 列入许可名单

为公开 IP 地址的代管式服务创建服务连接

如果代管式服务不公开服务连接,则来自 Integration Connectors 的流量必须通过您的项目进行代理。

下图显示了一个不公开服务连接的代管式服务:

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

  1. 创建 PSC 服务连接。
    1. 创建 Compute Engine 虚拟机实例 以运行 SOCKS5 代理服务器。
      1. 创建代理实例 1。
        gcloud compute instances create PROXY_INSTANCE_1 \
                    --project=PROJECT_ID \
                    --network-interface=network-tier=PREMIUM,subnet=SUBNET_NAME_2,no-address
                  

      您可以根据需要创建任意数量的虚拟机实例。

    2. 创建防火墙规则,以允许对虚拟机实例进行 SSH。
      gcloud compute firewall-rules create FIREWALL_RULE_NAME_SSH \
                  --direction=INGRESS --priority=1000 --network=VPC_NETWORK --allow=tcp:22
                  
    3. 虚拟机实例将用于将来自 Integration Connectors 流量代理到代管式服务。在虚拟机实例中安装 SOCKS5 代理 。Cloud SQL Auth 代理支持 通过 SOCKS5 代理进行链接,这使您可以将加密流量从 Cloud SQL Auth 代理转发到目标 Cloud SQL 实例。

      安装和配置 SOCKS5 代理服务器的详细步骤不在本文档的讨论范围内,您可以安装任意您选择的 SOCKS5 代理。以下步骤展示了如何安装和配置 Dante SOCKS5 代理服务器。

      1. 通过 SSH 连接到您的虚拟机实例。
        gcloud compute ssh \
                    --tunnel-through-iap \
                    PROXY_INSTANCE_1
                
      2. 安装 Dante SOCKS5 代理服务器。
        sudo apt update
                sudo apt install dante-server
      3. 检查服务器接口。
        sudo ip a
      4. 创建 Dante 配置的备份。
        sudo mv /etc/danted.conf /etc/danted.conf.bak
      5. 创建新的 Dante 配置文件。
        sudo nano /etc/danted.conf
      6. 将以下配置复制到配置文件:
        logoutput: /var/log/socks.log
                # Bind the server to the 0.0.0.0 IP address to allow traffic
                # traffic from the load balancer and the health check probes.
                internal: 0.0.0.0 port = 1080
                external: ens4
                clientmethod: none
                socksmethod: none
                user.privileged: root
                user.notprivileged: nobody
                client pass {
                        from: 0.0.0.0/0 to: 0.0.0.0/0
                        log: error connect disconnect
                }
                client block {
                        from: 0.0.0.0/0 to: 0.0.0.0/0
                        log: connect error
                }
                socks pass {
                        from: 0.0.0.0/0 to: 0.0.0.0/0
                        log: error connect disconnect
                }
                socks block {
                        from: 0.0.0.0/0 to: 0.0.0.0/0
                        log: connect error
                }
      7. 重启 Dante 服务器并检查状态。
        sudo systemctl restart danted
                sudo systemctl status danted
      8. 退出虚拟机实例。
        exit
    4. 创建以虚拟机实例作为后端的负载均衡器。
      1. 创建非托管实例组
        gcloud compute instance-groups unmanaged create INSTANCE_GROUP_NAME
      2. 将第 3 步中创建的虚拟机实例添加到该组。
        gcloud compute instance-groups unmanaged add-instances INSTANCE_GROUP_NAME \
                    --instances=PROXY_INSTANCE_1
      3. 创建健康检查探测并允许来自该探测的流量。
        1. 创建健康检查探测。
          gcloud compute health-checks create tcp HEALTH_CHECK_NAME \
                      --port BACKEND_SERVER_PORT --region=REGION

          在此命令中,将 BACKEND_SERVER_PORT 设置为 1080,这是 SOCKS5 代理服务器运行的默认端口。

        2. 创建防火墙规则,以允许来自该探测的流量。
          gcloud compute firewall-rules create FIREWALL_RULE_NAME_HEALTHCHECK \
                      --direction=INGRESS --priority=1000 --network=VPC_NETWORK --allow=tcp:BACKEND_SERVER_PORT \
                      --source-ranges=35.191.0.0/16,130.211.0.0/22
      4. 创建 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 FIREWALL_RULE_NAME_INTERNAL \
                      --direction=INGRESS --priority=1000 --network=VPC_NETWORK \
                      --action=ALLOW --rules=all --source-ranges=SUBNET_RANGE_2

      创建端点连接

      为代管式服务创建服务连接后,您必须创建端点连接,然后在连接中使用该端点连接。

      端点连接作为 IP 地址

      如需了解如何创建作为 IP 地址的端点连接, 请参阅创建作为 IP 地址的端点连接

      端点连接作为主机名

      在某些情况下(例如启用 TLS 的后端),目标需要您使用 主机名而不是专用 IP 来执行 TLS 验证。在这些情况下,如果使用专用 DNS 而不是 IP 地址作为主机目标,除了创建作为 IP 地址的端点 连接之外,您还必须配置代管区域。如需了解如何 创建作为主机名的端点连接, 请参阅创建作为主机名的端点连接

      稍后,当您配置连接以使用端点连接时,可以选择此端点连接。

      配置连接以使用端点连接

      现在您已创建端点连接,请在连接中使用该端点连接。创建新连接或更新现有连接时,在“目标”部分中,选择端点连接 作为目标类型 ,然后从端点连接 列表中选择您创建的端点连接。

      如果您创建了代管区域,请选择主机地址 作为目标类型 ,并使用在创建代管区域时创建的 A 记录。

      问题排查提示

      如果您在专用连接方面遇到问题,请遵循本部分列出的准则,以避免常见问题。

      • 确保在服务连接中将连接器的租户项目列入许可名单。
      • 确保防火墙规则具有以下配置:
        • 必须允许来自 PSC 服务连接的子网的流量到达您的后端服务。
        • 健康检查探测必须能够访问您的后端系统。Google Cloud 健康检查探测具有固定的 IP 范围 (35.191.0.0/16, 130.211.0.0/22)。因此,必须允许这些 IP 地址向您的后端服务器发送流量。
      • 您可以使用 Google Cloud Connectivity Test 来识别网络配置中的任何缺口。如需了解详情,请参阅 创建和运行 Connectivity Tests