使用通訊協定轉送

Compute Engine 支援通訊協定轉送,可讓您建立能將封包傳送至未經 NAT 之目標執行個體轉送規則物件。每個目標執行個體包含單一虛擬機器 (VM) 執行個體,該執行個體會接收和處理來自相應轉送規則的流量。

通訊協定轉送可在多種情況下使用,其中包括:

  • 依 IP 進行虛擬託管

    您可以將多個轉送規則設定為指向單一目標執行個體,即可透過一個 VM 執行個體使用多個外部 IP 位址。當您想從一個 VM 執行個體但不同的外部 IP 位址提供資料時,即可使用此方法。在設定 SSL 虛擬託管時,這項功能尤其實用。

  • 虛擬私人網路 (VPN)

    請參閱:

  • 私人 VIP

    您可以將私人地區轉送規則的通訊協定轉送私人 (RFC 1918) 位址搭配使用。使用此功能即可設定私人轉送規則,讓這些規則將 TCP 或 UDP 流量傳送到同一地區的目標執行個體。您也可以將私人地區轉送規則從使用目標執行個體切換至後端服務,反之亦然。

  • 負載平衡

    如要瞭解如何將流量轉送至負載平衡器,請參閱轉送規則概念一文。

針對依 IP 進行虛擬託管、虛擬私人網路 (VPN) 以及負載平衡,Compute Engine 支援以下通訊協定的通訊協定轉送:

如果是私人 VIP,則只支援 TCP 和 UDP:

通訊協定轉送的費率與負載平衡服務相同。詳情請參閱定價頁面。

快速入門導覽課程

本快速入門導覽課程假定您已熟悉 bash

如要建立將流量傳送到單一執行個體的轉送規則,您必須:

  1. 建立目標執行個體

    您的目標執行個體是一個 VM 執行個體,但是這個執行個體可以在建立目標執行個體時即存在,也可以之後建立。

  2. 建立轉送規則

    在建立轉送規則前,您的目標執行個體就必須已經存在。如果傳入封包與 IP、通訊協定,以及轉送規則所服務的通訊埠範圍 (如果適用) 相符,則轉送規則會將該流量導向至目標執行個體。

本快速入門導覽課程的其餘部分透過以下方式端對端全程示範上述步驟:

  1. 在 VM 執行個體上設定 Apache 伺服器。
  2. 建立目標執行個體和相應的轉送規則。
  3. 將流量傳送至單一目標執行個體。

完成本快速入門導覽課程後,您便可瞭解如何將多個轉送規則的通訊協定轉送設定至單一目標執行個體。

設定 VM 執行個體並安裝 Apache

如何建立已安裝 Apache 的單一 VM 執行個體:

  1. 為新的執行個體建立一些開機指令碼。

    視您的作業系統而定,開機指令碼的內容可能會有所不同。

    • 如果您打算在執行個體上使用 Debian 映像檔,請執行以下指令:

      me@local:~$ echo "sudo apt-get update && sudo apt-get -y install apache2 && mkdir -p /var/www1 &&
      mkdir -p /var/www2 && mkdir -p /var/www3 && hostname > /var/www/html/index.html &&
      echo w1 > /var/www1/index.html && echo w2 > /var/www2/index.html && echo w3 > /var/www3/index.html" > 
      $HOME/pf_startup.sh

    • 如果您打算在執行個體上使用 CentOS 映像檔,請執行以下指令:

      me@local:~$ echo "sudo yum -y install httpd && sudo service httpd restart && mkdir -p /var/www1 &&
      mkdir -p /var/www2 && mkdir /var/www3 && hostname > /var/www/html/index.html &&
      echo w1 > /var/www1/index.html && echo w2 > /var/www2/index.html && echo w3 > /var/www3/index.html" > 
      $HOME/pf_startup.sh

  2. 為您未來的 VM 建立標記,以便之後為 VM 套用防火牆:

    me@local:~$ TAG="www-tag"
    
  3. 建立 VM 執行個體來處理轉送規則的流量:

    gcloud compute instances create pf-instance \
        --image-project debian-cloud --image-family debian-9 --tags $TAG \
        --metadata-from-file startup-script=$HOME/pf_startup.sh
    
  4. 建立防火牆規則以允許外部流量傳送至這個 VM 執行個體:

    gcloud compute firewall-rules create www-firewall --target-tags $TAG --allow tcp
    

您已成功設定 VM 執行個體,現在可以開始進行通訊協定轉送功能的設定。

建立目標執行個體和相應的轉送規則

  1. 建立目標執行個體。

    目標執行個體包含一個 VM 執行個體,該執行個體會接收和處理來自轉送規則的流量。目標執行個體不具有 NAT 政策,因此您可以透過 IPsec 通訊協定,直接使用這些執行個體來設定您的 VPN 連線。

    您必須先建立目標執行個體,然後才能建立轉送規則物件,這是因為轉送規則必須參照現有的目標資源。您無法建立將流量導向至不存在之目標資源的轉送規則。在此範例中,建立如下方的目標執行個體:

    gcloud compute target-instances create pf-target-instance --instance pf-instance
    
  2. 建立轉送規則物件。

    轉送規則物件會將與 IP 通訊協定和通訊埠相符的流量導向至指定的目標執行個體。詳情請參閱轉送規則說明文件。

    在此範例中,以下指令將建立三個轉送規則,每個都具有臨時 IP 位址,會將 TCP 流量轉送至目標執行個體。如果您有一些靜態外部 IP 位址,也可透過指定 --address IP-ADDRESS 旗標來搭配這些轉送規則使用外部 IP 位址。

    gcloud compute forwarding-rules create pf-rule1 --ip-protocol TCP \
        --ports 80 --target-instance pf-target-instance
    
    gcloud compute forwarding-rules create pf-rule2 --ip-protocol TCP \
        --ports 80 --target-instance pf-target-instance
    
    gcloud compute forwarding-rules create pf-rule3 --ip-protocol TCP \
        --ports 80 --target-instance pf-target-instance
    

您可以開始傳送流量至目標執行個體。

傳送流量至執行個體

  1. 取得新轉送規則的外部 IP 位址。

    執行 gcloud compute forwarding-rules list 以取得轉送規則的外部 IP 位址。舉例來說,下表列出了為先前建立的轉送規則所分配的臨時 IP 位址。

    如果您選擇使用保留的 IP 位址,則會在此處列出這些位址,而不會列出臨時 IP 位址。

    gcloud compute forwarding-rules list
    
    NAME     REGION      IP_ADDRESS     IP_PROTOCOL TARGET
    pf-rule1 us-central1 [ADDRESS_1]    TCP         us-central1-a/targetInstances/pf-target-instance
    pf-rule2 us-central1 [ADDRESS_2]    TCP         us-central1-a/targetInstances/pf-target-instance
    pf-rule3 us-central1 [ADDRESS_3]    TCP         us-central1-a/targetInstances/pf-target-instance

    請記下這些 IP 位址,以供下一個步驟使用。

  2. 設定 VM 執行個體的 Apache 虛擬主機,以根據到達網頁網址提供不同的資訊。

    首先,請連線至您的執行個體:

    gcloud compute ssh pf-instance
    

    接著,編輯 /etc/apache2/sites-enabled/000-default.conf 檔案並加入下列幾行內容。如果該行使用 VirtualHost cd .. 指令,請使用執行上個步驟時所看到的 IP 位址。

    <VirtualHost [ADDRESS_1]>
     DocumentRoot /var/www1
     <Directory /var/www1>
      Require all granted
     </Directory>
    </VirtualHost>
    <VirtualHost [ADDRESS_2]>
     DocumentRoot /var/www2
     <Directory /var/www2>
      Require all granted
     </Directory>
    </VirtualHost>
    <VirtualHost [ADDRESS_3]>
     DocumentRoot /var/www3
     <Directory /var/www3>
      Require all granted
     </Directory>
    </VirtualHost>
    

    最後,重新啟動 Apache:

    user@myinst:~$ sudo /etc/init.d/apache2 restart
    
  3. 試著傳送流量送至執行個體。

    在本機電腦上,向您所建立之轉送規則處理的 IP 位址發出要求。

    使用 curl 將流量傳送至此 IP 位址。回應會根據 IP 位址傳回 w1w2w3

    me@local:~$curl [ADDRESS_1]
    w1
    
    me@local:~$ curl [ADDRESS_2]
    w2
    
    me@local:~$ curl [ADDRESS_3]
    w3
    

    您的通訊協定轉送設定即告完成。

轉送規則

轉送規則搭配目標集區和目標執行個體一起使用,以支持負載平衡和通訊協定轉送功能。如要使用負載平衡和通訊協定轉送功能,您必須建立將流量導向至目標集區 (為了負載平衡) 或是目標執行個體 (為了通訊協定轉送) 的轉送規則。如果沒有轉送規則,就無法使用這些功能。

轉送規則資源位於轉送規則集合中。每個轉送規則都會將特定 IP 位址、通訊協議以及通訊埠範圍 (選用) 配對至單一目標集區或是目標執行個體。當流量傳送到由轉送規則處理的外部 IP 位址時,轉送規則會將該流量導向相應的目標集區或目標執行個體。您最多可為每個專案建立 50 個轉送規則。

以下是轉送規則的一些注意事項:

  • 轉送規則的名稱在這個專案中不得重複,長度須介於 1 - 63 個字元,並且與規則運算式相符:[a-z]([-a-z0-9]*[a-z0-9])?,這表示第一個字元必須是小寫字母,後續所有字元則必須是連字號、小寫字母或數字,但最後一個字元不得為連字號。

  • 如果您沒有指定轉送規則通訊協定,系統就會使用預設的 TCP。另請注意,某些通訊協定只能與目標集區或目標執行個體一起使用:

    • 如果您使用 ESPAHSCTPICMP,則必須指定目標執行個體。使用這些通訊協定時無法指定目標集區。
    • 如果您使用的是 TCPUDP,則可以指定目標集區目標執行個體
  • 只能針對 TCPUDP 以及 SCTP 通訊協定指定通訊埠範圍。

新增轉送規則

如要新增新的轉送規則,您可以使用 gcloud compute forwarding-rules create 指令或建立目標為轉送規則集合的 HTTP POST 要求。以下範例顯示如何使用 gcloud 指令列工具建立目標為目標執行個體的轉送規則:

gcloud compute forwarding-rules create [FORWARDING_RULE] \
    --load-balancing-scheme internal | external \
    --region [REGION] \
    [--target-instance-zone [ZONE]] \
    --ip-protocol TCP --ports 80 \
    --target-instance [TARGET_INSTANCE]

如果省略 --target-instance-zone 旗標,且未使用 gcloud config set compute/zone 設定 compute/zone 屬性,gcloud 指令列工具會提示您選擇區域。詳情請參閱設定預設區域或地區的相關說明。

如果負載平衡配置是內部的,gcloud compute forwarding-rules create 指令支援設定目標執行個體當做目標。

下例顯示如何建立目標為目標集區的轉送規則:

gcloud compute forwarding-rules create [FORWARDING_RULE] \
    --target-pool [TARGET_POOL] \
    [--region [REGION]]

如果省略 --region 旗標,且未使用 gcloud config set compute/region 設定 compute/region 屬性,gcloud 指令列工具會提示您選擇地區。詳情請參閱設定預設區域或地區的相關說明。

如需可用旗標的完整說明,請參閱轉送規則 create 指令或輸入 gcloud compute forwarding-rules create --help

如使用 API 新增轉送規則,請對以下 URI 發出 HTTP POST 要求:

https://compute.googleapis.com/compute/v1/projects/myproject/regions/us-central1/forwardingRules

要求內容應包含以下欄位:

{
 "name": "example-forwarding-rule",
 "IPAddress": "`10.1.1.1",
 "IPProtocol": "TCP",
 "portRange": "80",
 "target": "zones/us-central1-f/targetInstances/example-target-instances"
}

如要瞭解如何列出轉送規則、取得特定轉送規則的相關資訊,以及如何刪除轉送規則,請參閱 gcloud SDK 和 API 參考資料頁面:

目標執行個體

目標執行個體資源包含一個 VM 執行個體,該執行個體會處理來自一或多個轉送規則的流量,非常適合轉送應由單一來源 (例如ESPAH) 代管的特定類型通訊協定流量,但您也可以將目標執行個體用於 TCPUDP 通訊協定。目標執行個體未套用 NAT 政策,因此可以將它們用於需要未經 NAT 之 IPsec 流量的虛擬私人網路 (VPN) 流量。

目標執行個體必須位於與轉送規則相同的地區,也必須位於與 VM 執行個體相同的區域。舉例來說,如果您的轉送規則位於 us-central1,而您要使用的執行個體位在 us-central1-a,則目標執行個體必須位於 us-central1-a。如果執行個體是位於 us-central1-b,則目標執行個體也必須位於 us-central1-b

新增目標執行個體

如要新增新的目標執行個體,您可以使用 gcloud compute target-instances 指令或建立目標為 targetInstances 集合的 HTTP POST 要求。您無法使用 GCP Console 建立目標執行個體資源。以下範例顯示如何使用 gcloud 指令列工具建立目標執行個體:

gcloud compute target-instances create [TARGET_INSTANCE] --instance INSTANCE

如果省略 --zone 旗標,且未使用 gcloud config set compute/zone 設定 compute/zone 屬性,gcloud 指令列工具會提示您選擇區域。詳情請參閱設定預設區域或地區的相關說明。

如需可用旗標的完整說明,請參閱 create 指令或輸入 gcloud compute target-instances create --help

在 API 中,對下列 URI 發出 HTTP POST 要求:

https://compute.googleapis.com/compute/v1/projects/myproject/zones/us-central1-f/targetInstances

並包含以下要求內容:

body = {
  "name": "example-target-instance",
  "instance": "zones/us-central1-f/instances/example-instance"
}

如要瞭解如何列出目標執行個體、取得特定目標執行個體的相關資訊,以及如何刪除目標執行個體,請參閱 gcloud SDK 和 API 參考資料頁面:

私人 VIP 的通訊協定轉送

通訊協定轉送可與具有私人 (RFC 1918) 位址的私人地區轉送規則搭配使用。使用此功能即可設定私人轉送規則,讓這些規則將 TCP 或 UDP 流量傳送到同一地區的目標執行個體。您也可以輕鬆將私人地區轉送規則從使用目標執行個體切換至後端服務,反之亦然。

目標執行個體包含一個後端執行個體,用於處理來自一或多個轉送規則的流量。您只能設定一個私人轉送規則來指向每個目標執行個體。

具有目標執行個體的私人轉送規則 (按一下可放大)。
具有目標執行個體的私人轉送規則 (按一下可放大)

請在以下情況使用通訊協定轉送和私人轉送規則。

  • 您希望為您的服務部署單一後端執行個體,並且希望健康狀態檢查和其他方面都是您自己管理。
  • 您希望保留轉送規則私人 IP 位址,並且希望更改轉送規則指向的目標執行個體。
  • 在不變更私人轉送規則 IP 位址的情況下,您希望能輕鬆地從單一執行個體 (目標執行個體) 移至多個後端執行個體 (後端服務),藉此保持部署項目穩定。

目標執行個體和後端服務之間的轉換

您可以更新私人轉送規則,從將流量導向至具有單一 VM 執行個體的目標執行個體,更新至將流量導向至後端服務,反之亦然。透過這種方式更新私人轉送規則時,系統將保留轉送規則 IP 地址。由於該變更會啟用或停用後端服務執行個體的負載平衡功能,現有連線在此轉換期間可能會中斷。

從後端服務轉換至目標執行個體 (按一下可放大)。
從後端服務轉換至目標執行個體 (按一下可放大)

您只能使用私人轉送規則在目標執行個體和後端服務之間進行轉換。您無法透過使用外部轉送規則的通訊協定轉送進行此操作。

更新私人轉送規則的目標

如果您的轉送規則是私人轉送規則,您可以從指向目標執行個體更改為指向後端服務:

    gcloud compute forwarding-rules set-target my-forwarding-rule
        --backend-service my-backend-service

您可以接著轉換回目標執行個體:

    gcloud compute forwarding-rules set-target my-forwarding-rule
        --target-instance my-target-instance

私人轉送規則適用的通訊協定轉送的疑難排解

地區性限制

私人轉送規則的通訊協定轉送功能是地區性產品,所有用戶端和目標執行個體 VM 都必須位於相同地區。

錯誤訊息:「An internal target instance can only be the target of one forwarding rule」(內部目標執行個體只能是一個轉送規則的目標)

如果您看到錯誤訊息「An internal target instance can only be the target of one forwarding rule」,可能是因為您嘗試將兩個轉送規則指向同一個目標執行個體。您無法將多個轉送規則指向同一個目標執行個體。

限制

  • 當您搭配私人轉送規則使用目標執行個體時,僅支援 TCP 和 UDP 通訊協定。

限制

  • 在每個網路中,您可以設定 100 個指向目標執行個體的私人轉送規則。

  • 每個私人轉送規則可以有 5 個通訊埠。

本頁內容對您是否有任何幫助?請提供意見:

傳送您對下列選項的寶貴意見...

這個網頁
Compute Engine 說明文件