Dataproc 叢集網路設定

本頁說明 Dataproc 叢集網路設定的必要條件和選項。

Dataproc 連線需求

Dataproc 叢集必須位於符合路徑和防火牆需求的 VPC 網路中,才能安全存取 Google API 和其他資源。

路線要求

在叢集 VM 上執行的 Dataproc 代理程式需要連上網際網路的路徑,才能存取 Dataproc 控制 API,取得工作和報表狀態。建立後,VPC 網路會包含系統產生的預設路徑,連往網際網路。我們不建議刪除通往網際網路的預設路徑,建議您改用防火牆來控管網路存取權。請注意,僅限內部 IP 的叢集也需要這個預設的網際網路路徑,才能存取 Dataproc 控制 API 和其他 Google 服務 (例如 Cloud Storage),但這些叢集的流量不會離開 Google 資料中心。

防火牆需求

Dataproc 叢集的虛擬機器 (VM) 必須能夠使用 ICMP、TCP (所有通訊埠) 和 UDP (所有通訊埠) 通訊協定彼此通訊。

default 虛擬私有雲網路 default-allow-internal 防火牆規則符合 Dataproc 叢集連線需求,並允許來自虛擬私有雲網路中所有 VM 的 10.128.0.0/9 來源範圍輸入,如下所示:

規則 網路 方向 優先順序 來源範圍 通訊協定:通訊埠
default-allow-internal default 輸入 65534 10.128.0.0/9 tcp:0-65535udp:0-65535icmp
  • 如果您刪除 default-allow-internal 防火牆規則,default 網路上的輸入流量就會遭到默示拒絕輸入規則封鎖。

  • 如果您刪除 default-allow-internal 防火牆規則,或是不使用 default 虛擬私人雲端網路,就必須自行建立符合 Dataproc 連線需求的規則,然後套用至叢集的虛擬私人雲端網路。

最佳做法:

  • 為叢集 VPC 網路建立防火牆輸入規則,以便只允許叢集 VM 之間透過來源 IP 範圍或網路標記或服務帳戶來識別叢集 VM 的輸入連線。
  • 如要提供更安全的網路存取和連線功能,請使用安全標記,而非網路標記來定義防火牆規則的來源和目標。

建立輸入防火牆規則

如果您或網路/安全性管理員建立入站防火牆規則,並套用至 Dataproc 叢集的 VPC 網路,則該規則必須具備下列特性:

  • sources 參數會指定封包來源。所有 Dataproc 叢集 VM 都必須能夠相互通訊。您可以根據 IP 位址範圍、來源標記或與 VM 相關聯的服務帳戶,識別叢集中的 VM。

  • 規則的目標必須標示叢集 VM。目標可以是 VPC 網路中的所有 VM,也可以根據 IP 位址範圍、目標標記或目標服務帳戶來識別 VM。

  • 規則必須包含下列通訊協定和通訊埠

    • TCP (所有通訊埠,0 到 65535)
    • UDP (所有通訊埠,0 到 65535)
    • ICMP

    Dataproc 會使用在多個通訊埠上執行的服務。指定所有通訊埠有助於服務順利執行。

診斷虛擬私有雲防火牆規則

如要稽核未由優先順序較高的防火牆規則處理的封包,您可以建立兩個低優先順序 (65534) 的拒絕防火牆規則。與默示防火牆規則不同,您可以針對下列低優先順序規則啟用防火牆規則記錄

  1. 輸入拒絕規則 (來源 0.0.0.0/0、所有通訊協定、虛擬私有雲網路中的所有目標)

  2. 輸出拒絕規則 (目的地 0.0.0.0/0、所有通訊協定、虛擬私有雲網路中的所有目標)

  • 透過這些低優先順序規則和防火牆規則記錄,您可以記錄未由優先順序較高 (可能更具體) 的防火牆規則處理的封包。這兩個低優先順序規則也實施「最終封包丟棄」策略,符合安全性最佳做法。

  • 請檢查這些規則的防火牆規則記錄,判斷是否需要建立或修改優先順序較高的規則,以便允許封包。舉例來說,如果在 Dataproc 叢集 VM 之間傳送的封包遭到捨棄,這可能表示您需要調整防火牆規則。

建立虛擬私人雲端網路

您可以建立自己的自動模式自訂虛擬私有雲網路,而非使用 default 虛擬私有雲網路。建立叢集時,您會將網路與叢集建立關聯。

Assured Workloads 環境:如果您使用Assured Workloads 環境來遵守法規,叢集、其虛擬私有雲網路和 Cloud Storage 值區必須包含在 Assured Workloads 環境中。

建立使用虛擬私有雲網路的叢集

控制台

在「Customize cluster」面板的「Network configuration」部分中選取網路。選擇網路後,「Subnetwork」(子網路) 選取器會顯示您選取做為叢集建立地區的可用子網路。

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 標記建立叢集,如此一來,叢集就會在叢集區域中使用自動模式或自訂模式虛擬私有雲網路子網路。指定子網路的完整資源路徑。

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

在其他專案中建立使用虛擬私有雲網路的叢集

Dataproc 叢集可使用主專案中定義的共用虛擬私人雲端網路。建立 Dataproc 叢集的專案稱為「服務專案」

  1. 找出 Dataproc 叢集專案編號:

    1. 在Google Cloud 控制台中,開啟「IAM & Admin」「設定」頁面。選取要建立 Dataproc 叢集的專案。複製專案 ID。
  2. 具有共用虛擬私有雲端管理員角色的主體必須執行下列步驟。如需背景資訊,請參閱設定共用虛擬私人雲端的指示

    1. 確認共用虛擬私有雲主專案已啟用

    2. 將含有 Dataproc 叢集的專案連結至主專案。

    3. 設定 Dataproc 服務代理人服務帳戶 (service-[project-number]@dataproc-accounts.iam.gserviceaccount.com),以具備主專案的網路使用者角色:

      1. 在 Google Cloud 控制台中開啟「IAM 與管理頁面。

      2. 使用專案選取器選取新的主機專案。

      3. 點選「授予存取權」。

      4. 填寫「授予存取權」表單:

        1. 新增主體:輸入服務帳戶。

        2. 指派角色:在篩選器方塊中插入「Compute Network」,然後選取「Compute Network User」角色。

        3. 按一下 [儲存]

  3. 服務帳戶具備主專案的 Network User 角色後,請建立叢集,使用共用虛擬私有雲網路。

在其他專案中建立使用虛擬私有雲端子網路的叢集

Dataproc 叢集可以使用主專案中定義的共用 VPC 子網路。建立 Dataproc 叢集的專案稱為「服務專案」

  1. 找出 Dataproc 叢集專案編號:

    1. 在Google Cloud 控制台中,開啟「IAM & Admin」「設定」頁面。選取要建立 Dataproc 叢集的專案。複製專案 ID。
  2. 具有共用虛擬私有雲端管理員角色的主體必須執行下列步驟。如需背景資訊,請參閱設定共用虛擬私人雲端的指示

    1. 確認共用虛擬私有雲主專案已啟用

    2. 將含有 Dataproc 叢集的專案連結至主專案。

    3. 設定 Dataproc 服務代理人服務帳戶 (service-[project-number]@dataproc-accounts.iam.gserviceaccount.com),以具備主專案的網路使用者角色:

      1. 在 Google Cloud 控制台中開啟「虛擬私有雲網路」頁面。

      2. 使用專案選取器選取主專案。

      3. 按一下包含 Dataproc 叢集將使用的子網路的網路。

      4. 在「虛擬私有雲網路詳細資料」頁面中,按一下叢集將使用的子網路名稱旁的核取方塊。

      5. 如果資訊面板未開啟,請按一下「顯示資訊面板」

      6. 針對每個服務帳戶執行下列步驟:

        1. 在資訊面板中,按一下「新增主體」

        2. 填寫「授予存取權」表單:

          1. 新增主體:輸入服務帳戶。

          2. 指派角色:在篩選器方塊中插入「Compute Network」,然後選取「Compute Network User」角色。

          3. 按一下 [儲存]

  3. 服務帳戶具備主專案的 Network User 角色後,請建立叢集,使用共用虛擬私有雲子網路。

只透過內部 IP 位址建立 Dataproc 叢集

您可以建立與公開網際網路隔離的 Dataproc 叢集,該叢集的 VM 執行個體會在私人 IP 子網路上進行通訊 (叢集 VM 不會指派公開 IP 位址)。執行這項操作時,叢集子網路必須已啟用私人 Google 存取權,讓叢集節點能夠透過內部 IP 存取 Google API 和服務,例如 Cloud Storage

您可以使用 Google Cloud 控制台、gcloud CLI 或 Dataproc API,在建立叢集時啟用內部 IP 位址。

控制台

您可以在 Google Cloud 控制台的 Dataproc「Create a cluster」頁面中,建立 Dataproc 叢集並啟用「私人 Google 存取權」。在「自訂叢集」面板中,按一下「僅限內部 IP」,即可為叢集啟用這項功能。

gcloud CLI

您可以使用 gcloud dataproc clusters create 指令搭配 ‑‑no-address 標記,只啟用內部 IP 位址。

您可以使用 ‑‑network 標記建立叢集,如此一來,叢集就會使用名稱與建立地區網路名稱相同的子網路。

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

您可以使用 GceClusterConfig.internalIpOnly 欄位做為 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
    },
    ...

使用內部 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 叢集時,請注意下列限制和策略: