本頁說明 Dataproc 叢集網路設定的必要條件和選項。
Dataproc 連線需求
Dataproc 叢集必須位於符合路由和防火牆需求的虛擬私有雲網路中,才能安全存取 Google API 和其他資源。
路由需求
如要在叢集 VM 上執行的 Dataproc 代理程式與 Dataproc 控制項 API 之間建立通訊,Dataproc 叢集虛擬私有雲網路必須有通往網際網路閘道的路由。僅限內部 IP 的叢集也必須如此。
根據預設,Dataproc 2.2 以上版本映像檔叢集會佈建僅限內部 IP 位址的 VM。Dataproc 會自動在叢集子網路上啟用 Private Google Access (PGA),讓具有內部 IP 位址的叢集 VM 能夠使用系統產生的預設路由連線至預設網際網路閘道,進而存取 Google API 和服務。
| 規則 | 類型 | 目的地 IP 範圍 | 優先順序 | 範圍限制 | 下一個躍點 |
|---|---|---|---|---|---|
default-route-[id] |
靜態 | 0.0.0.0/0 |
1000 |
- | 預設網際網路閘道 |
PGA 可確保叢集流量不會周遊公開網際網路,也不會離開 Google 資料中心 (請參閱 PGA 範例圖表)。
不建議刪除網際網路閘道的預設路由。如要控管網際網路的網路存取權,請改用防火牆規則或政策。
如果已刪除網際網路閘道的預設路由,請務必新增預設路由。目的地 IP 範圍必須為 0.0.0.0/0,因為 Dataproc 控制項 API 的 IP 範圍並非靜態。
防火牆需求
Dataproc 叢集的虛擬私有雲網路必須明確允許下列流量:
從 Dataproc 叢集 VM 啟動的流量,會傳輸至 Dataproc 控制項 API 和其他 Dataproc 叢集 VM。根據虛擬私有雲網路的輸出允許所有隱含規則,這類流量預設會獲得許可。如果您已新增覆寫拒絕輸出防火牆規則,請建立允許輸出防火牆規則。
由於虛擬私有雲網路防火牆有狀態,因此系統預設會允許從 Dataproc 控制項 API 到 Dataproc 叢集 VM 的回應流量。
Dataproc 叢集 VM 從其他 Dataproc 叢集 VM 收到流量。根據預設,虛擬私有雲網路的所有輸入防火牆規則會拒絕這類流量,因此您必須建立允許輸入防火牆規則。
- 為 Dataproc 叢集 VM 使用網路標記,將必要防火牆規則的適用範圍限制為僅限 Dataproc 叢集 VM。如果未使用網路標記,可以根據叢集 VM 所用的服務帳戶指定目標。或者可以設定防火牆規則,套用至虛擬私有雲網路中的所有 VM。
- 如需確保網路存取和連線安全,請使用安全標記來定義防火牆規則來源和目標,而非網路標記。
建立允許輸入防火牆規則
如果您或網路/安全管理員要建立輸入防火牆規則,套用至 Dataproc 叢集虛擬私有雲網路,規則必須具備下列特徵:
來源參數會指定封包來源。所有 Dataproc 叢集 VM 必須能夠彼此通訊。您可以透過 IP 位址範圍 (Dataproc 叢集子網路的主要範圍)、網路標記或與 VM 相關聯的服務帳戶,識別叢集中的 VM。
規則的目標必須識別叢集 VM。目標可以是虛擬私有雲網路中的所有 VM,您也可以透過目標網路標記或目標服務帳戶識別 VM。
規則必須包含下列通訊協定和通訊埠:
- TCP (所有通訊埠,0 到 65535)
- UDP (所有通訊埠,0 到 65535)
- ICMP
Dataproc 使用在多個通訊埠上執行的服務,指定所有通訊埠有助於服務順利執行。
比起適用於相同來源和目標的任何拒絕輸入防火牆規則,必須優先採用規則。
建立允許輸出防火牆規則
如果您或網路/安全管理員要建立輸出防火牆規則,套用至 Dataproc 叢集虛擬私有雲網路,規則必須具備下列特徵:
目的地參數會指定封包目的地。所有 Dataproc 叢集 VM 都必須能夠彼此發起流量,以及發起至 Dataproc 控制 API 的流量。由於控制項 API 的 IP 位址非靜態,因此必須以 IP 範圍
0.0.0.0/0指定目的地。規則的目標必須識別叢集 VM。目標可以是虛擬私有雲網路中的所有 VM,您也可以透過目標網路標記或目標服務帳戶識別 VM。
規則必須包含下列通訊協定和通訊埠:
- TCP (所有通訊埠,0 到 65535)
- UDP (所有通訊埠,0 到 65535)
- ICMP
Dataproc 使用在多個通訊埠上執行的服務,指定所有通訊埠有助於服務順利執行。
比起適用於相同目的地和目標的任何拒絕輸出防火牆規則,必須優先採用規則。
診斷虛擬私有雲網路防火牆規則
如要稽核的封包未經高優先順序的防火牆規則處理,可以建立下列兩項優先順序較低的 (65534) 拒絕防火牆規則。與隱含防火牆規則不同,您可以對每項低優先順序規則啟用防火牆規則記錄:
拒絕輸入規則 (來源
0.0.0.0/0、所有通訊協定、虛擬私有雲網路中的所有目標)拒絕輸出規則 (目的地
0.0.0.0/0、所有通訊協定、虛擬私有雲網路中的所有目標)
有了這些低優先順序規則和防火牆規則記錄,您就能記錄未以高優先順序 (且可能更具體) 防火牆規則處理的封包。這兩項低優先順序規則也採行「最終捨棄封包」策略,符合資安最佳做法。
檢查這些規則的防火牆規則記錄,判斷是否要建立或修改優先順序較高的規則,以允許封包通過。舉例來說,如果 Dataproc 叢集 VM 之間傳送的封包遭到捨棄,可能表示您必須調整防火牆規則。
建立虛擬私有雲網路
您可以建立自己的自動模式或自訂模式虛擬私有雲網路,而不使用 default 虛擬私有雲網路。在建立叢集時,您會建立網路與叢集之間的關聯。
Assured Workloads 環境:如使用 Assured Workloads 環境進行法規遵循時,叢集、叢集的虛擬私有雲網路和叢集的 Cloud Storage bucket 必須位於 Assured Workloads 環境。
建立使用虛擬私有雲網路的叢集
控制台
在「Customize cluster」(自訂叢集) 面板的「Network configuration」(網路設定) 部分中,選取網路。選擇網路之後,「Subnetwork」(子網路) 選取器會顯示您所選叢集地區的可用子網路。
Google Cloud CLI
使用 gcloud dataproc clusters create 搭配 ‑‑network 或 ‑‑subnet 旗標,在網路的子網路上建立叢集。如果您使用 ‑‑network 旗標,叢集就會使用名稱與建立地區網路名稱相同的子網路。
--network example。由於建立自動網路時,每個區域都會有名稱與網路相同的子網路,因此您可以將自動模式虛擬私有雲網路名稱傳遞給 ‑‑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 叢集可以使用主專案中定義的 Shared VPC 網路。建立 Dataproc 叢集的專案稱為服務專案。
找出 Dataproc 叢集專案編號:
- 在Google Cloud 控制台中,開啟「IAM & Admin」(IAM 與管理) 設定頁面。選取要建立 Dataproc 叢集的專案。複製專案 ID。
具有 Shared VPC 管理員角色的主體必須執行下列步驟。如需背景資訊,請參閱設定 Shared VPC 的指示。
確認 Shared VPC 主專案已啟用。
附加含有 Dataproc 叢集的專案至主專案。
設定 Dataproc 服務代理服務帳戶 (
service-[project-number]@dataproc-accounts.iam.gserviceaccount.com),以取得主專案的網路使用者角色:在 Google Cloud 控制台中,開啟「IAM & Admin」(IAM 與管理) 頁面。
使用專案選取器選取新的主專案。
點選「Grant Access」(授予存取權)。
填寫「Grant Access」(授予存取權) 表單:
新增主體:輸入服務帳戶。
指派角色:在篩選器方塊中插入「Compute Network」(Compute 網路),然後選取「Compute Network User」(Compute 網路使用者) 角色。
按一下「Save」(儲存)。
服務帳戶具備主專案的
Network User角色後,請建立叢集,使用 Shared VPC 網路。
建立叢集使用其他專案的虛擬私有雲子網路
Dataproc 叢集可以使用主專案中定義的 Shared VPC 子網路。建立 Dataproc 叢集的專案稱為服務專案。
找出 Dataproc 叢集專案編號:
- 在Google Cloud 控制台中,開啟「IAM & Admin」(IAM 與管理) 設定頁面。選取要建立 Dataproc 叢集的專案。複製專案 ID。
具有 Shared VPC 管理員角色的主體必須執行下列步驟。如需背景資訊,請參閱設定 Shared VPC 的指示。
確認 Shared VPC 主專案已啟用。
附加含有 Dataproc 叢集的專案至主專案。
設定 Dataproc 服務代理服務帳戶 (
service-[project-number]@dataproc-accounts.iam.gserviceaccount.com),以取得主專案的網路使用者角色:在 Google Cloud 控制台中開啟「VPC networks」(虛擬私有雲網路) 頁面。
使用專案選取器選取主專案。
按一下網路,當中包含 Dataproc 叢集將使用的子網路。
在「VPC Network Details」(虛擬私有雲網路詳細資料) 頁面中,按一下叢集將使用的子網路名稱旁的核取方塊。
如果資訊面板未開啟,請按一下「Show Info Panel」(顯示資訊面板)。
針對每個服務帳戶執行下列步驟:
在資訊面板中,按一下「Add Principal」(新增主體)。
填寫「Grant Access」(授予存取權) 表單:
新增主體:輸入服務帳戶。
指派角色:在篩選器方塊中插入「Compute Network」(Compute 網路),然後選取「Compute Network User」(Compute 網路使用者) 角色。
按一下「Save」(儲存)。
服務帳戶具備主專案的
Network User角色後,請建立叢集,使用 Shared VPC 子網路。
建立僅限內部 IP 的叢集
本節適用於 2.2 映像檔版本之前的叢集。使用 2.2 以上版本的映像檔建立 Dataproc 叢集時,系統預設會啟用僅限內部 IP 位址的叢集 VM。
您可以使用 Google Cloud 控制台、gcloud CLI 或 Dataproc API,建立只有內部 IP 位址的叢集。請注意,啟用僅限內部 IP 時,Dataproc 會自動在叢集的區域子網路上啟用 Private Google Access,允許連線至 Google API 和服務。
控制台
您可以在 Google Cloud 控制台的 Dataproc「Create a cluster」(建立叢集) 頁面,建立只有內部 IP 位址的 Dataproc 叢集。在「Customize cluster」(自訂叢集) 面板上點選「Internal IP only」(僅限內部 IP),即可為叢集啟用這項功能。
gcloud CLI
您可以使用 gcloud dataproc clusters create 指令搭配 ‑‑no-address 旗標,建立僅限內部 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 bucket,然後在建立叢集時使用初始化動作,從 bucket 下載依附元件。
Dataproc 和 VPC Service Controls 網路
管理員可以使用 VPC Service Controls 定義 Google 代管服務資源的安全範圍,藉此控管對這些服務和這些服務之間的通訊。
搭配使用 VPC Service Controls 網路與 Dataproc 叢集時,請注意下列限制和策略:
如要在 VPC Service Controls 範圍外安裝元件,請建立預先安裝元件的 Dataproc 自訂映像檔,然後使用該自訂映像檔建立叢集。
後續步驟
- 如要排解 Dataproc 叢集建立問題,請參閱排解叢集建立問題。