本页面介绍了 Dataproc 集群网络配置要求和选项。
Dataproc 连接要求
Dataproc 集群必须位于满足路由和防火墙要求的 Virtual Private Cloud 网络中,才能安全地访问 Google API 和其他资源。
路由要求
为了在集群虚拟机上运行的 Dataproc 代理与 Dataproc 控制 API 之间建立通信,Dataproc 集群 VPC 网络必须具有通向互联网网关的路由。仅限内部 IP 的集群也需要此设置。
默认情况下,Dataproc 2.2 及更高版本映像版本的集群会预配仅使用内部 IP 地址的虚拟机。Dataproc 会自动在集群子网上启用专用 Google 访问通道 (PGA),以允许具有内部 IP 地址的集群虚拟机使用系统生成的默认路由访问默认互联网网关,从而访问 Google API 和服务。
规则 | 类型 | 目标 IP 地址范围 | 优先级 | 范围限制 | 下一个跃点 |
---|---|---|---|---|---|
default-route-[id] |
静态 | 0.0.0.0/0 |
1000 |
- | 默认互联网网关 |
PGA 可确保集群流量不会通过公共互联网,也不会离开 Google 数据中心(请参阅 PGA 示例图)。
不建议删除通向互联网网关的默认路由;如果您想控制对互联网的网络访问,请改为使用防火墙规则或政策。
如果您已删除通向互联网网关的默认路由,则必须添加默认路由。由于 Dataproc Control API 的 IP 范围不是静态的,因此目标 IP 范围必须为 0.0.0.0/0
。
防火墙要求
Dataproc 集群的 VPC 网络必须明确允许以下流量:
从 Dataproc 集群虚拟机到 Dataproc 控制 API 和其他 Dataproc 集群虚拟机的流量。VPC 网络的出站流量“全部允许”隐式规则默认允许此流量。如果您已添加覆盖出站拒绝防火墙规则,请创建出站允许防火墙规则。
由于 VPC 网络防火墙是有状态的,因此默认允许从 Dataproc 控制 API 到 Dataproc 集群虚拟机的响应流量。
Dataproc 集群虚拟机从其他 Dataproc 集群虚拟机接收的流量。默认情况下,VPC 网络的入站拒绝所有隐式防火墙规则会拒绝此流量。您必须创建入站允许防火墙规则。
- 为 Dataproc 集群虚拟机使用网络标记,以便您可以将必需的防火墙规则的适用范围限制为仅适用于 Dataproc 集群虚拟机。如果您不使用网络标记,则可以根据集群虚拟机使用的服务账号指定目标。否则,您可以配置适用于 VPC 网络中所有虚拟机的防火墙规则。
- 为了实现更安全的网络访问和连接,请使用安全标记(而非网络标记)来定义防火墙规则来源和目标。
创建入站允许防火墙规则
如果您或您的网络或安全管理员创建入站流量防火墙规则以应用于 Dataproc 集群 VPC 网络,则该规则必须具有以下特征:
来源参数用于指定数据包的来源。所有 Dataproc 集群虚拟机都必须能够相互通信。您可以按 IP 地址范围(Dataproc 集群子网的主要范围)、网络标记或与虚拟机关联的服务账号来识别集群中的虚拟机。
规则的目标必须识别集群虚拟机。目标可以是 VPC 网络中的所有虚拟机,或者,您可以按目标网络标记或目标服务账号来识别虚拟机。
规则必须包含以下协议和端口:
- TCP(所有端口,0 到 65535)
- UDP(所有端口,0 到 65535)
- ICMP
Dataproc 使用在多个端口上运行的服务。指定所有端口有助于服务成功运行。
规则的优先级必须高于适用于相同来源和目标的任何入站拒绝防火墙规则的优先级。
创建出站允许防火墙规则
如果您或您的网络或安全管理员创建出站流量防火墙规则以应用于 Dataproc 集群 VPC 网络,则该规则必须具有以下特征:
目的地参数指定数据包的目的地。所有 Dataproc 集群虚拟机都必须能够相互发起流量,并向 Dataproc 控制 API 发起流量。由于控制 API 的 IP 地址不是静态的,因此必须通过 IP 地址范围
0.0.0.0/0
指定目的地。规则的目标必须识别集群虚拟机。目标可以是 VPC 网络中的所有虚拟机,或者,您可以按目标网络标记或目标服务账号来识别虚拟机。
规则必须包含以下协议和端口:
- TCP(所有端口,0 到 65535)
- UDP(所有端口,0 到 65535)
- ICMP
Dataproc 使用在多个端口上运行的服务。指定所有端口有助于服务成功运行。
相应规则的优先级必须高于适用于相同目标和对象的任何出站流量拒绝防火墙规则的优先级。
诊断 VPC 网络防火墙规则
如需审核未由优先级较高的防火墙规则处理的数据包,您可以创建以下两条低优先级 (65534) 的拒绝防火墙规则。与隐式防火墙规则不同,您可以为以下每条低优先级规则启用防火墙规则日志记录:
入站拒绝规则(来源
0.0.0.0/0
、所有协议以及 VPC 网络中的所有目标)出站拒绝规则(目的地为
0.0.0.0/0
,所有协议,VPC 网络中的所有目标)
借助这些低优先级规则和防火墙规则日志记录,您可以记录未由更高优先级(可能更具体)的防火墙规则处理的数据包。这两个低优先级规则还通过实现“最终丢弃数据包”策略来遵循安全性最佳做法。
检查这些规则的防火墙规则日志,以确定是否需要创建或修改更高优先级的规则来允许数据包。例如,如果 Dataproc 集群虚拟机之间发送的数据包被丢弃,这可能表示必须调整防火墙规则。
创建 VPC 网络
您可以创建自己的自动模式或自定义 VPC 网络,而不是使用 default
VPC 网络。创建集群时,您需要将您的网络与集群相关联。
Assured Workloads 环境:如果您使用 Assured Workloads 环境来满足监管合规性要求,则集群、其 VPC 网络及其 Cloud Storage 存储桶必须包含在 Assured Workloads 环境中。
创建使用您的 VPC 网络的集群
控制台
在自定义集群面板的“网络配置”部分中选择您的网络。选择网络后,子网选择器会显示您为集群选择的区域中的可用子网。
Google Cloud CLI
将 gcloud dataproc clusters create
与 ‑‑network
或 ‑‑subnet
标志结合使用,以在网络中的子网上创建集群。如果您使用 ‑‑network 标志,则集群会使用与创建集群的区域中的指定网络同名的子网。
--network example
。由于自动网络是在每个区域中使用子网创建的,并且每个子网都具有网络名称,因此您可以将自动模式 VPC 网络名称传递给 ‑‑network
标志。集群会使用通过 ‑‑region 标志指定的区域中的自动模式 VPC 子网。
gcloud dataproc clusters create CLUSTER_NAME \ --network NETWORK_NAME \ --region=REGION \ ... other args ...
--subnet example
。您可以使用 ‑‑subnet
标志来创建集群,该集群使用集群区域中的自动模式或自定义 VPC 网络子网。指定子网的完整资源路径。
gcloud dataproc clusters create CLUSTER_NAMEW \ --subnet projects/PROJECT_ID/regions/REGION/subnetworks/SUBNET_NAME \ --region=REGION \ ... other args ...
REST API
您可以将 networkUri 或 subnetworkUri GceClusterConfig
字段指定为 clusters.create 请求的一部分。
示例
POST /v1/projects/my-project-id/regions/us-central1/clusters/ { "projectId": "PROJECT_ID", "clusterName": CLUSTER_NAME, "config": { "configBucket": "", "gceClusterConfig": { "subnetworkUri": SUBNET_NAME, }, ...
创建使用另一个项目中的 VPC 网络的集群
Dataproc 集群可以使用宿主项目中定义的共享 VPC 网络。在其中创建 Dataproc 集群的项目称为服务项目。
查找 Dataproc 集群项目编号:
- 在Google Cloud 控制台中打开 IAM 和管理 设置页面。选择您要在其中创建 Dataproc 集群的项目。复制项目 ID。
具有共享 VPC 管理员角色的主账号必须执行以下步骤。如需了解背景信息,请参阅关于设置共享 VPC 的说明。
确保已启用共享 VPC 宿主项目。
将 Dataproc 服务代理服务账号 (
service-[project-number]@dataproc-accounts.iam.gserviceaccount.com
) 配置为具有宿主项目的 Network User 角色:在 Google Cloud 控制台中打开 IAM 和管理页面。
使用项目选择器选择新的宿主项目。
点击授予访问权限。
填写“授予访问权限”表单:
添加主账号:输入服务账号。
分配角色:在过滤框中输入“Compute Network”,然后选择 Compute Network User 角色。
点击保存。
服务账号具有宿主项目的
Network User
角色后,创建使用共享 VPC 网络的集群。
创建使用其他项目中的 VPC 子网的集群
Dataproc 集群可以使用在宿主项目中定义的共享 VPC 子网。在其中创建 Dataproc 集群的项目称为服务项目。
查找 Dataproc 集群项目编号:
- 在Google Cloud 控制台中打开 IAM 和管理 设置页面。选择您要在其中创建 Dataproc 集群的项目。复制项目 ID。
具有共享 VPC 管理员角色的主账号必须执行以下步骤。如需了解背景信息,请参阅关于设置共享 VPC 的说明。
确保已启用共享 VPC 宿主项目。
将 Dataproc 服务代理服务账号 (
service-[project-number]@dataproc-accounts.iam.gserviceaccount.com
) 配置为具有宿主项目的 Network User 角色:在 Google Cloud 控制台中,打开 VPC 网络页面。
使用项目选择器选择宿主项目。
点击包含 Dataproc 集群使用的子网的网络。
在 VPC 网络详情页面中,点击集群使用的子网名称旁边的复选框。
如果信息面板未打开,请点击显示信息面板。
针对每个服务账号执行以下步骤:
在信息面板中,点击添加主账号。
填写“授予访问权限”表单:
添加主账号:输入服务账号。
分配角色:在过滤框中输入“Compute Network”,然后选择 Compute Network User 角色。
点击保存。
服务账号具有宿主项目的
Network User
角色后,创建使用共享 VPC 子网的集群。
创建仅使用内部 IP 的集群
本部分适用于 2.2
之前的映像版本集群。使用 2.2 及更高映像版本创建 Dataproc 集群时,系统默认会启用仅限内部 IP 地址的集群虚拟机。
您可以使用 Google Cloud 控制台、gcloud CLI 或 Dataproc API 创建仅使用内部 IP 地址的集群。请注意,如果启用了“仅限内部 IP”,Dataproc 会自动在集群的区域子网上启用专用 Google 访问通道,以允许连接到 Google API 和服务。
控制台
您可以通过 Google Cloud 控制台中的 Dataproc 创建集群页面创建仅使用内部 IP 地址的 Dataproc 集群。点击自定义集群面板上的仅限内部 IP,为集群启用此功能。
gcloud CLI
您可以使用带有 ‑‑no-address
标志的 gcloud dataproc clusters create
命令,创建仅使用内部 IP 地址的集群。
gcloud dataproc clusters create CLUSTER_NAME \ --no-address \ --network NETWORK_NAME \ --region=REGION \ ... other args ...
由于创建的自动网络在每个区域中具有与该自动网络同名的子网,因此,您可以将自动网络名称传递给 ‑‑network flag
来创建一个集群,该集群使用集群区域中的自动子网。
或者,您可以使用 ‑‑subnet
标志来创建一个集群,该集群使用要创建集群的区域中的自动或自定义子网。向 ‑‑subnet
标志传递子网的完整资源路径。
gcloud dataproc clusters create cluster-name \ --no-address \ --subnet projects/project-id/regions/region/subnetworks/subnetwork-name \ --region=region \ ... other args ...
REST API
您可以在 clusters.create
请求中使用 GceClusterConfig.internalIpOnly
字段,以创建仅启用内部 IP 地址的集群。
示例:
POST /v1/projects/my-project-id/regions/us-central1/clusters/ { "projectId": "my-project-id", "clusterName": "example-cluster", "config": { "configBucket": "", "gceClusterConfig": { "subnetworkUri": "custom-subnet-1", "zoneUri": "us-central1-b", "internalIpOnly": true }, ...
下载包含仅限内部 IP 的集群的依赖项
默认情况下,仅限内部 IP 的集群无权访问互联网。因此,从互联网下载依赖项的作业(例如从 Maven Central 下载 Spark 依赖项软件包的作业)会失败。可通过多种解决方法避免此问题:
使用 Cloud NAT 启用对互联网的集群访问权限。
创建包含依赖项(例如
/usr/lib/spark/jars/
中的 Spark 依赖项软件包)的自定义映像。将依赖项上传到 Cloud Storage 存储分区,然后使用初始化操作在创建集群期间从存储分区下载依赖项。
Dataproc 和 VPC Service Controls 网络
借助 VPC Service Controls,管理员可以为 Google 托管式服务的资源定义安全边界,以控制与这些服务的通信以及这些服务之间的通信。
请注意,当 VPC Service Controls 网络与 Dataproc 集群搭配使用时,遵循以下限制和策略:
如需在 VPC Service Controls 边界外安装组件,请创建预安装组件的 Dataproc 自定义映像,然后使用自定义映像创建集群。
后续步骤
- 如需排查 Dataproc 集群创建问题,请参阅排查集群创建问题。