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 项目列入许可名单 服务连接

为这两种场景创建服务连接的步骤 下文将对其进行详细介绍。创建服务附件后,您必须创建端点附件配置连接,才能使用端点附件。

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

托管式服务可能不允许将集成连接器项目列入许可名单,以便其使用所公开的服务附件。在这种情况下,您必须创建一个负载均衡器来使用服务附件,并通过在项目中创建另一个服务附件将负载均衡器公开给集成连接器。

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

创建具有 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. 虚拟机实例将用于将流量从集成连接器代理到托管服务。安装 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 测试