将实例组添加到负载平衡器

Google Cloud 负载平衡功能使用托管和非托管的实例组来处理流量。您可以将实例组添加到目标池或后端服务中,具体取决于您使用的负载平衡器类型。如需详细了解负载平衡功能,请参阅选择负载平衡器

如需详细了解实例组,请参阅实例组概览

准备工作

将托管实例组添加到后端服务

要创建以下类型的负载平衡服务,必须使用后端服务:

  • 外部 HTTP(S) 负载平衡
  • 内部 HTTP(S) 负载平衡
  • SSL 代理负载平衡
  • TCP 代理负载平衡
  • 内部 TCP/UDP 负载平衡

一个后端服务可以包含多个后端。实例组是一种后端。实例组中的实例会响应来自负载平衡器的流量,轮到的后端服务知道可以使用哪些实例、这些实例可以处理多少流量,以及它们当前正在处理多少流量。此外,后端服务会监控运行状况检查,并且不会向运行状况不佳的实例发送新连接。

可以按照以下说明将托管实例组添加到后端服务。

控制台

  1. 转到 Cloud Console 中的“负载平衡”页面。

    转到“负载平衡”页面

  2. 点击要向其中添加托管实例组的后端服务的名称。
  3. 点击修改
  4. 点击 +添加后端
  5. 选择要添加的实例组。
  6. 修改要更改的任何可选设置。
  7. 保存更改。

gcloud

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 命令

API

如需使用 REST API 添加后端服务,请参阅 后端服务

将托管实例组添加到目标池

目标池是包含一个或多个虚拟机实例的对象。目标池可用于网络负载平衡操作,由网络负载平衡器将用户请求转发到附加的目标池。属于该目标池的实例会处理这些请求并返回响应。 您可以将托管实例组添加到目标池,因此,当您在实例组中添加或移除实例时,目标池也会自动更新并应用这些更改。

目标池必须已经存在,这样您才能将托管实例组添加到目标池。如需了解详情,请参阅关于添加目标池的文档。

如需将现有托管实例组添加到目标池,请按照以下说明操作。完成这些操作后,属于托管实例组的所有虚拟机实例都会被添加到目标池。

控制台

  1. 转到 Cloud Console 中的“目标池”页面。

    转到“目标池”页面

  2. 点击您要向其中添加实例组的目标池。
  3. 点击修改按钮。
  4. 向下滚动到虚拟机实例部分,然后点击选择实例组
  5. 从下拉菜单中选择一个实例组。
  6. 保存更改。

gcloud

gcloud 命令行工具中执行 set-target-pools 命令:

gcloud compute instance-groups managed set-target-pools [INSTANCE_GROUP] \
        --target-pools [TARGET_POOL,..] [--zone ZONE]

其中:

  • [INSTANCE_GROUP] 是此实例组的名称。
  • [TARGET_POOL] 是要向其中添加此实例组的一个或多个目标池的名称。
  • [ZONE] 是此实例组所在的地区。

API

在 API 中,向以下 URI 发出 POST 请求:

POST https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/instanceGroupManagers/[INSTANCE_GROUP]/setTargetPools

其中:

  • [PROJECT_ID] 是此请求的项目 ID。
  • [ZONE] 是此实例组所在的地区。
  • [INSTANCE_GROUP] 是此实例组的名称。

请求正文应包含您要向其中添加此组的目标池的 URI 列表。例如:

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

将已命名端口分配给托管实例组

已命名端口是键值对,用于表示服务名称和运行该服务的端口号。负载平衡服务会使用已命名端口将流量引向个别实例上的特定端口。例如,如果您将已命名端口设置为 http:80,然后又将后端服务配置为将流量发送到名为 http 的端口,则负载平衡器会将流量转发到实例组中个别实例的端口 80

已命名端口是负载平衡使用的简单元数据。但是,已命名端口不控制 Compute Engine 中的网络或防火墙资源。

您可以为每个服务名称分配多个端口,并为每个端口分配多个服务名称。但请注意,指定的后端服务一次只能将流量转发到一个已命名端口。

控制台

  1. 在 Cloud Console 中,转到实例组页面。

    转到“实例组”页面

  2. 点击要在其中指定已命名端口的实例组的名称。此时将打开一个页面,其中包含实例组属性。
  3. 点击修改组以修改此托管实例组。
  4. 点击指定端口名称映射以展开指定端口选项。
  5. 点击添加一项,然后根据需要输入端口名称以及要与该名称关联的端口号。如果您需要更多条目,请再次点击添加一项以添加更多条目。
  6. 点击保存以保存更改,并将该已命名端口应用到托管实例组中的实例。

gcloud

使用 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

如需向每个服务名称分配多个端口或为每个服务分配多个名称,请为每个名称或端口创建多个条目。例如,将 name1 分配到端口 102080。然后,将 name2name3 分配到端口 8080。最后,向 name4 分配端口 9000

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

API

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]
  }
 ]
}

例如:

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

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

如需为每个服务名称分配多个端口,请为该服务名称创建多个条目。例如,您可以将端口 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]

后续步骤