Dataproc 集群网络配置

概览

Dataproc 集群中的 Compute Engine 虚拟机实例(包含主实例和工作器虚拟机)必须能够使用 ICMP、TCP(所有端口)和 UDP(所有端口)相互通信。

防火墙规则要求

Dataproc 要求您创建具有以下特征的入站允许防火墙规则:

  • 规则的来源必须包含集群的虚拟机。您可以使用 IP 地址范围定义来源,也可以使用来源标记或来源服务帐号标识虚拟机。如果您省略来源规范,防火墙规则将使用 0.0.0.0/0 范围(任何 IP 地址)作为来源。如果您的 Dataproc 虚拟机具有外部 IP 地址,这意味着它们可以接受来自互联网任何地方的流量。因此,您应尽可能缩小来源的范围,以满足您的需求并保护您的集群。

  • 规则的目标必须标识集群的虚拟机。目标可以是 VPC 网络中的所有虚拟机,或者,您也可以使用目标标记或目标服务帐号来标识特定的目标虚拟机。

  • 规则必须包含以下协议和端口:TCP(所有端口、0 到 65535)、UDP(所有端口、0 到 65535)和 ICMP。

    gcloud compute firewall-rules create my-subnet-firewall-rule --allow tcp
    
    最好指定具有特定来源范围的入站允许防火墙规则,或者按网络标记或服务帐号标识 Google Cloud 虚拟机。如需了解详情,请参阅防火墙规则概览

如何设置来源 IP 范围

从 Google Cloud Console 或使用 gcloud 命令行工具创建防火墙规则时,您可以设置来源 IP 地址范围。

控制台

使用 Cloud Console 创建防火墙规则页面创建具有指定来源 IP 地址范围的防火墙规则。

gcloud 命令

使用 gcloud compute firewall-rules create 命令创建具有指定来源 IP 地址范围的防火墙规则。

gcloud compute firewall-rules create "tcp-rule" --allow tcp:80 \
    --source-ranges="10.0.0.0/22,10.0.0.0/14" \
    --description="Narrowing TCP traffic"

Dataproc 集群默认网络配置

创建 Dataproc 集群时,您可以接受该集群的默认网络。

默认网络

下面是一个 Google Cloud Console 快照,显示了从 Dataproc 创建集群页面中选择的默认网络。

创建集群后,Google Cloud Console 虚拟机实例→网络详情页面会显示集群中实例的适用防火墙规则。如果您使用 [默认网络]/vpc/docs/vpc#default-network),则其中会包含一个预填充 default-allow-internal 防火墙规则,该规则允许来自 10.128.0.0/9 来源范围的入站流量。如果您删除这条预填充的防火墙规则或使用除默认网络之外的 VPC 网络,则隐式拒绝入站规则会禁止入站流量。在这些情况下,您必须创建一个入站允许防火墙规则,允许将流量传输到集群中实例的所有 TCP 和 UDP 端口。如需了解详情,您的网络或安全管理员可以参阅防火墙规则概览

创建 VPC 网络

您可以在创建 Dataproc 集群时指定自己的 Virtual Private Cloud (VPC) 网络。要实现此目的,您必须首先创建一个使用防火墙规则的 VPC 网络。然后,当您创建集群时,将您的网络与集群进行关联。

创建 VPC 网络

您可以通过 Cloud Console 或使用 gcloud compute networks create 命令行工具命令创建 VPC 网络。您可以创建自动模式 VPC 网络或自定义模式 VPC 网络(下文中分别称为“自动”和“自定义”网络)。在每个 Compute Engine 区域中,系统会自动为自动网络配置子网, 但不会自动为自定义网络配置子网;在创建自定义网络时,您必须在一个或多个 Compute Engine 区域中创建一个或多个子网。 如需了解详情,请参阅 VPC 网络类型

下面让我们来看看您通过 Cloud Console 创建自动和自定义网络时可用的选项。

自动

下面的 Cloud Console 屏幕截图显示的是为了自动创建子网(自动模式 VPC 网络)而填充的 Cloud Console 字段)。您必须选择一个或多个防火墙规则。您应该选择打开 udp:0-65535;tcp:0-65535;icmp 端口的 network-name-allow-internal 规则,以便在网络中的虚拟机实例之间启用完整的内部 IP 网络访问权限。您还可以选择 network-name-allow-ssh 规则来打开标准 SSH 端口 22,以允许通过 SSH 连接到网络:

自定义

如果在创建网络(自定义模式 VPC 网络)时选择自定义子网,您必须为每个子网指定区域和专用 IP 地址范围。要在网络中的虚拟机之间启用完整的内部访问权限,您可以指定以下 IP 地址范围:10.0.0.0/8(在适当的情况下,您还可以指定限制性更高的范围,例如 10.128.0.0/16)。

请注意,在创建网络为自定义子网提供防火墙规则。同样地,如需在网络中的虚拟机之间启用完整的网络访问权限,请选择或创建打开 udp:0-65535;tcp:0-65535;icmp 端口的防火墙规则(如下面的 Cloud Console 屏幕截图所示)。

创建使用您的 VPC 网络的集群

gcloud 命令

您可以搭配 ‑‑network‑‑subnet 标志使用 Cloud SDK gcloud dataproc clusters create 命令来创建将使用自动子网或自定义子网的集群。

使用 ‑‑network 标志
您可以使用 ‑‑network 标志来创建一个集群,该集群使用的子网与要创建集群的区域中的网络同名。

gcloud dataproc clusters create my-cluster \
    --network network-name \
    --region=region \
    ... other args ...

例如,由于创建的自动网络在每个区域中具有与该自动网络同名的子网,因此,您可以将自动网络名称传递给 ‑‑network 标志 (‑‑network auto-net-name) 以创建一个集群,该集群将使用集群区域中的自动子网。

使用 ‑‑subnet 标志
您可以使用 ‑‑subnet 标志来创建一个集群,该集群将使用要创建集群的区域中的自动或自定义子网。您必须向 ‑‑subnet 标志传递集群将使用的子网的完整资源路径。

gcloud dataproc clusters create cluster-name \
    --subnet projects/project-id/regions/region/subnetworks/subnetwork-name \
    --region=region \
    ... other args ...

REST API

您可以将 networkUri 或 subnetworkUri GceClusterConfig 字段指定为 clusters.create 请求的一部分。

示例

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"
    },
    ...

控制台

在创建 VPC 网络(该网络使用的防火墙规则允许虚拟机通过网络的专用 IP 地址范围获得完全访问权限)之后,您可以从 Cloud Console→创建集群页面创建一个集群,然后从网络选择器中选择您的网络(展开抢占式工作器、存储分区、网络、版本、初始化和访问选项标题以访问选择器)。

选择网络后,子网选择器将显示您选择用于创建集群的区域中可用的子网。 如果该区域内没有可用的子网,则子网选择器中将显示“该区域中没有子网”。

以下屏幕截图显示了 Dataproc 创建集群 Cloud Console 页面上的网络和子网选择器。如图所示,已选择自定义网络中的自定义子网。

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

Dataproc 集群可以作为服务项目加入,从而使用共享 VPC 网络。使用共享 VPC 时,共享 VPC 网络是在另一个项目中定义的,此项目被称为宿主项目。宿主项目可供附加的服务项目中的 IAM 成员使用。如需了解背景信息,请参阅共享 VPC 概览

您将在一个项目中创建 Dataproc 集群。在共享 VPC 场景中,该项目将作为服务项目。您需要参考该项目的项目编号。您可以通过以下方法查找项目编号:

  1. 导航到“IAM 和管理”页面上的“设置”标签页

  2. 从页面顶部的项目下拉列表中,选择要用于创建 Dataproc 集群的项目。

  3. 记下项目编号。

担任共享 VPC 管理员的 IAM 成员必须执行以下步骤。如需了解背景信息,请参阅关于设置共享 VPC 的说明

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

  2. 将 Dataproc 项目附加到宿主项目。

  3. 对以下任一服务帐号进行配置(或同时配置这两个帐号),使其拥有宿主项目的网络用户角色。Cloud Dataproc 会尝试使用第一个服务帐号(必要时,会回退到 Google API 服务帐号)。

    • service-[project-number]@dataproc-accounts.iam.gserviceaccount.com
    • Google API 服务帐号[project-number]@cloudservices.gserviceaccount.com
  4. 导航到“IAM 和管理”页面上的 IAM 标签页

  5. 使用页面顶部的项目下拉列表选择宿主项目。

  6. 点击添加。重复以下步骤以同时添加两个服务帐号:

    1. 将服务帐号添加到成员字段。

    2. 从“角色”菜单中选择 Compute Engine > 计算网络用户

    3. 点击添加

两个服务帐号都具有宿主项目的“网络用户”角色后,您可以创建一个使用您的 VPC 网络的集群

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

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

gcloud 命令

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

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

gcloud dataproc clusters create my-cluster \
    --no-address \
    --network network-name \
    --region=region \
    ... other args ...

例如,由于创建的自动网络在每个区域中具有与该自动网络同名的子网,因此,您可以将自动网络名称传递给 ‑‑network 标志 (‑‑network auto-net-name) 以创建一个集群,该集群将使用集群区域中的自动子网。

使用 ‑‑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
    },
    ...

控制台

您可以从 Dataproc 创建集群 Cloud Console 页面来创建启用了专用 Google 访问通道的 Dataproc 集群。展开页面底部的抢占式工作器、存储分区、网络、版本、初始化和访问选项链接,然后点击仅内部 IP 为集群启用此功能。

Dataproc 和 VPC-SC 网络

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

请注意,当 VPC-SC 网络与 Dataproc 集群搭配使用时,存在以下限制和策略: