為私人 VM 建構網際網路連線能力

Last reviewed 2024-05-10 UTC

本文件說明使用具有私人 IP 位址的 Compute Engine 資源與網際網路連線的選項。這對於建立 Google Cloud 服務的開發人員和 Google Cloud 環境的網路管理員都很有幫助。

本教學課程假設您已熟悉如何部署虛擬私人雲端、Compute Engine 和基本的 TCP/IP 網路。

目標

  • 瞭解私人 VM 要在其虛擬私人雲端之外進行連線時的可用選項。
  • 為適用於 TCP 通道的 Identity-Aware Proxy (IAP) 建立一個適用於 SSH 等互動式服務的執行個體。
  • 建立一個 Cloud NAT 執行個體,讓 VM 可以建立連至網際網路的傳出連線。
  • 設定 HTTP 負載平衡器,以支援從網際網路到您的 VM 的傳入連線。

費用

本教學課程使用 Google Cloud的計費元件,包括:

使用 Pricing Calculator,根據您的預測使用量來產生預估費用。我們的計算結果指出,執行本教學課程的總費用每天不到 $5 美元。

事前準備

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  5. Make sure that billing is enabled for your Google Cloud project.

簡介

與公開 (外部) IP 位址相比,私人 IP 位址有許多優點,包括:

  • 減少受攻擊面。從 VM 移除外部 IP 位址,可讓攻擊者更難以連上 VM 並利用潛在的安全漏洞。
  • 提高靈活度。與靜態外部 IP 位址相比,引入一個抽象層 (例如負載平衡器或 NAT 服務) 可提供更靈活可靠的服務。

這個解決方案會討論下表列出的這三種情況:

互動 擷取中 服務
由遠端主機透過適用於 TCP 的 IAP 起始直接連至 VM 的 SSH 連線。

範例:透過 SSH 或遠端桌面協定進行遠端管理

由 VM 使用 Cloud NAT 起始連至網際網路上的外部主機的連線。

範例:OS 更新、外部 API

由遠端主機透過全域 Google Cloud負載平衡器起始與 VM 的連線。

範例:應用程式前端、WordPress

有些環境可能只涉及其中一種情況,但有很多環境會涵蓋以上所有情況,而Google Cloud可以提供全面支援。

以下各節說明一個具有 HTTP 已平衡負載服務的多地區環境,該服務由兩個地區中的兩個 VM 提供支援。這些 VM 使用 Cloud NAT 進行傳出通訊。為進行管理,這些 VM 可供使用 IAP 透過 SSH 通道存取。

下圖提供以上三種用途和相關元件的總覽。

此解決方案架構顯示從用戶端通過負載平衡器到達 VM 執行個體的流程、用於從執行個體存取網際網路的 Cloud NAT,以及允許從用戶端透過 SSH 直接存取執行個體的 IAP。

建立 VM 執行個體

在本教學課程一開始,您總共會建立四個虛擬機器 (VM) 執行個體:兩個不同地區中,每個地區各兩個執行個體。您必須為所有執行個體提供相同的標記,防火牆規則稍後會使用該標記來允許連入流量到達您的執行個體。

下圖顯示由您建立且分布在兩個區域中的 VM 執行個體和執行個體群組。

此解決方案架構醒目顯示 2 個區域中的四個 VM 執行個體。

您新增至每個執行個體的開機指令碼會安裝 Apache,並為每個執行個體建立專屬的首頁。

這個程序包含使用 Google Cloud 控制台和 gcloud 指令的操作說明。透過 Cloud Shell 是使用 gcloud 指令最簡單的方式。

控制台

  1. 前往 Google Cloud 控制台的「VM instances」(VM 執行個體) 頁面:

    前往「VM INSTANCES」(VM 執行個體)頁面

  2. 點選「建立執行個體」

  3. 將「Name」(名稱) 設定為 www-1

  4. 將「Zone」(區域) 設為 us-central1-b

  5. 按一下 [Management, security, disks, networking, sole tenancy] (管理、安全性、磁碟、網路、單獨租用)。

  6. 按一下 [Networking] (網路) 並進行以下設定:

    • 針對「HTTP traffic」(HTTP 流量),在「Network tags」(網路標記) 方塊中輸入 http-tag
    • 在「Network Interfaces」(網路介面) 下方,按一下
    • 在「External IP」(外部 IP) 之下,選取 [None] (無)
  7. 按一下 [Management] (管理),然後將「Startup script」(開機指令碼) 設為以下內容:

    sudo apt-get update
    sudo apt-get install apache2 -y
    sudo a2ensite default-ssl
    sudo a2enmod ssl
    sudo service apache2 restart
    echo '<!doctype html><html><body><h1>server 1</h1></body></html>' | sudo tee /var/www/html/index.html
    
  8. 點選「建立」

  9. 使用相同的設定建立 www-2,但將「Startup script」(開機指令碼) 設為以下內容:

    sudo apt-get update
    sudo apt-get install apache2 -y
    sudo a2ensite default-ssl
    sudo a2enmod ssl
    sudo service apache2 restart
    echo '<!doctype html><html><body><h1>server 2<h1></body></html>' | sudo tee /var/www/html/index.html
    
  10. 使用相同的設定建立 www-3,但將「Zone」(區域) 設為 europe-west1-b,並將「Startup script」(開機指令碼) 設為以下內容:

    sudo apt-get update
    sudo apt-get install apache2 -y
    sudo a2ensite default-ssl
    sudo a2enmod ssl
    sudo service apache2 restart
    echo '<!doctype html><html><body><h1>server 3</h1></body></html>' | sudo tee /var/www/html/index.html
    
  11. 使用相同的設定建立 www-4,但將「Zone」(區域) 設為 europe-west1-b,並將「Startup script」(開機指令碼) 設為以下內容:

    sudo apt-get update
    sudo apt-get install apache2 -y
    sudo a2ensite default-ssl
    sudo a2enmod ssl
    sudo service apache2 restart
    echo '<!doctype html><html><body><h1>server 4</h1></body></html>' | sudo tee /var/www/html/index.html
    

gcloud

  1. 開啟 Cloud Shell:

    開啟 Cloud Shell

  2. 使用基本的開機指令碼在 us-central1-b 中建立名為 www-1 的執行個體:

    gcloud compute instances create www-1 \
        --image-family debian-9 \
        --image-project debian-cloud \
        --zone us-central1-b \
        --tags http-tag \
        --network-interface=no-address \
        --metadata startup-script="#! /bin/bash
    sudo apt-get update
    sudo apt-get install apache2 -y
    sudo service apache2 restart
    echo '<!doctype html><html><body><h1>www-1</h1></body></html>' | tee /var/www/html/index.html
    EOF"
    
  3. us-central1-b 中建立名為 www-2 的執行個體:

    gcloud compute instances create www-2 \
        --image-family debian-9 \
        --image-project debian-cloud \
        --zone us-central1-b \
        --tags http-tag \
        --network-interface=no-address \
        --metadata startup-script="#! /bin/bash
    sudo apt-get update
    sudo apt-get install apache2 -y
    sudo service apache2 restart
    echo '<!doctype html><html><body><h1>www-2</h1></body></html>' | tee /var/www/html/index.html
    EOF"
    
  4. 這次在 europe-west1-b 中建立名為 www-3 的執行個體:

    gcloud compute instances create www-3 \
        --image-family debian-9 \
        --image-project debian-cloud \
        --zone europe-west1-b \
        --tags http-tag \
        --network-interface=no-address \
        --metadata startup-script="#! /bin/bash
    sudo apt-get update
    sudo apt-get install apache2 -y
    sudo service apache2 restart
    echo '<!doctype html><html><body><h1>www-3</h1></body></html>' | tee /var/www/html/index.html
    EOF"
    
  5. 建立名為 www-4 的執行個體,這次也是在 europe-west1-b 中:

    gcloud compute instances create www-4 \
        --image-family debian-9 \
        --image-project debian-cloud \
        --zone europe-west1-b \
        --tags http-tag \
        --network-interface=no-address \
        --metadata startup-script="#! /bin/bash
    sudo apt-get update
    sudo apt-get install apache2 -y
    sudo service apache2 restart
    echo '<!doctype html><html><body><h1>www-4</h1></body></html>' | tee /var/www/html/index.html
    EOF"
    

Terraform

  1. 開啟 Cloud Shell:

    開啟 Cloud Shell

  2. 從 GitHub 複製存放區:

    git clone https://github.com/GoogleCloudPlatform/gce-public-connectivity-terraform

  3. 將工作目錄變更為存放區目錄:

    cd iap

  4. 安裝 Terraform

  5. scripts/set_env_vars.sh 檔案中的 [YOUR-ORGANIZATION-NAME] 替換為貴機構的名稱。 Google Cloud

  6. 設定環境變數:

    source scripts/set_env_vars.sh

  7. 套用 Terraform 設定:

    terraform apply

設定 IAP 通道以和執行個體互動

如要登入 VM 執行個體,您必須使用 SSH 或遠端桌面協定等工具連線至執行個體。根據您在本教學課程中建立的設定,您無法直接連線至執行個體。不過,您可以在 IAP 中使用 TCP 轉送功能,以便從遠端存取這些互動模式。

在本教學課程中,您將使用 SSH。

在本節中,您將執行以下操作:

  1. 使用 IAP 通道連線至 Compute Engine 執行個體。
  2. 在 IAM 中新增具有 IAP 通道權限的第二個使用者。

下圖說明您將在本節中建構的架構。灰色區域我們會留到本教學課程的其他部分再進行討論。

此解決方案架構顯示 IAP 提供存取權,讓用戶端和執行個體之間能透過 SSH 進行存取。

IAP 的限制

  • 頻寬:IAP TCP 轉送功能不適用於大量轉移資料。對於我們視為濫用這項服務的使用者,IAP 保留採行頻率限制的權利。
  • 連線長度:除非必須進行維護作業,否則 IAP 不會中斷使用中工作階段的連線。
  • 通訊協定:適用於 TCP 的 IAP 不支援 UDP。

建立防火牆規則,以允許建立通道

如要透過 SSH 連線至您的執行個體,您必須在防火牆中開啟適當的通訊埠。IAP 連線來自一組特定的 IP 位址 (35.235.240.0/20)。因此,您可以將規則限制在這個 CIDR 範圍內。

控制台

  1. 在 Google Cloud 控制台中,前往「Firewall policies」(防火牆政策) 頁面:

    前往「FIREWALL POLICIES」(防火牆政策) 頁面

  2. 點按「建立防火牆規則」

  3. 將「Name」(名稱) 設定為 allow-ssh-from-iap

  4. 將「VPC network」(虛擬私有雲網路) 保留為 default

  5. 在「Targets」(目標) 下方,選取 [Specified target tags] (指定的目標標記)

  6. 將「Target tags」(目標標記) 設為 http-tag

  7. 將「Source filter」(來源篩選器) 保留設定為「IP ranges」(IP 範圍)

  8. 將「Source IP Ranges」(來源 IP 範圍) 設為 35.235.240.0/20

  9. 將「Allowed protocols and ports」(允許的通訊協定和通訊埠) 設為 tcp:22

  10. 點選「建立」

    新的防火牆規則可能需要一些時間才會顯示在主控台中。

gcloud

  • 建立名為 allow-ssh-from-iap 的防火牆規則:

    gcloud compute firewall-rules create allow-ssh-from-iap \
        --source-ranges 35.235.240.0/20 \
        --target-tags http-tag \
        --allow tcp:22
    

Terraform

  1. 將防火牆規則 Terraform 檔案複製到目前目錄:

    cp iap/vpc_firewall_rules.tf .

  2. 套用 Terraform 設定:

    terraform apply

測試通道

  • 在 Cloud Shell 中,使用 IAP 連線至執行個體 www-1

    gcloud compute ssh www-1 \
        --zone us-central1-b \
        --tunnel-through-iap
    

如果連線成功,您將會有一個透過 IAP 通道直接連至您私人 VM 的 SSH 工作階段。

將存取權授予其他使用者

連線至 VM 執行個體時,IAP 會使用您現有的專案角色和權限。根據預設,執行個體擁有者是唯一具有「受 IAP 保護的通道使用者」角色的使用者。如要允許其他人使用 IAP 通道存取您的 VM,您必須授予對方這個角色。

  1. 在 Google Cloud 控制台,依序前往「Security」(安全性) >「Identity-Aware Proxy」

     Google Cloud 控制台「安全性」頁面中的 IAP 選項。

    如果畫面上出現您必須設定 OAuth 同意畫面的訊息,請忽略該訊息;這與適用於 TCP 的 IAP 無關。

  2. 選取 [SSH and TCP Resources] (SSH 和 TCP 資源) 分頁標籤。

  3. 選取您已建立的 VM:

    顯示 4 個執行個體已全部選取的主控台。

  4. 按一下右側的「新增主體」

  5. 新增您要授予權限的使用者,選取「受 IAP 保護的通道使用者」角色,然後按一下「儲存」

摘要

您現在可以透過 SSH 連線至您的執行個體,以便管理執行個體或排解相關問題。

許多應用程式都必須透過連出連線,才能下載修補程式、與合作夥伴連線或下載資源。在下一節中,您將設定 Cloud NAT,允許您的 VM 存取這些資源。

部署 Cloud NAT 以進行擷取

Cloud NAT 服務可讓沒有外部 IP 位址的 VM 執行個體連線至網際網路。 Google Cloud Cloud NAT 會結合預設路徑實作傳出 NAT,以允許您的執行個體連上網際網路,但不會實作傳入 NAT。至於在您的虛擬私有雲網路以外的主機,則只能回應由您的執行個體啟動的既有連線,這類主機無法使用 Cloud NAT 來啟動自己與您的執行個體之間的連線。NAT 不會用於 Google Cloud內的流量。

Cloud NAT 是區域性資源。您可以將其設定為允許來自某個地區子網路的所有主要和次要 IP 位址範圍的流量,或是將其設為僅適用於其中部分範圍。

在本節中,您要在之前使用的每個地區中各設定一個 Cloud NAT 閘道。下圖說明您將在本節中建構的架構。灰色區域我們會留到本教學課程的其他部分再進行討論。

此解決方案架構顯示執行個體和網際網路之間的 Cloud NAT 執行個體。

使用 Cloud Router 建立 NAT 設定

您必須在需要使用 Cloud NAT 的執行個體的所在地區中建立 Cloud Router 執行個體。Cloud NAT 僅用於將 NAT 資訊置入 VM,而不做為實際 Cloud NAT 閘道的一部分。

這項設定允許地區中的所有執行個體將 Cloud NAT 用於所有主要和別名 IP 範圍,還能自動為 NAT 閘道分配外部 IP 位址。如需更多選項,請參閱 gcloud compute routers 說明文件。

主控台

  1. 前往「Cloud NAT」頁面:

    前往 Cloud NAT 頁面

  2. 按一下 [Get started] (開始使用) 或 [Create NAT gateway] (建立 NAT 閘道)

  3. 將「Gateway name」(閘道名稱) 設為 nat-config

  4. 將「VPC network」(虛擬私有雲網路) 設為 default

  5. 將「區域」設為 us-central1

  6. 在「Cloud Router」之下,選取 [Create new router] (建立新路由器),然後執行以下操作:

    • 將「Name」(名稱) 設定為 nat-router-us-central1
    • 點選「建立」
  7. 按一下 [Create] (建立)

  8. 重複上述程序,但要替換以下值:

    • Name (名稱):nat-router-europe-west1
    • Region (區域):europe-west1

gcloud

  1. 在每個地區中建立 Cloud Router 執行個體:

    gcloud compute routers create nat-router-us-central1 \
        --network default \
        --region us-central1
    
    gcloud compute routers create nat-router-europe-west1 \
        --network default \
        --region europe-west1
    
  2. 為 Cloud NAT 設定路由器:

    gcloud compute routers nats create nat-config \
        --router-region us-central1 \
        --router nat-router-us-central1 \
        --nat-all-subnet-ip-ranges \
         --auto-allocate-nat-external-ips
    
    gcloud compute routers nats create nat-config \
        --router-region europe-west1 \
        --router nat-router-europe-west1 \
        --nat-all-subnet-ip-ranges \
        --auto-allocate-nat-external-ips
    

Terraform

  1. 將 Terraform NAT 設定檔複製到目前目錄:

    cp nat/vpc_nat_gateways.tf .

  2. 套用 Terraform 設定:

    terraform apply

測試 Cloud NAT 設定

您現在可以測試是否能夠從您的 VM 執行個體向網際網路發出傳出要求。

  1. NAT 設定傳播至 VM 最多需要 3 分鐘的時間,請稍候。
  2. 在 Cloud Shell 中,使用您建立的通道連線至您的執行個體:

    gcloud compute ssh www-1 --tunnel-through-iap
    
  3. 登入執行個體後,請使用 curl 指令發出傳出要求:

    curl example.com
    

    您會看見以下輸出內容:

    <html>
    <head>
    <title>Example Domain</title>
    ...
    ...
    ...
    </head>
    
    <body>
    <div>
        <h1>Example Domain</h1>
        <p>This domain is established to be used for illustrative examples in documents.
            You may use this domain in examples without prior coordination or asking for
            permission.
        </p>
        <p><a href="http://www.iana.org/domains/example">More information...</a></p>
    </div>
    </body>
    </html>
    
    

如果指令成功執行,表示您已驗證您的 VM 可透過 Cloud NAT 連線至網際網路。

摘要

您的執行個體現在可以透過連出連線下載修補程式、與合作夥伴連線或下載資源。

在下一節中,您將為部署作業新增負載平衡設定,並將其設為允許遠端用戶端向您的伺服器發出要求。

建立 HTTP 已平衡負載服務以提供服務

針對您的應用程式使用 Cloud Load Balancing 有許多優點。這項服務能提供可擴充且順暢的負載平衡功能,每秒可執行一百萬次以上的查詢;也可以從您的 VM 卸載安全資料傳輸層 (SSL) 流量、根據位置和可用性為使用者將查詢轉送至最適當的地區,以及支援 HTTP/2 和 QUIC 等現代化的通訊協定。

在本教學課程中,您將利用另一項重要功能:使用 Proxy 處理全域 Anycast IP 連線。這項功能提供一個單一公開 IP 位址,而該 IP 會在 Google 遍及全球的邊緣終止。然後,用戶端可以連線至在 Google Cloud中任何位置的私人 IP 位址上託管的資源。這項設定有助於保護執行個體,使其免於遭到分散式阻斷服務攻擊和直接攻擊。並且會啟用 Google Cloud Armor 等功能以提供更高的安全性。

在本教學課程的這個部分,您將執行以下操作:

  1. 重設 VM 執行個體,安裝 Apache 網路伺服器。
  2. 建立防火牆規則,以允許透過負載平衡器存取。
  3. 為負載平衡器分配靜態全域 IPv4 和 IPv6 位址。
  4. 為您的執行個體建立執行個體群組。
  5. 開始將流量傳送至您的執行個體。

下圖說明您將在本節中建構的架構。灰色區域我們會留到本教學課程的其他部分再進行討論。

此架構醒目顯示 2 個執行個體群組中的 4 個執行個體。

重設 VM 執行個體

在本教學課程中,您先前建立的 VM 執行個體無法存取網際網路,因為系統未指派外部 IP 位址,且未設定 Cloud NAT。因此,安裝 Apache 的開機指令碼無法順利完成。

重新執行啟動指令碼最簡單的方法是重設這些執行個體,以便在下一節中安裝及使用 Apache 網路伺服器。

控制台

  1. 前往 Google Cloud 控制台的「VM instances」(VM 執行個體) 頁面

    前往 VM 執行個體

  2. 選取 www-1www-2www-3www-4

  3. 按一下頁面頂端的「Reset」(重設) 按鈕。

    如果沒有看到「重設」按鈕,請按一下「更多動作」,然後選擇「重設」

  4. 在對話方塊中按一下「重設」,確認要重設這四個執行個體。

gcloud

  1. 重設四個執行個體:

    gcloud compute instances reset www-1 \
        --zone us-central1-b
    
    gcloud compute instances reset www-2 \
        --zone us-central1-b
    
    gcloud compute instances reset www-3 \
        --zone europe-west1-b
    
    gcloud compute instances reset www-4 \
        --zone europe-west1-b
    

開啟防火牆

下一個工作是建立防火牆規則,以允許流量從負載平衡器傳入您的 VM 執行個體。這項規則允許來自負載平衡器和健康狀態檢查使用的Google Cloud 位址範圍的流量。防火牆規則使用您先前建立的 http-tag 標記;防火牆規則允許傳入指定通訊埠的流量到達具有該標記的執行個體。

控制台

  1. 在 Google Cloud 控制台中,前往「Firewall policies」(防火牆政策) 頁面:

    前往「FIREWALL POLICIES」(防火牆政策) 頁面

  2. 點按「建立防火牆規則」

  3. 將「Name」(名稱) 設定為 allow-lb-and-healthcheck

  4. 將「VPC network」(虛擬私有雲網路) 保留為 default

  5. 在「Targets」(目標) 下方,選取 [Specified target tags] (指定的目標標記)

  6. 將「Target tags」(目標標記) 設為 http-tag

  7. 將「Source filter」(來源篩選器) 保留設定為「IP ranges」(IP 範圍)

  8. 將「Source IP Ranges」(來源 IP 範圍) 設為 130.211.0.0/2235.191.0.0/16

  9. 將「Allowed protocols and ports」(允許的通訊協定和通訊埠) 設為 tcp:80

  10. 點選「建立」

    新的防火牆規則可能需要一些時間才會顯示在主控台中。

gcloud

  • 建立名為 allow-lb-and-healthcheck 的防火牆規則:

    gcloud compute firewall-rules create allow-lb-and-healthcheck \
        --source-ranges 130.211.0.0/22,35.191.0.0/16 \
        --target-tags http-tag \
         --allow tcp:80
    

Terraform

  1. 將 Terraform 負載平衡設定檔複製到目前目錄:

    cp lb/* .

  2. 套用 Terraform 設定:

    terraform apply

為負載平衡器分配外部 IP 位址

如果您要提供流量至網際網路,就必須為負載平衡器分配外部位址。您可以分配 IPv4 位址和/或 IPv6 位址。在本節中,您將預留適合新增至 DNS 的靜態 IPv4 和 IPv6 位址。

使用公開 IP 位址不會產生額外費用,因為 IP 位址是和負載平衡器搭配使用的。

控制台

  1. 前往 Google Cloud 控制台的「External IP addresses」(外部 IP 位址) 頁面:

    前往「External IP Addresses」(外部 IP 位址) 頁面

  2. 按一下 [Reserve static address] (預約靜態位址) 以預留 IPv4 位址。

  3. 將「Name」(名稱) 設定為 lb-ip-cr

  4. 將「Type」(類型) 保留設定為「Global」(全域)

  5. 按一下 [Reserve] (預約)

  6. 再按一下 [Reserve static address] (預約靜態位址) 以預留 IPv6 位址。

  7. 將「Name」(名稱) 設定為 lb-ipv6-cr

  8. 將「IP version」(IP 版本) 設為 IPv6

  9. 將「Type」(類型) 保留設定為「Global」(全域)

  10. 按一下 [Reserve] (預約)

gcloud

  1. 針對 IPv4 建立名為 lb-ip-cr 的靜態 IP 位址:

    gcloud compute addresses create lb-ip-cr \
        --ip-version=IPV4 \
        --global
    
  2. 針對 IPv6 建立名為 lb-ipv6-cr 的靜態 IP 位址:

    gcloud compute addresses create lb-ipv6-cr \
        --ip-version=IPV6 \
        --global
    

建立執行個體群組並新增執行個體

Google Cloud 負載平衡器需要執行個體群組做為流量的後端。為簡單起見,在本教學課程中,您將使用非代管執行個體群組。不過,您也可以使用代管執行個體群組來利用自動調度資源、自動修復、地區 (多區域) 部署和自動更新等功能。

在本節中,您將為要使用的每個區域各建立一個執行個體群組。

控制台

  1. 前往 Google Cloud 控制台的「Instance groups」(執行個體群組) 頁面:

    前往「INSTANCE GROUPS」(執行個體群組) 頁面

  2. 點選「建立執行個體群組」

  3. 在左側按一下 [New unmanaged instance group] (新增非代管的執行個體群組)

  4. 將「Name」(名稱) 設定為 us-resources-w

  5. 將「區域」設為 us-central1

  6. 將「Zone」(區域) 設為 us-central1-b

  7. 選取 [Network] (網路) (預設) 和 [Subnetwork] (子網路) (預設)。

  8. 在「VM instances」(VM 執行個體) 之下,執行以下操作:

    • 按一下 [Add an instance] (新增執行個體),然後選取 [www-1]
    • 再按一下 [Add an instance] (新增執行個體),然後選取 [www-2]
    • 按一下 [Create] (建立)
  9. 重複這個程序以建立第二個執行個體群組,但使用以下值:

    • Name (名稱):europe-resources-w
    • Zone (可用區):europe-west1-b
    • 執行個體www-3www-4
  10. 在「Instance groups」(執行個體群組) 頁面中,確認您有兩個執行個體群組,每個群組中都有兩個執行個體。

gcloud

  1. 建立 us-resources-w 執行個體群組:

    gcloud compute instance-groups unmanaged create us-resources-w \
        --zone us-central1-b
    
  2. 新增 www-1www-2 執行個體:

    gcloud compute instance-groups unmanaged add-instances us-resources-w \
        --instances www-1,www-2 \
        --zone us-central1-b
    
  3. 建立 europe-resources-w 執行個體群組:

    gcloud compute instance-groups unmanaged create europe-resources-w \
        --zone europe-west1-b
    
  4. 新增 www-3www-4 執行個體:

    gcloud compute instance-groups unmanaged add-instances europe-resources-w \
        --instances www-3,www-4 \
        --zone europe-west1-b
    

設定負載平衡服務

負載平衡器功能涉及多個連線的服務。在本節中,您將設定這些服務並為其建立連線。您將建立的服務如下:

  • 已命名的通訊埠,負載平衡器會使用這項服務來將流量導向您的執行個體群組。
  • 健康狀態檢查,這項服務會輪詢您的執行個體,並查看其健康狀態是否良好。負載平衡器只會將流量傳送至健康狀態良好的執行個體。
  • 後端服務,這項服務可監控執行個體的使用情況和健康狀態。後端服務知道執行個體群組中的執行個體是否可以接收流量。如果執行個體無法接收流量,負載平衡器會將流量重新導向,前提是其他地方的執行個體具有足夠的容量。後端會定義其包含的執行個體群組的容量 (CPU 使用率上限或每秒查詢次數上限)。
  • 網址對應,這項服務可剖析要求的網址,並可根據要求網址的主機和路徑,將要求轉送至特定的後端服務。在本教學課程中,由於您未使用內容式轉送功能,因此網址對應僅包含預設對應。
  • 目標 Proxy,這項服務會接收來自使用者的要求,並將其轉送至網址對應。
  • 兩個全域轉送規則,分別用於 IPv4 和 IPv6,可保存全域外部 IP 位址資源。全域轉送規則可將傳入要求轉送至目標 Proxy。

建立負載平衡器

在本節中,您將建立負載平衡器,並設定預設的後端服務來處理您的流量。您也將建立健康狀態檢查

控制台

開始設定

  1. 前往 Google Cloud 控制台的「Load balancing」(負載平衡)頁面。

    前往「Load balancing」(負載平衡) 頁面

  2. 點選「建立負載平衡器」
  3. 在「Type of load balancer」(負載平衡器類型) 部分,選取「Application Load Balancer (HTTP/HTTPS)」(應用程式負載平衡器 (HTTP/HTTPS)),然後點選「Next」(下一步)
  4. 在「公開或內部」部分,選取「公開 (外部)」,然後點選「下一步」
  5. 在「Global or single region deployment」(全域或單一區域部署) 部分,選取「Best for global workloads」(最適合全域工作負載),然後點選「Next」(下一步)
  6. 在「Load balancer generation」(負載平衡器代別) 部分,選取「Global external Application Load Balancer」(全域外部應用程式負載平衡器),然後點選「Next」(下一步)
  7. 按一下 [設定]

基本設定

  1. 將「負載平衡器名稱」設為 web-map

設定負載平衡器

  1. 在「Create global external Application Load Balancer」(建立全域外部應用程式負載平衡器) 頁面的左側面板中,按一下「Backend configuration」(後端設定)
  2. 在「Create or select backend services & backend buckets」(建立或選擇後端服務與後端值區) 清單中,依序選取 [Backend services] (後端服務) 和 [Create a backend service] (建立後端服務)。系統會隨即顯示「Create Backend Service」(建立後端服務) 對話方塊。
  3. 將「Name」(名稱) 設定為 web-map-backend-service
  4. 設定「Protocol」(通訊協定)。針對「HTTP protocol」(HTTP 通訊協定),將值保留設定為預設值。
  5. 針對「Backend type」(後端類型),選取 [Instance Groups] (執行個體群組)
  6. 在「Backends」(後端) 下方,將「Instance group」(執行個體群組) 設為 us-resources-w
  7. 點選「新增後端」
  8. 選取「europe-resources-w」執行個體群組,然後執行以下操作:
    • 針對負載平衡器和執行個體之間的 HTTP 流量,確保將「Port numbers」(通訊埠編號) 設為 80
    • 保留其餘欄位的預設值。
  9. 按一下 [Done] (完成)
  10. 在「Health check」(健康狀態檢查) 之下,選取 [Create a health check] (建立健康狀態檢查) 或 [Create another health check] (建立另一個健康狀態檢查)
  11. 設定下列健康狀態檢查參數:
    • Name (名稱):http-basic-check
    • Protocol (通訊協定):HTTP
    • Port (通訊埠):80
  12. 點選「建立」

gcloud

  1. 針對每個執行個體群組定義一個 HTTP 服務,並將通訊埠名稱對應至相關的通訊埠:

    gcloud compute instance-groups unmanaged set-named-ports us-resources-w \
        --named-ports http:80 \
        --zone us-central1-b
    
    gcloud compute instance-groups unmanaged set-named-ports europe-resources-w \
        --named-ports http:80 \
        --zone europe-west1-b
    
  2. 建立健康狀態檢查:

    gcloud compute health-checks create http http-basic-check \
        --port 80
    
  3. 建立後端服務:

    gcloud compute backend-services create web-map-backend-service \
        --protocol HTTP \
        --health-checks http-basic-check \
        --global
    

    請將 --protocol 標記設為 HTTP,因為您是使用 HTTP 連線至執行個體。針對健康狀態檢查,請使用您先前建立的 http-basic-check 健康狀態檢查。

  4. 將您的執行個體群組新增至後端服務,以做為後端使用:

    gcloud compute backend-services add-backend web-map-backend-service \
        --balancing-mode UTILIZATION \
        --max-utilization 0.8 \
        --capacity-scaler 1 \
        --instance-group us-resources-w \
        --instance-group-zone us-central1-b \
        --global
    
    gcloud compute backend-services add-backend web-map-backend-service \
        --balancing-mode UTILIZATION \
        --max-utilization 0.8 \
        --capacity-scaler 1 \
        --instance-group europe-resources-w \
        --instance-group-zone europe-west1-b \
        --global
    

設定主機與路徑規則

控制台

  • 在「Create global external Application Load Balancer」(建立全域外部應用程式負載平衡器) 頁面的左側面板中,按一下「Host and path rules」(主機與路徑規則)

    在本教學課程中,您無須設定任何主機或路徑規則,因為所有流量都會使用預設規則。因此,只要接受系統預先填入的預設值即可。

gcloud

  1. 建立預設網址對應,將所有傳入要求導向您的所有執行個體:

    gcloud compute url-maps create web-map \
        --default-service web-map-backend-service
    
  2. 建立一個目標 HTTP Proxy,以將要求轉送至網址對應:

    gcloud compute target-http-proxies create http-lb-proxy \
        --url-map web-map
    

設定前端並完成設定

控制台

  1. 在「建立全域外部應用程式負載平衡器」頁面的左側面板中,按一下「前端設定」
  2. 將「Name」(名稱) 設定為 http-cr-rule
  3. 將「Protocol」(通訊協定) 設為 HTTP
  4. 將「IP version」(IP 版本) 設為 IPv4
  5. 在「IP address」(IP 位址) 清單中,選取您先前建立的位址「lb-ip-cr」。
  6. 確認將「Port」(通訊埠) 設為 80
  7. 按一下 [完成]
  8. 按一下 [Add frontend IP and port] (新增前端 IP 和通訊埠)
  9. 將「Name」(名稱) 設定為 http-cr-ipv6-rule
  10. 在「通訊協定」部分選取「HTTP」
  11. 將「IP version」(IP 版本) 設為 IPv6
  12. 在「IP address」(IP 位址) 清單中,選取 lb-ipv6-cr (您先前建立的其他位址)。
  13. 確認將「Port」(通訊埠) 設為 80
  14. 點選「建立」
  15. 按一下 [完成]
  16. 在「建立全域外部應用程式負載平衡器」頁面的左側面板中,按一下「檢查並完成」
  17. 將您的設定與您打算建立的內容進行比較。
  18. 如果設定正確無誤,請按一下 [Create] (建立)

    接著您會回到「Load Balancing」(負載平衡) 頁面。建立完成的負載平衡器如果正在運作中,它的旁邊會顯示綠色勾號。

gcloud

  1. 取得您為負載平衡器建立的靜態 IP 位址。 請記下這些位址,因為下一個步驟會用到。

    gcloud compute addresses list
    
  2. 建立兩個全域轉送規則,以將傳入要求轉送至 Proxy,一個用於 IPv4,另一個則用於 IPv6。將指令中的「lb_ip_address」改成您建立的靜態 IPv4 位址,並將「lb_ipv6_address」改成您建立的 IPv6 位址。

    gcloud compute forwarding-rules create http-cr-rule \
        --address lb_ip_address \
        --global \
        --target-http-proxy http-lb-proxy \
        --ports 80
    
    gcloud compute forwarding-rules create http-cr-ipv6-rule \
        --address lb_ipv6_address \
        --global \
        --target-http-proxy http-lb-proxy \
       --ports 80
    

    建立全域轉送規則後,您的設定可能需要幾分鐘的時間才能傳播完畢。

測試設定

在本節中,您將傳送 HTTP 要求至您的執行個體,以驗證負載平衡設定是否正常運作。

控制台

  1. 前往 Google Cloud 控制台的「Load balancing」(負載平衡) 頁面:

    前往「Load balancing」(負載平衡) 頁面

  2. 選取名為 web-map 的負載平衡器,查看您剛剛建立的負載平衡器的相關詳細資料。

  3. 在頁面的「Backend」(後端) 區段中,查看「Healthy」(健康狀態良好) 資料欄,以確認執行個體的健康狀態是否良好。

    可能需要一些時間,畫面上才會顯示執行個體的健康狀態良好。

  4. 當螢幕顯示執行個體的健康狀態良好時,請從「Frontend」(前端) 區段複製「IP:Port」(IP:通訊埠) 的值,然後貼到瀏覽器中。

    在瀏覽器中,您會看到預設的內容頁面。

gcloud

  1. 取得您的全域轉送規則的 IP 位址,並記下這些位址,以供下一個步驟使用:

    gcloud compute forwarding-rules list
    
  2. 使用 curl 指令測試您服務的各個網址的回應。IPv4 和 IPv6 兩邊都要測試。針對 IPv6,您必須在位址兩邊加上 [],例如 http://[2001:DB8::]/

    curl http://ipv4-address
    
    curl -g -6 "http://[ipv6-address]/"
    

摘要

您的 VM 現在可以提供流量至網際網路,並且可以從網際網路擷取資料。您也可以透過 SSH 存取您的 VM,以執行管理工作。而且所有功能都能只透過私人 IP 位址完成;不暴露 IP 位址,其他使用者就無法從網際網路存取您的 IP,有助於避免遭受直接攻擊。

清除所用資源

如要避免系統向您的 Google Cloud 帳戶收取本教學課程中所用資源的相關費用,請刪除含有該項資源的專案,或者保留專案但刪除個別資源。

刪除專案

  1. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.

後續步驟