將執行個體群組新增至負載平衡器


本頁說明如何將現有的受管理執行個體群組 (MIG) 新增至負載平衡器的後端服務或目標集區。

負載平衡器會分配使用者流量,有助於降低應用程式發生效能問題的風險。Cloud Load Balancing 會使用代管與非代管的執行個體群組來提供流量。視您使用的負載平衡器類型而定,您可以將執行個體群組新增至目標集區或後端服務。

如要瞭解如何使用 MIG 後端建立特定類型的負載平衡器,請參閱 Cloud Load Balancing 說明文件。

事前準備

  • 如果尚未設定,請先設定驗證機制。驗證是指驗證身分,以便存取 Google Cloud 服務和 API 的程序。如要在本機開發環境中執行程式碼或範例,您可以選取下列任一選項,向 Compute Engine 進行驗證:

    Select the tab for how you plan to use the samples on this page:

    Console

    When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.

    gcloud

    1. After installing the Google Cloud CLI, initialize it by running the following command:

      gcloud init

      If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

    2. Set a default region and zone.

    REST

    To use the REST API samples on this page in a local development environment, you use the credentials you provide to the gcloud CLI.

      After installing the Google Cloud CLI, initialize it by running the following command:

      gcloud init

      If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

    For more information, see Authenticate for using REST in the Google Cloud authentication documentation.

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

建立大多數類型的負載平衡器都需要後端服務。

後端服務可包含多個後端。執行個體群組是一種後端。執行個體群組中的執行個體會回應來自負載平衡器的流量,因此後端服務知道它可以使用哪些執行個體、執行個體能夠處理的流量,以及目前處理中的流量為多少。此外,後端服務會監控健康狀態檢查,且不會向健康狀態不良的執行個體傳送新連線。

請按照下列操作說明,將代管執行個體群組新增至後端服務。

主控台

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

    前往「負載平衡」頁面

  2. 按一下要新增代管執行個體群組的後端服務名稱。
  3. 按一下 [編輯]
  4. 按一下 [Add backend] (新增後端)
  5. 選取要新增的執行個體群組。
  6. 編輯要變更的選用設定。
  7. 儲存變更。

gcloud

使用 add-backend 指令

    gcloud compute backend-services add-backend BACKEND_SERVICE_NAME \
        --instance-group=INSTANCE_GROUP \
        [--instance-group-region=INSTANCE_GROUP_REGION | --instance-group-zone=INSTANCE_GROUP_ZONE] \
        --balancing-mode=BALANCING_MODE

負載平衡器的類型會影響平衡模式支援的功能。如需完整清單,請參閱「每個負載平衡器可用的平衡模式」。

視受管理的執行個體群組的平衡模式而定,可能需要其他參數。詳情請參閱 SDK 中的 add-backend 指令

REST

如要使用 REST API 新增後端服務,請參閱 backendServices

限制

使用地區性 MIG 的負載平衡功能不支援 RATEUTILIZATION 平衡模式中的 max-rate 目標容量。如要進一步瞭解各負載平衡器的使用指南,請參閱「平衡模式和目標容量設定」。

將代管執行個體群組新增至目標集區

目標集區是包含一或多個虛擬機器執行個體的物件。目標集區用於外部直通式網路負載平衡器,其中負載平衡器會將使用者的要求轉送至連結的目標集區。屬於該目標集區的執行個體會處理這些要求並傳回回應。您可以新增代管執行個體群組至目標集區,這樣一來,在執行個體群組新增或移除執行個體時,目標集區也會隨著相關變更自動更新。

目標集區必須先存在,您才能新增代管執行個體群組至目標集區。如需詳細資訊,請參閱新增目標集區的說明文件。

如要新增現有的代管執行個體群組至目標集區,請按照以下操作說明進行。這種做法會將屬於代管執行個體群組的所有 VM 執行個體全數新增至目標集區。

主控台

  1. 前往 Google Cloud 主控台的「Target Pools」(目標集區) 頁面。

    前往「Target Pools」(目標集區) 頁面

  2. 按一下您要新增執行個體群組的目標集區。
  3. 按一下 [Edit] (編輯) 按鈕。
  4. 向下捲動至「VM instances」(VM 執行個體) 部分,然後按一下 [Select instance groups] (選取執行個體群組)
  5. 從下拉式選單中選擇一個執行個體群組。
  6. 儲存變更。

gcloud

使用 set-target-pools 指令

gcloud compute instance-groups managed set-target-pools INSTANCE_GROUP \
        --target-pools TARGET_POOL,..

其中:

  • INSTANCE_GROUP 是執行個體群組的名稱。
  • TARGET_POOL,.. 是要新增這個執行個體群組的一或多個目標集區的名稱。

REST

針對區域 MIG可用區 MIG呼叫 setTargetPools 方法。例如:

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/regionInstanceGroupManagers/INSTANCE_GROUP/setTargetPools

其中:

  • PROJECT_ID 是這項要求的專案 ID。
  • REGION 是執行個體群組的所在地區。
  • INSTANCE_GROUP 是執行個體群組的名稱。

要求主體應包含要新增此群組之目標集區的 URI 清單。例如:

{
  "targetPools": [
    "regions/us-central1/targetPools/example-targetpool-1",
    "regions/us-central1/targetPools/example-targetpool-2"
  ]
}

將具名通訊埠指派至代管執行個體群組

已命名的通訊埠為鍵/值組合,代表通訊埠的名稱和編號。連接埠名稱代表服務或應用程式的名稱。通訊埠編號代表服務或應用程式執行的通訊埠。

Cloud Load Balancing 會使用已命名通訊埠。負載平衡器會以 Proxy 的角色,在後端服務設定中訂閱單一具名通訊埠。系統會根據各個執行個體群組後端的命名通訊埠對應,將通訊埠名稱轉換為通訊埠編號。

舉例來說,後端服務可以訂閱名為 http-port 的通訊埠。後端執行個體群組可以擁有名為 http-port:80 的通訊埠。後端執行個體群組會指示負載平衡器,透過通訊協定 (例如 TCP) 將流量傳送至群組中通訊埠 80 的 VM。通訊協定是在負載平衡器的後端服務中定義。

已命名通訊埠是Proxy 負載平衡器使用的簡單中繼資料,無法控制 Compute Engine 中的網路或防火牆資源。

已命名通訊埠的多個通訊埠編號

您可以為每個服務名稱指派多個通訊埠。您也可以為每個通訊埠指派多個服務名稱。

請注意下列幾點:

  • 系統會在所有同名通訊埠之間平衡流量。
  • 一個後端服務一次只能將流量轉送至一個已命名通訊埠。
  • 如果您為已命名的通訊埠使用多個通訊埠號碼,這些通訊埠都必須用於相同的應用程式。

    舉例來說,http:80,http:8080 可行,但 http:80,http:443 不可行,因為通訊埠 80 通常不支援 TLS。

您可以在執行個體群組中指派多個已命名通訊埠。舉例來說,假設後端服務訂閱名為 http-port 的通訊埠,且有兩個後端執行個體群組:

  • instance-group-a 已命名通訊埠為 http-port:80
  • instance-group-b 已命名通訊埠為 http-port:79

這項後端服務會將流量傳送至 instance-group-a 中的 VM 的通訊埠 80,以及 instance-group-b 中的 VM 的通訊埠 79。

當您將相同的執行個體群組新增至多個後端服務 (針對多個負載平衡器),且執行個體群組為每個負載平衡器提供不同的通訊埠時,請勿將所有通訊埠編號新增至單一已命名的通訊埠。請改為建立專屬的命名通訊埠,並將其對應至每個後端服務應提供的一組通訊埠。

舉例來說,假設您有三個應用程式,每個應用程式都有各自的負載平衡器。每個應用程式都有專屬的通訊埠編號:app1 為 81、app2 為 82、app3 為 83。假設所有三個後端服務都使用相同的執行個體群組,請將此執行個體群組的命名通訊埠指派為 [app1:81, app2:82, app3:83]

命名通訊埠和健康檢查

後端服務中具有多個通訊埠編號的已命名通訊埠,如要在外部應用程式負載平衡器或內部應用程式負載平衡器中運作,則健康狀態檢查必須使用 --use-serving-port 標記,而非特定通訊埠編號。Google Cloud 控制台不提供這個選項。如要設定 --use-serving-port,您必須使用 Google Cloud CLI 或 API。

舉例來說,假設您有一個應用程式,使用單一執行個體群組在同一後端服務上平衡三個不同通訊埠 (81、82、83) 的流量。您可以將通訊埠指派給這個執行個體群組,並命名為 [app:81, 82, 83]。在這種情況下,健康狀態檢查必須具有 --use-serving-port 標記。

詳情請參閱負載平衡健康狀態檢查說明文件

命名通訊埠和防火牆規則

具名通訊埠不會建立或修改 Google Cloud 防火牆規則。如要允許流量到達後端 VM,您仍必須建立必要的防火牆規則。

已命名的通訊埠和後端服務

除了執行個體群組設定之外,您還必須設定後端服務。舉例來說,假設您在名為 my-service-name 的執行個體群組上設定名為 8888 的已命名通訊埠:

gcloud compute instance-groups set-named-ports my-unmanaged-ig \
    --named-ports=my-service-name:8888

接著,您必須在後端服務設定中參照具名連接埠,並將後端服務的 --port-name 設為 my-service-name

gcloud compute backend-services update my-backend-service \
    --port-name=my-service-name

建立已命名的通訊埠

主控台

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

    前往「Instance groups」(執行個體群組) 頁面

  2. 按一下您要指定具名通訊埠之執行個體群組的名稱。按一下名稱會開啟包含執行個體群組屬性的頁面。
  3. 按一下「編輯」,修改這個代管執行個體群組。
  4. 在「Port mapping」(通訊埠對應) 專區中,按一下「Add port」(新增通訊埠),然後輸入所需的通訊埠名稱,以及要與該名稱建立關聯的通訊埠編號。如需更多項目,請再次按一下「新增連接埠」
  5. 按一下 [Save] (儲存) 即可儲存您所做的變更,並將具名通訊埠套用至代管執行個體群組的執行個體。

gcloud

針對代管執行個體群組,請使用 instance-groups managed set-named-ports 指令設定一或多個已命名通訊埠。如果是非代管群組,請使用 instance-groups set-named-ports 指令

gcloud compute instance-groups managed set-named-ports INSTANCE_GROUP \
      --named-ports PORT_NAME:PORT,PORT_NAME:PORT

例如:

gcloud compute instance-groups managed set-named-ports INSTANCE_GROUP \
      --named-ports name1:80,name2:8080

如需為每個服務名稱指派數個通訊埠,或是為每個服務指派數個名稱,請為每個名稱或通訊埠建立一個以上的項目。舉例來說,如果通訊埠 102080 是用於同一個應用程式,您可以將 name1 指派給所有這些通訊埠。此外,您可以將兩個名稱 name2name3 指派給通訊埠 8080。最後,您可以將通訊埠 9000 指派給 name4,如以下範例所示:

gcloud compute instance-groups managed set-named-ports INSTANCE_GROUP \
      --named-ports name1:10,name1:20,name1:80,\
                    name2:8080,name3:8080,\
                    name4:9000

使用 get-named-ports 指令,檢查代管執行個體群組的具名通訊埠指派作業:

gcloud compute instance-groups managed get-named-ports INSTANCE_GROUP
NAME  PORT
name1 10
name1 20
name1 80
name2 8080
name3 8080
name4 9000

REST

instanceGroupManagers API 不提供 setNamedPorts API 方法,而是改用 instanceGroups API 來執行此工作。

建構 instanceGroups API 的要求,並加入執行個體群組的名稱。透過取得特定群組的相關資訊,取得執行個體群組目前的 fingerprint 值。在要求主體中加入 fingerprint 和一或多個 namedPorts 值組合:

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instanceGroups/INSTANCE_GROUP/setNamedPorts

{
  "fingerprint": "42WmSpB8rSM=",
  "namedPorts": [
    {
       "name": "PORT_NAME",
       "port": PORT_NUMBER
    },
    {
       "name": "PORT_NAME",
       "port": PORT_NUMBER
    }
  ]
 }
 

舉例來說,如果通訊埠 102080 是用於同一個應用程式,您可以將 name1 指派給所有這些通訊埠。此外,您可以將兩個名稱 name2name3 指派給通訊埠 8080。最後,您可以將通訊埠 9000 指派給 name4,如以下範例所示:

POST https://compute.googleapis.com/compute/v1/projects/myproject/zones/us-central1-a/instanceGroups/example-group/setNamedPorts

{
   "fingerprint": "42WmSpB8rSM=",
   "namedPorts": [
      {
       "name": "name1",
       "port": 8080
      },
      {
       "name": "name2",
       "port": 9000
      }
   ]
}

如要指派數個通訊埠至每個服務名稱,請為該服務名稱建立數個項目。例如,您可以將通訊埠 102080 指派至 name1,同時將通訊埠 8080 指派至 name2

POST https://compute.googleapis.com/compute/v1/projects/myproject/zones/us-central1-a/instanceGroups/example-group/setNamedPorts

{
   "fingerprint": "42WmSpB8rSM=",
   "namedPorts": [
      {
       "name": "name1",
       "port": 10
      },
      {
       "name": "name1",
       "port": 20
      }
      {
       "name": "name1",
       "port": 80
      }
      {
       "name": "name2",
       "port": 8080
      }
      {
       "name": "name3",
       "port": 80
      }
      {
       "name": "name4",
       "port": 8080
      }
   ]
}

如要列出指派給代管執行個體群組的具名通訊埠,請建構指向該群組的 GET 要求:

GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instanceGroupManagers/INSTANCE_GROUP

後續步驟