arrow_back

使用內部應用程式負載平衡器

登录 加入
访问 700 多个实验和课程

使用內部應用程式負載平衡器

实验 45 分钟 universal_currency_alt 1 积分 show_chart 入门级
info 此实验可能会提供 AI 工具来支持您学习。
访问 700 多个实验和课程

GSP041

Google Cloud 自學實驗室標誌

總覽

要建構安全穩固、易於管理的內部應用程式,為業務營運提供強大後盾,內部應用程式負載平衡器是關鍵。本實驗室將說明如何在私有雲網路內分配網路流量,同時避免虛擬機器 (VM) 直接暴露於公開網際網路中,確保服務安全且高效運作。

您將建構一套精簡但很常見的架構模式:

  • 「網路層」(對外公開的網站),需要向其他內部服務尋求協助。
  • 「內部服務層」(質數計算機),分布於多部機器上,負責執行特定工作。

這種架構可確保即使內部服務的某個部分忙碌或停止運作,負載平衡器也會將要求自動導向健康狀態良好的機器,保持整個系統順暢運作。

學習內容

  • 瞭解內部負載平衡器的組成元件。
  • 建立一組後端機器 (質數計算機)。
  • 設定內部負載平衡器,將內部流量導向後端機器。
  • 從其他內部機器測試內部負載平衡器。
  • 設定對外公開的網路伺服器,透過內部負載平衡器取得內部「質數計算機」服務的計算結果。

先備知識

  • 熟悉 Google Cloud Compute Engine 的基本概念:瞭解什麼是虛擬機器 (VM) 執行個體。
  • 瞭解網路基本概念:知道什麼是 IP 位址。
  • 具備基本的 Unix/Linux 指令列操作知識:瞭解如何在終端機輸入指令。
  • 對虛擬私有雲有初步的瞭解:知道 Google Cloud 資源位於私人網路中。

設定和需求

瞭解以下事項後,再點選「Start Lab」按鈕

請詳閱以下操作說明。實驗室活動會計時,且中途無法暫停。點選「Start Lab」後就會開始計時,顯示可使用 Google Cloud 資源的時間。

您將在真正的雲端環境完成實作實驗室活動,而不是模擬或示範環境。為此,我們會提供新的暫時憑證,供您在實驗室活動期間登入及存取 Google Cloud。

為了順利完成這個實驗室,請先確認:

  • 可以使用標準的網際網路瀏覽器 (Chrome 瀏覽器為佳)。
注意事項:請使用無痕模式 (建議選項) 或私密瀏覽視窗執行此實驗室,這可以防止個人帳戶和學員帳戶之間的衝突,避免個人帳戶產生額外費用。
  • 是時候完成實驗室活動了!別忘了,活動一旦開始將無法暫停。
注意事項:務必使用實驗室專用的學員帳戶。如果使用其他 Google Cloud 帳戶,可能會產生額外費用。

如何開始研究室及登入 Google Cloud 控制台

  1. 點選「Start Lab」按鈕。如果實驗室會產生費用,畫面上會出現選擇付款方式的對話方塊。左側的「Lab Details」窗格會顯示下列項目:

    • 「Open Google Cloud console」按鈕
    • 剩餘時間
    • 必須在這個研究室中使用的臨時憑證
    • 完成這個實驗室所需的其他資訊 (如有)
  2. 點選「Open Google Cloud console」;如果使用 Chrome 瀏覽器,也能按一下滑鼠右鍵,選取「在無痕視窗中開啟連結」

    接著,實驗室會啟動相關資源,並開啟另一個分頁,顯示「登入」頁面。

    提示:您可以在不同的視窗中並排開啟分頁。

    注意:如果頁面中顯示「選擇帳戶」對話方塊,請點選「使用其他帳戶」
  3. 如有必要,請將下方的 Username 貼到「登入」對話方塊。

    {{{user_0.username | "Username"}}}

    您也可以在「Lab Details」窗格找到 Username。

  4. 點選「下一步」

  5. 複製下方的 Password,並貼到「歡迎使用」對話方塊。

    {{{user_0.password | "Password"}}}

    您也可以在「Lab Details」窗格找到 Password。

  6. 點選「下一步」

    重要事項:請務必使用實驗室提供的憑證,而非自己的 Google Cloud 帳戶憑證。 注意:如果使用自己的 Google Cloud 帳戶來進行這個實驗室,可能會產生額外費用。
  7. 按過後續的所有頁面:

    • 接受條款及細則。
    • 由於這是臨時帳戶,請勿新增救援選項或雙重驗證機制。
    • 請勿申請免費試用。

Google Cloud 控制台稍後會在這個分頁開啟。

注意:如要使用 Google Cloud 產品和服務,請點選「導覽選單」,或在「搜尋」欄位輸入服務或產品名稱。「導覽選單」圖示和搜尋欄位

啟動 Cloud Shell

Cloud Shell 是搭載多項開發工具的虛擬機器,提供永久的 5 GB 主目錄,而且在 Google Cloud 中運作。Cloud Shell 提供指令列存取權,方便您使用 Google Cloud 資源。

  1. 點按 Google Cloud 控制台頂端的「啟用 Cloud Shell」圖示 「啟動 Cloud Shell」圖示

  2. 系統顯示視窗時,請按照下列步驟操作:

    • 繼續操作 Cloud Shell 視窗。
    • 授權 Cloud Shell 使用您的憑證發出 Google Cloud API 呼叫。

連線建立完成即代表已通過驗證,而且專案已設為您的 Project_ID。輸出內容中有一行文字,宣告本工作階段的 Project_ID

Your Cloud Platform project in this session is set to {{{project_0.project_id | "PROJECT_ID"}}}

gcloud 是 Google Cloud 的指令列工具,已預先安裝於 Cloud Shell,並支援 Tab 鍵自動完成功能。

  1. (選用) 您可以執行下列指令來列出使用中的帳戶:
gcloud auth list
  1. 點按「授權」

輸出內容:

ACTIVE: * ACCOUNT: {{{user_0.username | "ACCOUNT"}}} To set the active account, run: $ gcloud config set account `ACCOUNT`
  1. (選用) 您可以使用下列指令來列出專案 ID:
gcloud config list project

輸出內容:

[core] project = {{{project_0.project_id | "PROJECT_ID"}}} 注意:如需 gcloud 的完整說明,請前往 Google Cloud 參閱 gcloud CLI 總覽指南

設定區域和可用區

  1. 設定本實驗室的專案區域和可用區:
gcloud config set compute/region {{{project_0.default_region | Region}}} gcloud config set compute/zone {{{project_0.default_zone | Zone}}}
  1. 建立區域的變數:
export REGION={{{project_0.default_region | Region}}}
  1. 建立可用區的變數:
export ZONE={{{project_0.default_zone | Zone}}}

詳情請參閱區域和可用區說明文件

注意:如果在自己的機器上執行 gcloud,各個工作階段都會保留這些設定,但如果在 Cloud Shell 中,每次啟動新工作階段或重新連線時,都必須進行這項設定。

工作 1:建立虛擬環境

虛擬環境有助於確保專案軟體井然有序,且執行程式碼時一律使用所需工具的特定版本。

Python 虛擬環境可用來獨立安裝套件,將其與系統區隔開來。

  1. 安裝 virtualenv 環境:
sudo apt-get install -y virtualenv
  1. 建構虛擬環境:
python3 -m venv venv
  1. 啟用虛擬環境:
source venv/bin/activate

工作 2:建立後端代管執行個體群組

透過「代管執行個體群組」,Google Cloud 可自動為服務建立及維護多個相同的副本。如果其中一個副本故障,Google Cloud 就會加以替換,藉此提升服務的可靠性。

建立開機指令碼

這個指令碼就像一組指示,群組中的每個新 VM 啟動時都會按照這些指示運作。我們的指令碼會包含以 Python 編寫的小型網路伺服器,功能是判斷某個數字是否為質數,是的話會傳回 True,不是則傳回 False。

  1. 首先,在主目錄中建立 backend.sh 指令碼:
touch ~/backend.sh
  1. 點選 Cloud Shell 頂端的「開啟編輯器」圖示。如果出現提示訊息,請點選「在新視窗中開啟」

UI 中醒目顯示的「開啟編輯器」圖示

注意:如果沒有看到「程式碼編輯器」圖示,請點選「導覽選單」圖示,關閉左側面板。

UI 中醒目顯示的「導覽選單」圖示

啟動程式碼編輯器後,Cloud Shell 會移至新視窗,並開啟程式碼編輯器。幾秒後,工作區就會出現在畫面上。

  1. 在左側窗格中選取 backend.sh 檔案。

  2. 接著,在右側的編輯器中加入下列指令碼:

sudo chmod -R 777 /usr/local/sbin/ sudo cat << EOF > /usr/local/sbin/serveprimes.py import http.server def is_prime(a): return a!=1 and all(a % i for i in range(2,int(a**0.5)+1)) class myHandler(http.server.BaseHTTPRequestHandler): def do_GET(s): s.send_response(200) s.send_header("Content-type", "text/plain") s.end_headers() s.wfile.write(bytes(str(is_prime(int(s.path[1:]))).encode('utf-8'))) http.server.HTTPServer(("",80),myHandler).serve_forever() EOF nohup python3 /usr/local/sbin/serveprimes.py >/dev/null 2>&1 &
  1. 依序點選「File」>「Save」

建立執行個體範本

  1. 在 Cloud Shell 的工具列中點選「開啟終端機」,然後輸入下列指令,建立執行個體範本 primecalc
gcloud compute instance-templates create primecalc \ --metadata-from-file startup-script=backend.sh \ --no-address --tags backend --machine-type=e2-medium

以上是後端 VM 的「設定藍圖」。請注意,其中包含 --no-address,代表這些後端 VM 出於安全性,將無法存取公開網際網路。

開啟防火牆

您必須建立防火牆規則,允許通訊埠 80 的流量 (標準 HTTP 流量) 進入後端 VM。這項設定非常重要,完成後,內部應用程式負載平衡器和健康狀態檢查功能才能與後端 VM 通訊。

  1. 設定防火牆,開放通訊埠 80 的流量進入:
gcloud compute firewall-rules create http --network default --allow=tcp:80 \ --source-ranges {{{project_0.startup_script.selected_cidr | IP}}} --target-tags backend

請點選下方的「Check my progress」,確認您順利完成本實驗室的相關操作。

建立執行個體範本,並開啟防火牆允許通訊埠 80 的流量

建立執行個體群組

  1. 接著,建立代管執行個體群組 backend,執行個體數量先指定為 3 個:
gcloud compute instance-groups managed create backend \ --size 3 \ --template primecalc \ --zone $ZONE
  1. 指令執行完畢後,請回到控制台分頁,接著前往「Compute Engine」>「VM 執行個體」。現在應該會看到執行個體群組建立了三個後端 VM。

「執行個體」分頁中列出的三個後端

後端現在已可處理流量。

請點選下方的「Check my progress」,確認您順利完成本實驗室的相關操作。

建立執行個體群組

工作 3:設定內部負載平衡器

接下來要為內部服務建立單一私人 VIP 入口。有了這個入口,其他內部應用程式就能穩定地連至「質數計算機」,不必知道哪個後端 VM 可用或在運作中。現在來設定內部負載平衡器,並連至剛才建立的執行個體群組。

內部負載平衡器包含三個主要部分:

  • 轉送規則:這是實際的私人 IP 位址,負責接收其他內部服務傳送的要求,並將流量「轉送」至後端服務。
  • 後端服務:定義負載平衡器如何將流量分配給 VM 執行個體,也包含健康檢查。
  • 健康狀態檢查:這種持續性的檢查機制會監控後端 VM 的「健康狀態」。負載平衡器只會將流量傳送至通過健康狀態檢查的機器,確保服務隨時可以使用。

下圖顯示如何使用各可用區內後端群組中的多個執行個體,達到負載平衡。

負載平衡圖表

建立健康狀態檢查

  1. 為確保負載平衡器只會將流量傳送至健康狀態良好的執行個體,必須執行健康檢查。您的後端服務是 HTTP 伺服器,因此請檢查存取特定網址路徑時 (在本例中為 /2,用來確認 2 是否為質數),系統是否會傳回「200 OK」:
gcloud compute health-checks create http ilb-health --request-path /2

由於提供的是 HTTP 服務,因此請檢查存取特定網址路徑時 (在本例中為 /2,用來確認 2 是否為質數),系統是否會填入「200」回應:

建立後端服務

  1. 接著,建立後端服務 prime-service
gcloud compute backend-services create prime-service \ --load-balancing-scheme internal --region=$REGION \ --protocol tcp --health-checks ilb-health

這項服務會將健康狀態檢查連至執行個體群組。

將執行個體群組新增至後端服務

  1. 將後端執行個體群組連至 prime-service 後端服務,讓負載平衡器知道應管理哪些機器:
gcloud compute backend-services add-backend prime-service \ --instance-group backend --instance-group-zone=$ZONE \ --region=$REGION

建立轉送規則

  1. 最後,建立轉送規則 prime-lb,並指定靜態 IP 位址
gcloud compute forwarding-rules create prime-lb \ --load-balancing-scheme internal \ --ports 80 --network default \ --region=$REGION --address {{{project_0.startup_script.selected_forwarding_rule_cidr | IP}}} \ --backend-service prime-service

內部「質數計算」服務現已完成所有設定,可透過內部 IP 位址查詢。

請點選下方的「Check my progress」,確認您順利完成本實驗室的相關操作。

設定內部負載平衡器

工作 4:測試負載平衡器

這個步驟非常重要,可確認內部應用程式負載平衡器是否正確將流量導向後端服務。如果是的話,就表示其他內部應用程式現在可透過單一穩定的 IP 位址,穩定地連至服務,確保系統持續運作。

為了測試負載平衡器,您必須在內部應用程式負載平衡器所在的網路中,建立新的 VM 執行個體。該 VM 只能在私有雲網路內存取,無法直接從 Cloud Shell (位於這個特定網路外) 存取。

  1. 在 Cloud Shell 使用 gcloud,建立簡單的測試執行個體:
gcloud compute instances create testinstance \ --machine-type=e2-standard-2 --zone $ZONE
  1. 然後透過 SSH 連至該執行個體:
gcloud compute ssh testinstance --zone $ZONE

如果出現提示訊息,請輸入 Y 並按兩次 Enter 鍵來繼續操作。

對負載平衡器執行查詢

  1. 在測試執行個體中,使用 curl 向內部應用程式負載平衡器的 IP 位址發送查詢要求,確認幾個數字是否為質數:
curl {{{project_0.startup_script.selected_forwarding_rule_cidr | IP}}}/2 curl {{{project_0.startup_script.selected_forwarding_rule_cidr | IP}}}/4 curl {{{project_0.startup_script.selected_forwarding_rule_cidr | IP}}}/5

系統會直接在指令列旁輸出結果,顯示 True 或 False,如下所示:

user@testinstance:~$ curl {{{project_0.startup_script.selected_forwarding_rule_cidr | IP}}}/2 Trueuser@testinstance:~$ curl {{{project_0.startup_script.selected_forwarding_rule_cidr | IP}}}/4 Falseuser@testinstance:~$ curl {{{project_0.startup_script.selected_forwarding_rule_cidr | IP}}}/5 Trueuser@testinstance:~$ exit

您應該會看到系統判斷正確,指出 2 和 5 為質數,而 4 不是,這表示內部應用程式負載平衡器運作正常,在收到要求後,成功將要求轉送至其中一個後端「質數計算」VM。

服務提供正確的回應:2 和 5 是質數,但 4 不是。

  1. 離開測試執行個體:
exit
  1. 接著刪除該執行個體 (因為已不再需要):
gcloud compute instances delete testinstance --zone=$ZONE
  1. 輸入 Y 確認刪除。

工作 5:建立對外公開的網路伺服器

接下來,您可以透過這個工作,瞭解對外公開的應用程式 (如網站) 如何使用內部服務。您將建立對外公開的網路伺服器,使用內部「質數計算機」服務 (透過內部應用程式負載平衡器) 來顯示質數矩陣。

  1. 首先,在主目錄中為這個對外公開的「前端」建立開機指令碼:
touch ~/frontend.sh
  1. 程式碼編輯器應該仍處於開啟狀態。如果沒有,請在殼層中選取「程式碼編輯器」,啟動該編輯器:

UI 中醒目顯示的「開啟編輯器」按鈕

幾秒後,工作區就會出現在畫面上。

  1. 接著,在右側的編輯器中加入下列指令碼:
sudo chmod -R 777 /usr/local/sbin/ sudo cat << EOF > /usr/local/sbin/getprimes.py import urllib.request from multiprocessing.dummy import Pool as ThreadPool import http.server PREFIX="http://{{{project_0.startup_script.selected_forwarding_rule_cidr | IP}}}/" #HTTP Load Balancer def get_url(number): return urllib.request.urlopen(PREFIX+str(number)).read().decode('utf-8') class myHandler(http.server.BaseHTTPRequestHandler): def do_GET(s): s.send_response(200) s.send_header("Content-type", "text/html") s.end_headers() i = int(s.path[1:]) if (len(s.path)>1) else 1 s.wfile.write("<html><body><table>".encode('utf-8')) pool = ThreadPool(10) results = pool.map(get_url,range(i,i+100)) for x in range(0,100): if not (x % 10): s.wfile.write("<tr>".encode('utf-8')) if results[x]=="True": s.wfile.write("<td bgcolor='#00ff00'>".encode('utf-8')) else: s.wfile.write("<td bgcolor='#ff0000'>".encode('utf-8')) s.wfile.write(str(x+i).encode('utf-8')+"</td> ".encode('utf-8')) if not ((x+1) % 10): s.wfile.write("</tr>".encode('utf-8')) s.wfile.write("</table></body></html>".encode('utf-8')) http.server.HTTPServer(("",80),myHandler).serve_forever() EOF nohup python3 /usr/local/sbin/getprimes.py >/dev/null 2>&1 &
  1. 依序點選「File」>「Save」

建立前端執行個體

  1. 在 Cloud Shell,建立執行個體 frontend 來執行這個網路伺服器:
gcloud compute instances create frontend --zone=$ZONE \ --metadata-from-file startup-script=frontend.sh \ --tags frontend --machine-type=e2-standard-2

開啟前端的防火牆

  1. 這是對外公開的伺服器,因此您必須開啟防火牆,允許來自網際網路上任何位置 (0.0.0.0/0) 的流量通過通訊埠 80:
gcloud compute firewall-rules create http2 --network default --allow=tcp:80 \ --source-ranges 0.0.0.0/0 --target-tags frontend
  1. 依序點選「導覽選單」圖示 >「Compute Engine」>「VM 執行個體」。如果沒有看到 frontend 執行個體,請重新整理瀏覽器。

  2. 在瀏覽器中開啟前端的外部 IP

顯示所選前端 IP 位址的「VM 執行個體」頁面

您應該會看到一個矩陣 (如下所示),其中顯示 100 以內的所有質數並以綠色標示:

矩陣圖,以綠色標示質數

  1. 試著在路徑中加入數字,例如 http://your-ip/10000,查看從該數字開始的所有質數。

矩陣圖,以綠色標示從 100 開始的質數

注意:範例開機指令碼並未有效計算質數,也未套用錯誤偵測或修正演算法。如果在路徑中加入過大的數字,會導致服務逾時。

請點選下方的「Check my progress」,確認您順利完成本實驗室的相關操作。

建立對外公開的網路伺服器

恭喜!

您已成功使用 Google Cloud 的內部應用程式負載平衡器,建構可靠的內部服務,並實際驗證公開應用程式如何安全地運用這項服務。

後續步驟/瞭解詳情

Google Cloud 教育訓練與認證

協助您瞭解如何充分運用 Google Cloud 的技術。我們的課程會介紹專業技能和最佳做法,讓您可以快速掌握要領並持續進修。我們提供從基本到進階等級的訓練課程,並有隨選、線上和虛擬課程等選項,方便您抽空參加。認證可協助您驗證及證明自己在 Google Cloud 技術方面的技能和專業知識。

使用手冊上次更新日期:2025 年 7 月 18 日

實驗室上次測試日期:2025 年 7 月 18 日

Copyright 2025 Google LLC 保留所有權利。Google 和 Google 標誌是 Google LLC 的商標,其他公司和產品名稱則有可能是其關聯公司的商標。

准备工作

  1. 实验会创建一个 Google Cloud 项目和一些资源,供您使用限定的一段时间
  2. 实验有时间限制,并且没有暂停功能。如果您中途结束实验,则必须重新开始。
  3. 在屏幕左上角,点击开始实验即可开始

使用无痕浏览模式

  1. 复制系统为实验提供的用户名密码
  2. 在无痕浏览模式下,点击打开控制台

登录控制台

  1. 使用您的实验凭证登录。使用其他凭证可能会导致错误或产生费用。
  2. 接受条款,并跳过恢复资源页面
  3. 除非您已完成此实验或想要重新开始,否则请勿点击结束实验,因为点击后系统会清除您的工作并移除该项目

此内容目前不可用

一旦可用,我们会通过电子邮件告知您

太好了!

一旦可用,我们会通过电子邮件告知您

一次一个实验

确认结束所有现有实验并开始此实验

使用无痕浏览模式运行实验

请使用无痕模式或无痕式浏览器窗口运行此实验。这可以避免您的个人账号与学生账号之间发生冲突,这种冲突可能导致您的个人账号产生额外费用。