非代管執行個體群組是虛擬機器 (VM) 執行個體的集合,這些執行個體位於單一專案、區域、VPC 網路和子網路中。非代管執行個體群組適合用來將需要個別設定或調整的 VM 分組。您可以在負載平衡器的後端服務中使用非代管執行個體群組。
如果 VM 需要一致的設定,您可以根據執行個體範本使用代管執行個體群組 (MIG)。如有可能,請考慮使用代管執行個體群組,而非未代管的執行個體群組。如要建立代管執行個體群組,請參閱建立 MIG。
您可以將任一類型的執行個體群組新增為 Google Cloud負載平衡器的後端。詳情請參閱 Cloud Load Balancing 總覽。如要瞭解 Cloud Load Balancing 支援的每個執行個體群組 VM 數量,請參閱「每個執行個體群組的 VM」。
如要進一步瞭解執行個體群組,請參閱執行個體群組總覽。
事前準備
- 閱讀這篇文章,瞭解代管與非代管執行個體群組之間的差異。
-
如果尚未設定驗證,請先完成設定。
「驗證」是指驗證身分的程序,確認您有權存取 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
-
安裝 Google Cloud CLI。 安裝完成後,執行下列指令初始化 Google Cloud CLI:
gcloud init
如果您使用外部識別資訊提供者 (IdP),請先 使用聯合身分登入 gcloud CLI。
- Set a default region and zone.
REST
如要在本機開發環境中使用本頁的 REST API 範例,請使用您提供給 gcloud CLI 的憑證。
安裝 Google Cloud CLI。 安裝完成後,執行下列指令初始化 Google Cloud CLI:
gcloud init
如果您使用外部識別資訊提供者 (IdP),請先 使用聯合身分登入 gcloud CLI。
詳情請參閱 Google Cloud 驗證說明文件中的「Authenticate for using REST」。
使用非代管執行個體群組
建立群組
非代管執行個體群組與代管執行個體群組不同,是由不同的 VM 集合而成,且彼此間不會共用同一個的執行個體範本。因此您只能單純建立群組,再加入個別 VM 至群組中。
主控台
- 前往 Google Cloud 控制台的「Instance groups」(執行個體群組) 頁面。
- 點選「建立執行個體群組」。
- 按一下「新增非代管執行個體群組」。
- 輸入非代管執行個體群組的名稱。
- 在「Location」(位置) 下方,選取區域和可用區。
- 選取「網路」和「子網路」。
- 在「VM instances」(VM 執行個體) 底下,選取要新增至這個群組的 VM。
- 點選「建立」。
gcloud
如要建立新的非代管執行個體群組,請使用 instance-groups unmanaged create 指令:
gcloud compute instance-groups unmanaged create instance-group-name \ --zone=zone
更改下列內容:
instance-group-name
:要建立的群組名稱。zone
:要建立群組的區域。
REST
如要使用 REST 建立非代管執行個體群組,請使用 instanceGroups.insert 方法傳送
POST
要求:POST https://compute.googleapis.com/compute/v1/projects/project-id/zones/zone/instanceGroups { "name": "instance-group-name" }
更改下列內容:
instance-group-name
:要建立的群組名稱。zone
:要建立群組的區域。project-id
:含有群組的專案專案 ID。
使用 Google Cloud CLI 或 REST 建立新的非受管理執行個體群組時,系統不會自動將 VM 加入其中。您可以手動將 VM 新增至非代管執行個體群組。
列出並說明群組
擷取現有非代管執行個體群組的清單。
主控台
在 Google Cloud 控制台中,「Instance groups」(執行個體群組) 頁面會列出既有的非代管和代管執行個體群組。
gcloud
如要使用 Google Cloud CLI 列出專案中的所有非代管執行個體群組,請使用 instance-groups unmanaged list:
gcloud compute instance-groups unmanaged list
如要查看特定非代管執行個體群組的相關資訊,請使用 instance-groups unmanaged describe 指令:
gcloud compute instance-groups unmanaged describe instance-group-name \ --zone=zone
更改下列內容:
instance-group-name
:要說明的群組名稱。zone
:群組的可用區。
REST
如要使用 REST 列出執行個體群組,請使用 instanceGroups.list 方法傳送
GET
要求:GET https://compute.googleapis.com/compute/v1/projects/project-id/zones/zone/instanceGroups
如要透過 API 取得特定非代管執行個體群組的相關資訊,請使用 instanceGroups.get 方法傳送
GET
要求:GET https://compute.googleapis.com/compute/v1/projects/project-id/zones/zone/instanceGroups/instance-group-name
更改下列內容:
instance-group-name
:要說明的群組名稱。zone
:群組的可用區。project-id
:含有群組的專案專案 ID。
正在刪除群組
與代管執行個體群組不同的是,刪除非代管執行個體群組並不會刪除該群組內的任何 VM,刪除非代管執行個體群組只會移除 VM 的邏輯分組。
如果執行個體群組是Google Cloud 負載平衡器的後端,就無法刪除。您必須先從後端服務中移除後端。
主控台
- 前往 Google Cloud 控制台的「Instance groups」(執行個體群組) 頁面。
- 從清單中選取一或多個非代管執行個體群組。
- 按一下「刪除」即可移除群組。系統會移除群組,但不會刪除群組中的 VM。
gcloud
如要刪除非代管執行個體群組,請使用 instance-groups unmanaged delete 指令:
gcloud compute instance-groups unmanaged delete instance-group-name \ --zone=zone
更改下列內容:
instance-group-name
:要刪除的群組名稱。zone
:群組的可用區。
REST
如要使用 REST 刪除非代管執行個體群組,請使用 instanceGroups.delete 方法傳送
DELETE
要求:DELETE https://compute.googleapis.com/compute/v1/projects/project-id/zones/zone/instanceGroups/instance-group-name
更改下列內容:
instance-group-name
:要刪除的群組名稱。zone
:群組的可用區。project-id
:含有群組的專案專案 ID。
群組成員資格
新增 VM
建立非代管執行個體群組後,可以將 VM 新增到群組中。不過,只有在每個 VM 的第一個或唯一網路介面 (
nic0
) 附加至相同 VPC 網路時,您才能將 VM 分組。您最多可將 2,000 個 VM 新增至非代管執行個體群組。如要將超過 2,000 部 VM 新增至群組,請與支援團隊聯絡。主控台
- 前往 Google Cloud 控制台的「Instance groups」(執行個體群組) 頁面。
- 在清單的「Name」(名稱) 欄下方,按一下要新增虛擬機的執行個體群組名稱。系統隨即開啟一個頁面,頁面中包含執行個體群組的屬性及群組包含之 VM 的清單。
- 按一下「編輯」來修改這個非代管執行個體群組。
- 在「VM instances」(VM 執行個體) 下方,選取一或多個現有的 VM 以新增至群組。您只能選取與現有 VM 位於相同可用區、虛擬私有雲網路和子網路的 VM。
- 按一下「儲存」,將新的 VM 新增至群組。
gcloud
如要將執行個體新增至非代管執行個體群組,請使用 instance-groups unmanaged add-instances 指令:
gcloud compute instance-groups unmanaged add-instances instance-group-name \ --zone=zone \ --instances=list-of-VM-names
更改下列內容:
instance-group-name
:要新增 VM 的群組名稱。zone
:群組的可用區。list-of-VM-names
:以半形逗號分隔的清單,列出位於相同區域、虛擬私有雲網路和子網路中的虛擬機器。
REST
如要將 VM 新增至非代管執行個體群組,請使用 instanceGroups.addInstances 方法傳送
POST
要求:POST https://compute.googleapis.com/compute/v1/projects/project-id/zones/zone/instanceGroups/instance-group-name/addInstances { "instances": [ { "instance": "https://www.googleapis.com/compute/v1/projects/project-id/zones/zone/instances/instance-1-name", "instance": "https://www.googleapis.com/compute/v1/projects/project-id/zones/zone/instances/instance-2-name", .... } ] }
更改下列內容:
instance-group-name
:要新增 VM 的群組名稱。zone
:群組的可用區。project-id
:含有群組的專案專案 ID。instance-1-name
和instance-2-name
:這是要新增至群組的 VM 名稱,這些 VM 位於相同可用區、虛擬私有雲網路和子網路。
列出 VM
您可以擷取非代管執行個體群組中的成員 VM 清單。
主控台
- 前往 Google Cloud 控制台的「Instance groups」(執行個體群組) 頁面。
- 在清單的「Name」(名稱) 欄下方,按一下要檢視的非代管執行個體群組名稱。系統隨即開啟一個頁面,頁面中包含群組包含之執行個體的清單。
gcloud
如要列出非代管執行個體群組中的 VM,請使用 instance-groups unmanaged list-instances 指令:
gcloud compute instance-groups unmanaged list-instances instance-group-name \ --zone=zone
更改下列內容:
instance-group-name
:要列出成員的群組名稱。zone
:群組的可用區。
REST
如要列出非代管執行個體群組中的 VM,請使用 instanceGroups.listInstances 方法傳送
POST
要求:POST https://compute.googleapis.com/compute/v1/projects/project-id/zones/zone/instanceGroups/instance-group-name/listInstances
更改下列內容:
instance-group-name
:要列出成員的群組名稱。zone
:群組的可用區。project-id
:含有群組的專案專案 ID。
移除 VM
您可以從非代管執行個體群組中移除 VM。從執行個體群組中移除 VM 不會刪除 VM。
主控台
- 前往 Google Cloud 控制台的「Instance groups」(執行個體群組) 頁面。
- 確認您要移除哪些 VM,然後在清單的「Name」(名稱) 欄底下,按一下其所屬執行個體群組的名稱。系統隨即開啟一個頁面,頁面中包含執行個體群組的屬性及群組包含之 VM 的清單。
- 在清單中,選取一或多個要從群組中移除的 VM。
- 按一下 [Remove from group] (從群組中移除)。從非代管執行個體群組中移除的 VM 會繼續存在並執行,除非您停止或刪除這些 VM。
gcloud
如要從非代管執行個體群組中移除 VM,請使用 instance-groups unmanaged remove-instances 指令:
gcloud compute instance-groups unmanaged remove-instances instance-group-name \ --zone=zone \ --instances=list-of-VM-names
更改下列內容:
instance-group-name
:包含要移除執行個體的群組名稱。zone
:群組的可用區。list-of-VM-names
:以半形逗號分隔的 VM 清單,列出要從群組中移除的 VM。
REST
如要從非代管執行個體群組中移除 VM,請使用 instanceGroups.removeInstances 方法傳送
POST
要求。您可以同時移除多部 VM,如下所示:POST https://compute.googleapis.com/compute/v1/projects/project-id/zones/zone/instanceGroups/instance-group-name/removeInstances { "instances": [ { "instance": "https://www.googleapis.com/compute/v1/projects/project-id/zones/zone/instances/instance-1-name", "instance": "https://www.googleapis.com/compute/v1/projects/project-id/zones/zone/instances/instance-2-name", .... } ] }
更改下列內容:
instance-group-name
:包含要移除執行個體的群組名稱。zone
:群組的可用區。project-id
:含有群組的專案專案 ID。instance-1-name
和instance-2-name
:這些是要從群組取消關聯的 VM 名稱。
使用具名通訊埠
已命名的通訊埠為鍵/值組合,代表通訊埠的名稱和編號。連接埠名稱代表服務或應用程式的名稱。通訊埠編號代表服務或應用程式執行的通訊埠。
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
建立具名通訊埠
主控台
- 前往 Google Cloud 控制台的「Instance groups」(執行個體群組) 頁面。
- 在清單的「Name」(名稱) 欄下方,按一下要在其中指定已命名通訊埠的執行個體群組名稱。按一下名稱會開啟包含執行個體群組屬性的頁面。
- 按一下「編輯」來修改這個非代管執行個體群組。
- 在「Port mapping」(通訊埠對應) 專區中,按一下「Add port」(新增通訊埠),然後輸入通訊埠名稱和編號。視需要新增或移除其他具名連接埠。
- 按一下「儲存」,更新非代管執行個體群組的具名通訊埠清單。
gcloud
如要將已命名的通訊埠新增至非代管執行個體群組,請使用
instance-groups unmanaged set-named-ports
指令:gcloud compute instance-groups unmanaged set-named-ports instance-group-name \ --zone=zone \ --named-ports=port-name:port-number,...
如要列出非代管執行個體群組中的具名通訊埠,請使用
instance-groups unmanaged get-named-ports
指令:使用
set-named-ports
指令設定一或多個已命名通訊埠:gcloud compute instance-groups unmanaged set-named-ports INSTANCE_GROUP \ --named-ports PORT_NAME:PORT,PORT_NAME:PORT
例如:
gcloud compute instance-groups unmanaged set-named-ports INSTANCE_GROUP \ --named-ports name1:80,name2:8080
如需為每個服務名稱指派數個通訊埠,或是為每個服務指派數個名稱,請為每個名稱或通訊埠建立一個以上的項目。舉例來說,如果通訊埠
10
、20
和80
適用於同一個應用程式,您可以將name1
指派給所有這些通訊埠。此外,您也可以將兩個名稱name2
和name3
指派給通訊埠8080
。最後,您可以將通訊埠9000
指派到name4
,如以下範例所示:gcloud compute instance-groups unmanaged set-named-ports INSTANCE_GROUP \ --named-ports name1:10,name1:20,name1:80,\ name2:8080,name3:8080,\ name4:9000
如要使用 Google Cloud CLI 從非代管執行個體群組中移除所有已命名通訊埠,請使用 instance-groups unmanaged set-named-ports,並提供空白的已命名通訊埠清單:
gcloud compute instance-groups unmanaged set-named-ports instance-group-name \ --zone=zone \ --named-ports=""
在上述所有範例中,請視需要替換下列項目:
instance-group-name
:執行個體群組的名稱。zone
:群組的可用區。port-name
和port-number
: 通訊埠名稱和編號代表從您選擇的名稱到通訊埠編號的對應。您可以指定多個以半形逗號分隔的對應項,例如port-one:80,port-two:8080
是有效的具名通訊埠清單。
REST
說明執行個體群組,並記下 fingerprint。
如要新增具名通訊埠,請使用 instanceGroups.setNamedPorts 方法傳送
POST
要求。如要移除所有具名連接埠,請將namedPorts
設為空清單。POST https://compute.googleapis.com/compute/v1/projects/project-id/zones/zone/instanceGroups/instance-group-name/setNamedPorts { "fingerprint": "fingerprint", "namedPorts": [ { "name": "port-name", "port": port-number }, { "name": "port-name", "port": port-number }, .... ] }
更改下列內容:
instance-group-name
:執行個體群組的名稱。zone
:群組的可用區。project-id
:含有群組的專案專案 ID。port-name
和port-number
:通訊埠名稱和編號代表從您選擇的名稱到通訊埠編號的對應。fingerprint
:這是上一個步驟中的指紋。
後續步驟
除非另有註明,否則本頁面中的內容是採用創用 CC 姓名標示 4.0 授權,程式碼範例則為阿帕契 2.0 授權。詳情請參閱《Google Developers 網站政策》。Java 是 Oracle 和/或其關聯企業的註冊商標。
上次更新時間:2025-07-31 (世界標準時間)。
-