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

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

注意事项

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

  • PSC 服务连接和负载均衡器是在同一 VPC 内的不同子网中创建的。具体而言,服务连接始终是在 NAT 子网中创建的。
  • SOCKS5 代理服务器必须绑定到 0.0.0.0:<port> IP 地址,因为来自负载均衡器和健康检查探测的传入流量需要此 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 代理服务器才能连接到专用 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 Tests