Google Cloud 托管服务中的网络连接
本页面介绍了如何设置从 Integration Connectors 到后端服务 (例如 CloudSQL for MySQL、CloudSQL for PostgreSQL 和 CloudSQL 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 作为后端的负载均衡器
- 创建 NEG 以连接到已发布的服务。
- 将后端添加到区域级内部代理网络负载平衡器。
如需了解详情,请参阅创建 Private Service Connect NEG。
创建服务连接
- 为 PSC NAT 创建子网。
- 创建防火墙规则,以允许从 PSC NAT 到负载均衡器的请求
- 创建服务连接。
如需了解详情,请参阅创建 PSC 服务连接
允许来自 Integration Connectors 项目的 Private Service Connect 连接
如需了解如何将来自 Integration Connectors 项目的 Private Service Connect 连接列入许可名单,请参阅将 Integration Connectors 列入许可名单。
为公开 IP 地址的代管式服务创建服务连接
如果代管式服务不公开服务连接,则来自 Integration Connectors 的流量必须通过您的项目进行代理。
下图显示了一个不公开服务连接的代管式服务:
如需配置专用连接,请执行以下步骤:
- 创建 PSC 服务连接。
- 创建 Compute Engine 虚拟机实例 以运行 SOCKS5 代理服务器。
- 创建代理实例 1。
gcloud compute instances create PROXY_INSTANCE_1 \ --project=PROJECT_ID \ --network-interface=network-tier=PREMIUM,subnet=SUBNET_NAME_2,no-address
您可以根据需要创建任意数量的虚拟机实例。
- 创建代理实例 1。
- 创建防火墙规则,以允许对虚拟机实例进行 SSH。
gcloud compute firewall-rules create FIREWALL_RULE_NAME_SSH \ --direction=INGRESS --priority=1000 --network=VPC_NETWORK --allow=tcp:22 - 通过 SSH 连接到您的虚拟机实例。
gcloud compute ssh \ --tunnel-through-iap \ PROXY_INSTANCE_1 - 安装 Dante SOCKS5 代理服务器。
sudo apt update sudo apt install dante-server - 检查服务器接口。
sudo ip a
- 创建 Dante 配置的备份。
sudo mv /etc/danted.conf /etc/danted.conf.bak
- 创建新的 Dante 配置文件。
sudo nano /etc/danted.conf
- 将以下配置复制到配置文件:
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 }
- 重启 Dante 服务器并检查状态。
sudo systemctl restart danted sudo systemctl status danted - 退出虚拟机实例。
exit
- 创建以虚拟机实例作为后端的负载均衡器。
- 创建非托管实例组。
gcloud compute instance-groups unmanaged create INSTANCE_GROUP_NAME
- 将第 3 步中创建的虚拟机实例添加到该组。
gcloud compute instance-groups unmanaged add-instances INSTANCE_GROUP_NAME \ --instances=PROXY_INSTANCE_1 - 创建健康检查探测并允许来自该探测的流量。
- 创建健康检查探测。
gcloud compute health-checks create tcp HEALTH_CHECK_NAME \ --port BACKEND_SERVER_PORT --region=REGION
在此命令中,将 BACKEND_SERVER_PORT 设置为 1080,这是 SOCKS5 代理服务器运行的默认端口。
- 创建防火墙规则,以允许来自该探测的流量。
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
- 创建健康检查探测。
- 创建 L4 内部负载均衡器 并允许来自该负载均衡器的流量。
- 创建后端服务。
gcloud compute backend-services create BACKEND_SERVICE \ --load-balancing-scheme=internal --protocol=tcp --health-checks=HEALTH_CHECK_NAME \ --health-checks-region=REGION
- 将实例组添加到后端服务。
gcloud compute backend-services add-backend BACKEND_SERVICE \ --instance-group=INSTANCE_GROUP_NAME \ --instance-group-zone=ZONE
- 创建转发规则。
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
-
创建防火墙规则,以允许从负载平衡器到实例组的内部流量。
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。
- 创建非托管实例组。
虚拟机实例将用于将来自 Integration Connectors 流量代理到代管式服务。在虚拟机实例中安装 SOCKS5 代理 。Cloud SQL Auth 代理支持 通过 SOCKS5 代理进行链接,这使您可以将加密流量从 Cloud SQL Auth 代理转发到目标 Cloud SQL 实例。
安装和配置 SOCKS5 代理服务器的详细步骤不在本文档的讨论范围内,您可以安装任意您选择的 SOCKS5 代理。以下步骤展示了如何安装和配置 Dante SOCKS5 代理服务器。
- 创建 Compute Engine 虚拟机实例 以运行 SOCKS5 代理服务器。