Dataproc 集群网络配置

本页面介绍 Dataproc 集群网络配置要求 和选项

Dataproc 连接要求

您的 Dataproc 集群必须位于与路由相连的 VPC 网络中 和防火墙要求,以便安全地访问 Google API 和其他资源。

路由要求

在集群虚拟机上运行的 Dataproc 代理 需要连接到互联网的路由才能访问 Dataproc Control API 来获取作业和报告状态。创建后,VPC 网络 包含系统生成的默认路由 连接到互联网。不建议删除通向互联网的默认路由;请改用 防火墙来控制网络访问请注意, 仅限内部 IP 的集群 需要此默认路由以访问 Dataproc Control API 和其他 Google 服务(如 Cloud Storage)但其流量不会 离开 Google 数据中心。

防火墙要求

Dataproc 集群虚拟机 (VM) 必须能够使用 ICMP、TCP(所有端口)和 UDP 相互通信 (所有端口)协议。

default VPC 网络 default-allow-internal 防火墙 规则满足 Dataproc 集群连接要求 并允许来自以下来源范围内的 10.128.0.0/9 来源范围的入站流量: 该 VPC 网络上的所有虚拟机,如下所示:

规则 网络 方向 优先级 来源范围 Protocols:端口
default-allow-internal default 入站流量 65534 10.128.0.0/9 tcp:0-65535udp:0-65535icmp
  • 如果您删除 default-allow-internal 防火墙规则,则入站流量 default网络已被 隐式拒绝入站规则

  • 如果您删除了 default-allow-internal 防火墙规则或 不使用 default VPC 网络,因此您必须创建自己的规则, 满足 Dataproc 连接要求,然后将其应用于 VPC 网络

最佳做法创建入站防火墙规则 (仅允许您的集群 VPC 网络内部的入站连接) 方法是使用来源 IP 范围,或通过以下方式标识集群虚拟机 网络标记或服务账号。

创建入站防火墙规则

如果您或您的网络管理员或安全管理员创建了 入站防火墙规则 它必须具有 以下特征:

  • sources 参数会指定 数据包的来源。所有 Dataproc 集群虚拟机 必须能够相互通信。您可以在这里 按 IP 地址范围、来源标记或 虚拟机

  • 规则的目标必须标识 集群虚拟机目标可以是 VPC 网络中的所有虚拟机,或者 您可以按 IP 地址范围、目标标记或目标服务来识别虚拟机 。

  • 规则必须包含以下内容 协议和端口

    • TCP(所有端口,0 到 65535)
    • UDP(所有端口,0 到 65535)
    • ICMP

    Dataproc 使用在多个端口上运行的服务。指定 所有端口都有助于服务成功运行。

诊断 VPC 防火墙规则

如需审核未由优先级较高的防火墙规则处理的数据包,您可以创建两条低优先级 (65534) 的拒绝防火墙规则。与隐式防火墙规则不同,您可以为以下每条低优先级规则启用防火墙规则日志记录

  1. 入站拒绝规则(来源 0.0.0.0/0、所有协议以及 VPC 网络中的所有目标)

  2. 出站拒绝规则(目的地为 0.0.0.0/0,所有协议,VPC 网络中的所有目标)

  • 利用这些低优先级规则和防火墙规则日志记录,您可以 而不是由更高优先级(可能更具体)处理的数据包 防火墙规则这两个低优先级规则还通过实现“最终丢弃数据包”策略来遵循安全性最佳做法。

  • 检查这些规则的防火墙规则日志, 确定是否需要创建或修正优先级更高的规则 数据包。例如,如果在 Dataproc 集群之间发送数据包 虚拟机被丢弃,这可能表示需要 调整后。

创建 VPC 网络

您可以创建自己的网络,而不是使用 default VPC 网络 自动模式自定义 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 标志指定的区域。

gcloud dataproc clusters create CLUSTER_NAME \
    --network NETWORK_NAME \
    --region=REGION \
    ... other args ...

--subnet example.您可以使用 ‑‑subnet 标志,以创建在 Google Cloud 控制台中使用自动模式或自定义 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 集群的项目是 称为服务项目

  1. 找到 Dataproc 集群项目编号:

    1. 打开 IAM &管理员 设置页面 Google Cloud 控制台。选择要在其中创建 Dataproc 集群。复制项目 ID。
  2. 具有共享 VPC 管理员角色的主账号必须执行以下步骤。如需了解背景信息,请参阅关于设置共享 VPC 的说明

    1. 确保将共享 VPC 宿主项目 已启用

    2. 将项目连接到 Dataproc 集群 添加到宿主项目

    3. 请按照该子步骤中的说明配置以下两项 服务账号,拥有其网络用户 的以下角色:

      1. 打开 IAM 和管理 页面。

      2. 使用项目选择器选择新的宿主项目。

      3. 点击授予访问权限

      4. 填写“授予访问权限”表单。重复以下步骤以添加两个服务账号:

        1. 添加主账号:输入服务账号。

        2. 分配角色:插入“Compute Network”在过滤条件框中,然后选择 Compute Network User 角色。

        3. 点击保存

  3. 两个服务账号都具有宿主项目的 Network User 角色后, 创建集群 该网络使用共享 VPC 网络。

创建使用另一个项目中的 VPC 子网的集群

Dataproc 集群可以使用 宿主项目中定义的共享 VPC 子网。 创建了 Dataproc 集群的项目是 称为服务项目

  1. 找到 Dataproc 集群项目编号:

    1. 打开 IAM &管理员 设置页面 Google Cloud 控制台。选择要在其中创建 Dataproc 集群。复制项目 ID。
  2. 具有共享 VPC 管理员角色的主账号必须执行以下步骤。如需了解背景信息,请参阅关于设置共享 VPC 的说明

    1. 确保将共享 VPC 宿主项目 已启用

    2. 将项目连接到 Dataproc 集群 添加到宿主项目

    3. 请按照此步骤中的说明配置以下两项 服务账号,拥有其网络用户 的以下角色:

      1. 打开 VPC 网络 页面。

      2. 使用项目选择器选择宿主项目。

      3. 点击包含您要创建的子网的网络 Dataproc 集群将要使用的资源。

      4. VPC 网络详情页面中,选中 您的集群将使用的子网的名称。

      5. 如果信息面板未打开,请点击显示信息面板

      6. 对每个服务账号执行以下步骤:

        1. 在“信息”面板中,点击添加主账号

        2. 填写“授予访问权限”表单:

          1. 添加主账号:输入服务账号。

          2. 分配角色:插入“Compute Network”在过滤条件框中,然后选择 Compute Network User 角色。

          3. 点击保存

  3. 两个服务账号都具有宿主项目的 Network User 角色后, 创建集群 (使用共享 VPC 子网)。

创建仅使用内部 IP 地址的 Dataproc 集群

您可以创建一个与 公共互联网,其虚拟机实例通过专用 IP 子网进行通信 (集群虚拟机未分配公共 IP 地址)。为此, 子网必须包含 已启用专用 Google 访问通道 以允许集群节点访问 Google API 和服务,例如 Cloud Storage(通过内部 IP)。

gcloud CLI

您可以创建仅使用内部 IP 地址的 Dataproc 集群 使用 gcloud dataproc clusters create 并附加 ‑‑no-address 标志。

使用 ‐‐no-address 和 ‐‐network 标志: 将 ‑‑no-address 标志与 ‑‑network 标志,用于创建将 与该区域中的网络同名的子网 创建集群的位置

gcloud dataproc clusters create CLUSTER_NAME \
    --no-address \
    --network NETWORK_NAME \
    --region=REGION \
    ... other args ...

例如,由于创建的自动网络在每个层级 同名的自动网络,那么您可以传递自动网络 名称添加到 ‑‑network flag 创建一个集群,该集群将使用集群区域中的自动子网。

使用 ‐‐no-address 和 ‐‐subnet 标志: 将 ‑‑no-address 标志与 ‑‑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

您可以将 GceClusterConfig internalIpOnly 字段(作为true clusters.create 仅启用内部 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
    },
    ...

控制台

您可以创建具有专用 Google 访问通道的 Dataproc 集群 通过 Dataproc 创建集群 页面。点击位于以下位置的仅限内部 IP自定义集群 面板为您的集群启用此功能。

默认情况下,仅使用内部 IP 的集群无法访问互联网 从互联网下载依赖项的作业,例如 Maven Central 中的 Spark 依赖项软件包将会失败。可通过多种解决方法避免此问题:

  1. 使用 Cloud NAT 启用集群对互联网的访问权限。

  2. 创建包含依赖项(例如 /usr/lib/spark/jars/ 中的 Spark 依赖项软件包)的自定义映像

  3. 将依赖项上传到 Cloud Storage 存储分区,然后使用初始化操作在创建集群期间从存储分区下载依赖项。

Dataproc 和 VPC Service Controls 网络

借助 VPC Service Controls,管理员可以为 Google 托管式服务的资源定义安全边界,以控制与这些服务的通信以及这些服务之间的通信。

使用具有以下各项的 VPC Service Controls 网络时,请注意以下限制和策略: Dataproc 集群: