Dataproc 集群网络配置

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

Dataproc 连接要求

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

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

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

  • 如果您删除 default-allow-internal 防火墙规则或者不使用 default VPC 网络,则必须自行创建符合 Dataproc 连接要求的规则,然后将其应用于集群的 VPC 网络。

最佳做法:使用来源 IP 地址范围或者通过网络标记或服务帐号标识集群虚拟机,为集群 VPC 网络创建入站防火墙规则,仅允许集群虚拟机之间的入站连接。

创建入站流量防火墙规则

如果您或网络管理员或安全管理员创建了要应用于 Dataproc 集群 VPC 网络的入站防火墙规则,则该规则必须具有以下特征:

  • 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 网络

您可以创建自己的自动模式自定义 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 集群的项目称为服务项目。

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

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

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

    2. 将包含 Dataproc 集群的项目关联到宿主项目。

    3. 请按照本子步骤中的说明,将以下两个服务帐号配置为具有宿主项目的网络用户角色:

      1. 在 Google Cloud 控制台中打开 IAM 和管理页面。

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

      3. 点击授予访问权限

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

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

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

        3. 点击保存

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

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

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

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

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

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

    2. 将包含 Dataproc 集群的项目关联到宿主项目。

    3. 请按照此步骤中的说明将以下两个服务帐号配置为具有宿主项目的网络用户角色:

      1. 在 Google Cloud 控制台中打开 VPC 网络页面。

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

      3. 点击包含 Dataproc 集群将使用的子网的网络。

      4. VPC 网络详情页面中,点击集群将使用的子网名称旁边的复选框。

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

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

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

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

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

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

          3. 点击保存

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

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

您可以创建与公共互联网隔离的 Dataproc 集群,其虚拟机实例通过专用 IP 子网进行通信(集群虚拟机不会被分配公共 IP 地址)。为此,该子网必须启用专用 Google 访问通道,这样集群节点才能从内部 IP 访问 Google API 和服务,例如 Cloud Storage

gcloud CLI

如需创建仅具有内部 IP 地址的 Dataproc 集群,您可以使用带有 ‑‑no-address 标志的 gcloud dataproc clusters create 命令。

使用 ‐‐no-address 和 ‐‐network 标志:使用 ‑‑no-address 标志和 ‑‑network 标志来创建一个集群,该集群使用的子网与创建集群的区域中的网络同名。

创建 Dataproc 2.2 映像版本集群时,系统会默认设置
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

您可以在 clusters.create 请求中将 GceClusterConfig internalIpOnly 字段设置为 true,以仅启用内部 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 Cloud 控制台的 Dataproc 创建集群页面创建启用了“专用 Google 访问通道”的 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 集群结合使用时,请注意以下限制和策略: