在公用網路上的開放通訊埠與不當設定的防火牆規則可能會讓未經授權的使用者執行任意程式碼。*
請參閱 為子網路防火牆規則指定來源 IP 範圍一節
建立 SSH 通道,與叢集的主要執行個體建立安全連線。
Apache Hadoop YARN 提供的 REST API 會與 YARN 網頁介面共用相同的通訊埠 (預設通訊埠為 8088)。根據預設,可以存取 YARN 網頁介面的使用者可以建立應用程式、提交工作,並且可能可以執行 Cloud Storage 作業。如要瞭解如何設定允許的 YARN Resource Manager REST API 方法,請參閱「允許的 YARN Resource Manager REST API」。
Managed Service for Apache Spark 叢集包含的一些核心開放原始碼元件,如 Apache Hadoop 和 Apache Spark 會提供網路介面。這些介面可用於管理及監控叢集資源和設施,如 YARN 資源管理工具、Hadoop 分散式檔案系統 (HDFS)、MapReduce 和 Spark。您在叢集上安裝的其他元件或應用程式也可能會提供網路介面 (請參閱在 Managed Service for Apache Spark 叢集上安裝及執行 Jupyter 筆記本的範例)。
可用介面
以下為 Managed Service for Apache Spark 叢集主要執行個體上可用的介面 (將 master-host-name 替換為主要執行個體的名稱)。
| 網路使用者介面 | 通訊埠 | 網址 |
|---|---|---|
| YARN ResourceManager | 80881 | http://master-host-name:8088 |
| HDFS NameNode | 98702,3 | http://master-host-name:9870 |
1 在啟用 Kerberos 的叢集上,YARN ResourceManager 網頁版 UI 通訊埠為 8090,並透過 HTTPS 執行。
2 在啟用 Kerberos 的叢集上,HDFS Namenode 網頁版 UI 通訊埠為 9871,且會透過 HTTPS 執行。
3 在 Managed Service for Apache Spark 之前版本中 (1.2 以前的版本),HDFS Namenode 網路 UI 通訊埠為 50070。
YARN ResourceManager 在「Tracking UI」資料欄下,提供了所有目前正在執行或已完成的 MapReduce 和 Spark 應用程式網路介面的連結。
允許使用的 YARN ResourceManager REST API
建立叢集時,Managed Service for Apache Spark 會將 yarn-site.xml yarn.resourcemanager.webapp.methods-allowed
屬性
設為「GET,HEAD」,這會將可在 YARN Resource Manager 網頁 UI 和
REST API
上呼叫的 HTTP 方法限制為 GET 和 HEAD 方法。這項預設設定也會透過 YARN REST API 停用工作提交和修改作業。
您可以覆寫預設值,方法是將這個屬性設為一或多個以半形逗號分隔的 HTTP 方法名稱,藉此在通訊埠 8088 上啟用特定 HTTP 方法。ALL 值會允許通訊埠上的所有 HTTP 方法。
範例:
gcloud dataproc clusters create cluster-name \ --properties=^#^yarn:yarn.resourcemanager.webapp.methods-allowed=GET,POST,DELETE \ --region=region \
建議:如果您將這項屬性設為允許非預設 HTTP 方法,請務必設定防火牆規則和其他安全性設定,限制對通訊埠 8088 的存取權。
連線至網路介面
您可以使用 Managed Service for Apache Spark 元件閘道、專案的 Cloud Shell 或 Google Cloud CLI gcloud 指令列工具,連線至在 Managed Service for Apache Spark 叢集上執行的網路介面:
元件閘道:在 Google Cloud 控制台中,只要按一下滑鼠,即可連線至 Hadoop、Spark 和其他元件網頁 UI 介面。建立叢集時,請啟用元件閘道。
Cloud Shell: Google Cloud 控制台中的 Cloud Shell 已預先安裝 gcloud CLI 指令和設施,並且提供了網頁預覽功能,讓您透過 SSH 通道快速連線至叢集上的網路介面通訊埠。不過,從 Cloud Shell 到叢集的連線作業使用本機通訊埠轉送功能,它只會開啟與叢集網路介面上一個通訊埠的連線,如需連線至多個通訊埠,您必須使用多個指令。此外,Cloud Shell 工作階段也會在閒置一段時間 (30 分鐘) 後自動結束。
Google Cloud CLI:
gcloud compute ssh指令與動態通訊埠轉送功能可讓您建立 SSH 通道,並在通道最上層運作 SOCKS Proxy 伺服器。發出這個指令後,必須將本機瀏覽器設為使用 SOCKS Proxy。這種連線方法可讓您連線至叢集網路介面上的多個通訊埠。詳情請參閱「我可以使用本機通訊埠轉送,而不用 SOCKS Proxy 嗎? 瞭解詳情。
設定常用的指令變數
如要在本機電腦或 Cloud Shell 中輕鬆複製及執行指令列範例,請設定 gcloud dataproc 指令變數。本頁中顯示的部分指令範例可能還需要設定其他變數。
Linux/mac/Shell
export PROJECT=project;export HOSTNAME=hostname;export ZONE=zone
Windows
set PROJECT=project && set HOSTNAME=hostname && set ZONE=zone
- 將 PROJECT 設為您的 Google Cloud 專案 ID
- 將 HOSTNAME 設為 Managed Service for Apache Spark 叢集中主要節點的名稱 (主要節點會有
-m的尾碼) - 將 ZONE 設為 Managed Service for Apache Spark 叢集中虛擬機器的區域 (例如「us-central1-b」)
建立 SSH 通道
gcloud 指令
在本機電腦上執行下列 gcloud 指令,設定從本機電腦上的開放通訊埠通往叢集主要執行個體的 SSH 通道,並運作在通訊埠接聽的本機 SOCKS Proxy 伺服器。
在執行指令前,請先在您的本機電腦上:
- 設定常用的指令變數
- 將 PORT 變數設為本機電腦上的開放通訊埠。通訊埠
1080是任意但常見的選擇,因為它通常是開放的。PORT=number
Linux/macOS
gcloud compute ssh ${HOSTNAME} \
--project=${PROJECT} --zone=${ZONE} -- \
-D ${PORT} -N
Windows
gcloud compute ssh %HOSTNAME% ^ --project=%PROJECT% --zone=%ZONE% -- ^ -D %PORT% -N
-- 分隔符可讓您將 SSH 引數新增至 gcloud compute ssh 指令,如下所示:
-D指定動態應用程式層級通訊埠轉送。-N指示gcloud不要開啟遠端殼層。
這個 gcloud 指令會建立在其他 SSH 殼層工作階段之外獨立運作的 SSH 通道,將通道相關錯誤留在殼層輸出之外,防止通道意外關閉。
如果 ssh 指令失敗並傳回錯誤訊息 bind: Cannot assign requested address,造成錯誤的原因可能是要求的通訊埠正在使用中。請嘗試使用不同的 PORT 變數值執行指令。
上述指令會在前景中執行,並且必須保持執行狀態以維持通道暢通。如果您刪除叢集,指令應會自動結束。
Cloud Shell
-
開啟 Google Cloud Cloud Shell。
-
在 Cloud Shell 中執行以下的
gcloud指令,設定從 Cloud Shell 預覽通訊埠通往叢集主要節點上網路介面通訊埠的 SSH 通道。執行指令前,請先在 Cloud Shell 中:- 設定常用的指令變數
- 將 PORT1 變數設為範圍介於 8080 至 8084 之間的 Cloud Shell 通訊埠,並將 PORT2 變數設為 Managed Service for Apache Spark 叢集主要節點上的網路介面通訊埠。
PORT1=number PORT2=number
gcloud compute ssh ${HOSTNAME} \ --project=${PROJECT} --zone=${ZONE} -- \ -4 -N -L ${PORT1}:${HOSTNAME}:${PORT2}--分隔符可讓您將 SSH 引數新增至gcloud compute ssh指令,如下所示:-4指示 ssh 只能使用 IPv4。-N指示gcloud不要開啟遠端殼層。-L ${PORT1}:${HOSTNAME}:${PORT2}指定從特定的 Cloud Shell PORT1 到叢集 HOSTNAME:PORT2 的本機通訊埠轉送。
這個
gcloud指令會建立在其他 SSH 殼層工作階段之外獨立運作的 SSH 通道,將通道相關錯誤留在殼層輸出之外,防止通道意外關閉。
設定瀏覽器
gcloud 指令
SSH 通道支援使用 SOCKS 通訊協定的流量 Proxy。如要將瀏覽器設定為使用 Proxy,請使用 Proxy 伺服器參數開啟新的瀏覽器工作階段。以下是使用 Google Chrome 瀏覽器的範例。HOSTNAME 是叢集主要節點的名稱 (請參閱設定常用的指令變數一節)。
Linux
/usr/bin/google-chrome \
--proxy-server="socks5://localhost:${PORT}" \
--user-data-dir=/tmp/${HOSTNAME}
macOS
"/Applications/Google Chrome.app/Contents/MacOS/Google Chrome" \
--proxy-server="socks5://localhost:${PORT}" \
--user-data-dir=/tmp/${HOSTNAME}
Windows
"%ProgramFiles(x86)%\Google\Chrome\Application\chrome.exe" ^ --proxy-server="socks5://localhost:%PORT%" ^ --user-data-dir="%Temp%\%HOSTNAME%"
這個指令使用下列 Chrome 瀏覽器標記:
-proxy-server="socks5://localhost:1080"告訴 Chrome 使用第 5 版 SOCKS 通訊協定,透過 SOCKS Proxy 伺服器localhost:${PORT}傳送所有的http://和https://網址要求。${PORT} 是您在建立 SSH 通道中設定的通訊埠變數。網址的主機名稱會由 Proxy 伺服器解析,而不是由 Chrome 在本機解析。--user-data-dir=/tmp/${HOSTNAME}會強制 Chrome 開啟一個未與任何現有 Chrome 工作階段繫結的新視窗。如果沒有此標記,Chrome 可能會開啟與現有 Chrome 工作階段繫結的新視窗,並且忽略您的--proxy-server設定。為--user-data-dir設定的值可以是任何不存在的路徑。
Cloud Shell
使用 Cloud Shell 時,您無需設定本機瀏覽器。建立 SSH 通道後,即可使用 Cloud Shell 網頁預覽功能連線至叢集介面。
連線至叢集介面
gcloud 指令
只要將本機瀏覽器設為使用 Proxy,您就可以連往 Managed Service for Apache Spark 叢集上的網路介面網址 (請參閱可用介面一節)。瀏覽器網址的格式及內容如下:
http://cluster-name-m:port (叢集介面通訊埠)
Cloud Shell
點選 Cloud Shell [Web Preview] (網頁預覽) 按鈕
,然後選取:
- 「透過以下通訊埠預覽:8080」,或
- 「變更通訊埠」,並在對話方塊中插入通訊埠編號
gcloud compute ssh 指令的 Cloud Shell PORT1 號碼 (通訊埠 8080 至 8084) 進行設定。
連線至叢集主要執行個體上的網頁介面通訊埠的瀏覽器視窗將會開啟。
常見問題和偵錯提示
如果在瀏覽器中看不到使用者介面該怎麼辦?
如果您在瀏覽器中看不到使用者介面,最常見的兩個原因是:
您發生網路連線問題,而且原因可能是防火牆。請執行以下指令 (在設定本機變數之後),檢查您是否能透過 SSH 通道連線至主要執行個體。如果不能,表示發生連線問題。
Linux/macOS
gcloud compute ssh ${HOSTNAME}-m \ --project=${PROJECT}Windows
gcloud compute ssh %HOSTNAME%-m ^ --project=%PROJECT%
SOCKS Proxy 受到其他 Proxy 的干擾。如要檢查 Proxy,請執行 (Linux 和 macOS 提供的) 以下
curl指令:如果看見 HTTP 回應,表示 Proxy 運作正常,因此原因可能是 SOCKS Proxy 受到其他 Proxy 或瀏覽器擴充功能的干擾。Linux/macOS
curl -Is --socks5-hostname localhost:1080 http://cluster-name-m:8088
Windows
curl.exe -Is --socks5-hostname localhost:1080 http://cluster-name-m:8088
我可以使用本機通訊埠轉送,而不用 SOCKS Proxy 嗎?
除了 SOCKS Proxy 之外,您也可以使用 SSH 本機通訊埠轉送功能來存取主要執行個體上執行的網頁應用程式 UI,此功能可將主要執行個體的通訊埠轉送至本機通訊埠。舉例來說,以下指令可讓您在未使用 SOCKS 的情況下,透過 localhost:1080 存取 cluster-name-m:8088 (請參閱「設定常用的指令變數」一節):
Linux/macOS
gcloud compute ssh ${HOSTNAME}-m \
--project=${PROJECT} -- \
-L 1080:${HOSTNAME}-m:8088 -N -n
Windows
gcloud compute ssh %HOSTNAME%-m ^ --project=%PROJECT% -- ^ -L 1080:%HOSTNAME%-m:8088 -N -n
使用 SOCKS Proxy 可能比使用本機通訊埠轉送功能適合,原因是 Proxy:
- 可讓您存取所有網頁應用程式通訊埠,而不用費心為每個 UI 通訊埠設定通訊埠轉送通道。
- 可讓 Spark 和 Hadoop 網路使用者介面正確解析 DNS 主機