本页面介绍了如何在开发流水线时从私有 Cloud Data Fusion 实例连接到软件即服务 (SaaS) 应用(例如 Salesforce)以及第三方云服务(例如 Amazon S3)。
本指南中使用了“出站流量”和“出站流量控制”这两个术语:
- 出站流量是指通过公共互联网流出 Google Cloud 的网络流量。通常,当您创建从 Salesforce 等 SaaS 服务或 Amazon S3 等公共云服务读取数据或向这些服务写入数据的流水线时,就会出现出站流量。 
- 出站流量控制使用代理虚拟机为出站流量定义保护措施,以允许流向一组预配置网域的出站流量成功,所有其他流量都将失败。它可为出站流量启用较高的安全边界,并可以防止来自私有实例的意外出站流量。 
以下系统架构图展示了开发流水线时,私有 Cloud Data Fusion 实例如何与公共互联网连接:

在此场景中设计流水线时,Cloud Data Fusion 会通过 Cloud Data Fusion Preview 或 Wrangler 中的客户项目路由出站流量。此过程使用以下资源:
- 自定义 VPC 网络路由:自定义 VPC 网络通过导入的自定义路由将流量路由到网关虚拟机,这些虚拟机使用 VPC 对等互连导出到租户项目 VPC。 
- 网关虚拟机:网关虚拟机通过公共互联网将来自 Cloud Data Fusion 租户项目的出站流量路由到 SaaS 或第三方云。 Google Cloud 您可以在您的客户项目中管理此虚拟机。您可以使用内部负载平衡器 (ILB) 在高可用性 (HA) 环境中配置它。建议您将该虚拟机重复用于同一 VPC 中的多个私有 Cloud Data Fusion 实例。 
如需了解如何在设计和执行环境中设置出站流量控制,请参阅控制私有实例中的出站流量。
准备工作
- 您可以从 Cloud Data Fusion 6.4 或更高版本中的私有实例连接到公共来源。如需使用这些版本之一,您可以创建新的私有 Cloud Data Fusion 实例,也可以升级现有实例到 6.4.0。 
- 为实例创建 VPC 网络对等互连连接时,请选择导出路由。 
设置互联网连接
以下步骤介绍了如何在 Wrangler 中通过私有 Cloud Data Fusion 实例访问 Amazon S3 存储分区。当您在 Preview 或 Wrangler 中设计流水线时,相同的步骤也适用于通过公共互联网访问任何数据源。
在本指南中只使用了一个虚拟机,但对于任务关键型应用,我们建议您创建负载平衡虚拟机。如需了解详情,请参阅设置高可用性虚拟机。
创建 NAT 网关
在 Cloud Data Fusion 私有实例所在的区域和 VPC 网络中,创建 Cloud NAT 网关。
创建网关虚拟机实例和防火墙规则
控制台
- 转到虚拟机实例页面。 
- 点击创建实例。建议使用没有外部 IP 地址的虚拟机。 
- 使用已通过私有 Cloud Data Fusion 实例设置网络对等互连的同一 VPC。如需详细了解在这种情况下的 VPC 网络对等互连,请参阅准备工作。 
- 为与 Cloud Data Fusion 实例位于同一网络中的实例启用 IP 转发。 
- 在启动脚本字段中,输入以下脚本: - #! /bin/bash echo 1 > /proc/sys/net/ipv4/ip_forward iptables -t nat -A POSTROUTING -s 0.0.0.0/0 -j MASQUERADE echo net.ipv4.ip_forward=1 > /etc/sysctl.d/11-gce-network-security.conf iptables-save- 如需了解详情,请参阅运行启动脚本。 - 如需获取分配给 Cloud Data Fusion 实例的 IP 范围,请转到 Cloud Data Fusion 实例详情页面。  
gcloud
如需创建网关虚拟机和防火墙规则,请在 Google Cloud CLI 中运行以下脚本:
export CDF_PROJECT=CDF_PROJECT export GATEWAY_VM=GATEWAY_VM_NAME export ZONE=VM_ZONE export SUBNET=SUBNET export VPC_NETWORK=VPC_NETWORK export COMPUTE_ENGINE_SA=COMPUTE_ENGINE_SA gcloud beta compute --project=$CDF_PROJECT instances create $GATEWAY_VM --zone=$ZONE --machine-type=e2-medium --subnet=$SUBNET --network-tier=PREMIUM --metadata=startup-script=\#\!\ /bin/bash$'\n'echo\ 1\ \>\ /proc/sys/net/ipv4/ip_forward$'\n'iptables\ -t\ nat\ -A\ POSTROUTING\ -s\ 0.0.0.0/0\ -j\ MASQUERADE$'\n'echo\ net.ipv4.ip_forward=1\ \>\ /etc/sysctl.d/11-gce-network-security.conf$'\n'iptables-save --can-ip-forward --no-address --maintenance-policy=MIGRATE --service-account=$COMPUTE_ENGINE_SA --scopes=https://www.googleapis.com/auth/devstorage.read_only,https://www.googleapis.com/auth/logging.write,https://www.googleapis.com/auth/monitoring.write,https://www.googleapis.com/auth/servicecontrol,https://www.googleapis.com/auth/service.management.readonly,https://www.googleapis.com/auth/trace.append --tags=http-server,https-server --image=debian-10-buster-v20210316 --image-project=debian-cloud --boot-disk-size=10GB --boot-disk-type=pd-balanced --boot-disk-device-name=$GATEWAY_VM --no-shielded-secure-boot --shielded-vtpm --shielded-integrity-monitoring --reservation-affinity=any gcloud compute --project=$CDF_PROJECT firewall-rules create egress-allow-http --direction=INGRESS --priority=1000 --network=$VPC_NETWORK --action=ALLOW --rules=tcp:80 --source-ranges=CDF_IP_RANGE --target-tags=http-server gcloud compute --project=$CDF_PROJECT firewall-rules create egress-allow-https --direction=INGRESS --priority=1000 --network=$VPC_NETWORK --action=ALLOW --rules=tcp:443 --source-ranges=CDF_IP_RANGE --target-tags=https-server
替换以下内容:
- CDF_PROJECT:项目的可自定义唯一标识符
- GATEWAY_VM:您要配置的虚拟机的名称
- ZONE:您的虚拟机所在的可用区
- SUBNET:子网
- VPC_NETWORK:您的虚拟机的名称
- COMPUTE_ENGINE_SA:您的 Compute Engine 服务账号的名称
- CDF_IP_RANGE:分配给 Cloud Data Fusion 实例的 IP 范围
使用共享 VPC
如果您使用共享 VPC 将您的私有 Cloud Data Fusion 实例连接到公共互联网上的来源,请在宿主项目(在其中通过租户项目设置 VPC 网络对等互连)中创建一个网关虚拟机。
创建自定义路由
创建自定义路由以连接到您创建的网关虚拟机实例。
控制台
如需在 Google Cloud 控制台中创建路由,请参阅添加静态路由。
配置路由时:
- 将优先级设置为大于或等于 1001。将目的地设置为分配给 Cloud Data Fusion 实例的 IP 范围。
- 使用与私有 Cloud Data Fusion 实例相同的项目和 VPC。
- 请确保您的 VPC 网络对等互连配置允许导出路由,以便 Cloud Data Fusion 租户项目 VPC 通过 VPC 网络对等互连导入此自定义路由。
gcloud
如需在 gcloud CLI 中创建路由,请执行以下操作:
export ROUTE=ROUTE gcloud beta compute routes create $ROUTE --project=$CDF_PROJECT \ --network=$VPC_NETWORK --priority=1001 \ --destination-range=0.0.0.0/0 \ --next-hop-instance=$GATEWAY_VM \ --next-hop-instance-zone=$ZONE
替换以下内容:
- ROUTE:自定义路由的名称。
验证设置
执行上述步骤后,验证您可以在 Preview 和 Wrangler 中访问 S3 存储分区服务(或其他 SaaS 或公共云服务)。
设置可用性高的网关
建议:对于任务关键型应用,我们建议您创建负载平衡虚拟机。
创建健康检查的防火墙规则
创建防火墙规则以允许:
- 所有来源范围内的端口 80 (HTTP) 和端口 443 (HTTPS)。
- 来自健康检查探测器 IP 地址的 TCP、UDP 和 ICMP 流量。例如: - 130.211.0.0/22,35.191.0.0/16。
控制台
创建防火墙规则,以允许所有来源范围和防火墙规则中的端口允许来自健康检查探测器 IP 地址(如 130.211.0.0/22,35.191.0.0/16)的 TCP、UDP 和 ICMP 流量。
请参阅创建健康检查。
gcloud
为健康检查创建防火墙规则
export CDF_PROJECT=PROJECT_ID export VPC_NETWORK=VPC_NETWORK gcloud compute --project=$CDF_PROJECT firewall-rules create vpc-allow-http \ --direction=INGRESS --priority=1000 \ --network=$VPC_NETWORK \ --action=ALLOW --rules=tcp:80 \ --source-ranges=CDF_IP_RANGE \ --target-tags=http-server gcloud compute --project=$CDF_PROJECT firewall-rules create vpc-allow-https \ --direction=INGRESS --priority=1000 --network=$VPC_NETWORK \ --action=ALLOW --rules=tcp:443 --source-ranges=CDF_IP_RANGE \ --target-tags=https-server gcloud compute --project=$CDF_PROJECT firewall-rules create allow-health-checks \ --network=$VPC_NETWORK \ --action=allow --direction=ingress \ --target-tags=allow-health-checks \ --source-ranges=130.211.0.0/22,35.191.0.0/16 \ --rules=tcp,udp,icmp
替换以下内容:
- PROJECT_ID:项目的可自定义唯一标识符。
- VPC_NETWORK:您的 VPC 网络的名称。
- CDF_IP_RANGE:分配给 Cloud Data Fusion 的 IP 地址范围。
创建网关虚拟机实例模板
控制台
在控制台中创建实例模板时:
- 请在与 Cloud Data Fusion 实例相同的 VPC 中创建它。
- 建议:使用具有专用 IP 地址的虚拟机。
- 启用 HTTP/HTTPS 端口。
- 启用 IP 转发
- 在启动脚本字段中,输入以下脚本: - #! /bin/bash echo 1 > /proc/sys/net/ipv4/ip_forward iptables -t nat -A POSTROUTING -s 0.0.0.0/0 -j MASQUERADE echo net.ipv4.ip_forward=1 > /etc/sysctl.d/11-gce-network-security.conf iptables-save- 如需了解详情,请参阅运行启动脚本。 - 如需获取分配给 Cloud Data Fusion 实例的 IP 范围,请转到 Cloud Data Fusion 实例详情页面。 
gcloud
创建实例模板。
export TEMPLATE_NAME=TEMPLATE_NAME export REGION=REGION export SUBNET=SUBNET export SERVICE_ACCOUNT=SERVICE_ACCOUNT gcloud beta compute --project=$CDF_PROJECT instance-templates create $TEMPLATE_NAME \ --machine-type=e2-medium \ --subnet=projects/$CDF_PROJECT/regions/$REGION/subnetworks/$SUBNET \ --network-tier=PREMIUM --metadata=startup-script=sudo\ bash\ -c\ \"echo\ 1\ \>\ /proc/sys/net/ipv4/ip_forward\"$'\n'sudo\ iptables\ -t\ nat\ -A\ POSTROUTING\ -s\ 0.0.0.0/0\ -j\ MASQUERADE$'\n'sudo\ bash\ -c\ \"echo\ net.ipv4.ip_forward=1\ \>\ /etc/sysctl.d/11-gce-network-security.conf\"$'\n'sudo\ iptables-save \ --can-ip-forward --no-address --maintenance-policy=MIGRATE \ --service-account=$SERVICE_ACCOUNT \ --scopes=https://www.googleapis.com/auth/devstorage.read_only,https://www.googleapis.com/auth/logging.write,https://www.googleapis.com/auth/monitoring.write,https://www.googleapis.com/auth/servicecontrol,https://www.googleapis.com/auth/service.management.readonly,https://www.googleapis.com/auth/trace.append \ --region=$REGION --tags=http-server,https-server,allow-health-checks \ --image=debian-10-buster-v20210316 \ --image-project=debian-cloud --boot-disk-size=10GB \ --boot-disk-type=pd-balanced \ --boot-disk-device-name=$TEMPLATE_NAME \ --no-shielded-secure-boot --no-shielded-vtpm \ --no-shielded-integrity-monitoring \ --reservation-affinity=any
创建健康检查
此网关虚拟机实例上没有任何服务运行,因此您可以将端口 22 用于健康检查。
控制台
请参阅创建健康检查。
gcloud
创建健康检查:
export HEATH_CHECK=HEALTH_CHECK_NAME gcloud beta compute health-checks create tcp $HEATH_CHECK --project=$CDF_PROJECT \ --port=22 --proxy-header=NONE --no-enable-logging \ --check-interval=5 --timeout=5 \ --unhealthy-threshold=2 --healthy-threshold=2
创建实例组
使用在上一步中创建的健康检查,创建一个实例组:
控制台
请参阅创建代管式实例组。
gcloud
创建实例组。
export INSTANCE_GROUP=INSTANCE_GROUP gcloud beta compute --project=$CDF_PROJECT instance-groups managed create $INSTANCE_GROUP \ --base-instance-name=$INSTANCE_GROUP \ --template=$TEMPLATE_NAME --size=1 --zone=$ZONE \ --health-check=test --initial-delay=300 gcloud beta compute --project "$CDF_PROJECT" instance-groups managed set-autoscaling "$INSTANCE_GROUP" \ --zone "$ZONE" --cool-down-period "60" \ --max-num-replicas "10" --min-num-replicas "1" \ --target-cpu-utilization "0.6" --mode "on"
创建负载平衡器
通过在上一步中创建的实例组创建 TCP 负载平衡器 (ILB)。
将自定义路由添加到负载平衡器
将自定义路由添加到 Cloud Data Fusion 实例所在 VPC 中的内部负载平衡器 (ILB)。
控制台
转到 VPC 网络页面。
在路由标签页中,点击创建路由。

gcloud
将自定义路由添加到内部负载平衡器:
export ROUTE=ROUTE_NAME export ILB_FRONTEND=<ip_of_ilb_frontend> gcloud beta compute routes create $ROUTE --project=$CDF_PROJECT \ --network=$VPC_NETWORK --priority=1001 \ --destination-range=0.0.0.0/0 \ --next-hop-ilb=$ILB_FRONTEND \ --next-hop-ilb-region=$REGION
问题排查
Preview 或 Wrangler 中出现连接超时错误
设置出站流量控制时,您可能会收到 Connection Timeout 错误。
如需解决该问题,请检查以下设置是否正确:
实例组健康检查未成功
检查防火墙规则是否允许来自 130.211.0.0/22,35.191.0.0/16 源范围的 TCP、UDP、ICMP 流量。
在 Dataproc 中执行时流水线失败
如需在执行时访问公共互联网,请在与 Dataproc 集群相同的区域和网络中启用 Cloud NAT。
后续步骤
- 了解如何控制私有 Cloud Data Fusion 实例中的出站流量以仅流向一组特定的网域。
- 详细了解 Cloud Data Fusion 中的网络功能。