在负载平衡中设置网络端点组

配置网络端点组并添加端点

本文档包含使用 gcloud 命令行工具配置网络端点组 (NEG) 和网络端点的说明。在配置 NEG 之前,请先阅读负载平衡中的网络端点组概念

创建网络端点组

控制台


若要创建网络端点组,请执行以下操作:

  1. 转到 Google Cloud Platform Console 中的“网络端点组”页面。
    转到“网络端点组”页面
  2. 点击创建网络端点组
  3. 输入网络端点组的名称
  4. 选择 VPC 网络位置
  5. 选择 VPC 网络
  6. 选择子网
  7. 选择地区
  8. 选择网络端点类型
  9. 输入网络端点默认端口
  10. 点击创建

gcloud


若要创建网络端点组,请使用以下 gcloud 命令:

gcloud compute network-endpoint-groups create [NEG_NAME] \
    --zone=[ZONE] \
    --network=[NETWORK] \
    [--subnet=[SUBNET]
    [--default-port=[DEFAULT_PORT]

此命令中的标志定义如下:

  • [NEG_NAME] 是新的网络端点组的名称。该名称在地区内必须是唯一的。
  • [ZONE] 是从中创建 NEG 的地区的名称。
  • [NETWORK] 是从中创建 NEG 的网络的名称。如果省略,GCP 将使用名为 default 的网络。
  • [SUBNET] 是所有网络端点所属子网的名称。 如果该网络是自动模式网络,则可以选择性地使用此标志。如果省略此标志,则系统会在您选定的地区所在的区域中自动创建的子网内创建 NEG。如果网络是自定义模式网络,或者如果您需要指定手动创建的子网,则此标志为必需。
  • [DEFAULT_PORT] 是与 NEG 关联的默认端口。此标志不是必需的。如果省略此标志,则必须使用 “IP 地址:端口”的格式指定所有端点。如果包含此标志,端口指定中可以省略“端口”部分,系统会使用默认端口。

例如:

gcloud compute network-endpoint-groups create my-lb-neg \
    --network=my-network \
    --subnet=my-subnet \
    --default-port=80  \
    --zone=asia-southeast1-a

将端点添加到网络端点组

控制台


若要向网络端点组添加端点,请执行以下操作:

  1. 转到 Google Cloud Platform Console 中的“网络端点组”页面。
    转到“网络端点组”页面
  2. 点击要向其添加端点的网络端点组的名称。您会看到网络端点组详情 (Network endpoint group detail) 页面。
  3. 此组中的网络端点部分,点击添加网络端点。您会看到添加网络端点页面。
  4. 选择一个虚拟机实例,以将其内部 IP 地址作为网络端点添加,然后点击添加。您会看到虚拟机的网络接口、地区和子网。
  5. 输入新网络端点的 IP 地址或范围
  6. 选择端口类型
    1. 如果您选择默认,端点会使用网络端点组中所有端点的默认端口。
    2. 如果您选择自定义,请输入要为端点使用的端口号。
  7. 要添加更多端点,请点击添加网络端点,并重复上面的步骤 5 和步骤 6。
  8. 添加好所需的全部端点后,请点击添加

gcloud


若要向网络端点组添加端点,请运行以下命令:

gcloud compute network-endpoint-groups update [NEG_NAME] \
    [--zone=[ZONE]] \
    --add-endpoint 'instance=[INSTANCE_NAME],[ip=[IP_ADDRESS]],[port=[PORT]]' \
    [--add-endpoint ...]

在上述命令中:

  • [NEG_NAME] 是 NEG 的名称。
  • [ZONE] 是从中创建 NEG 的地区的名称。
  • [INSTANCE_NAME] 是 IP 地址所属虚拟机实例的名称。
  • [IP_ADDRESS] 是要添加的网络端点的 IP 地址。
  • [PORT] 是要添加的网络端点的端口。如果在 NEG 中指定了默认端口,则此端口并非必需。

例如:

gcloud compute network-endpoint-groups update my-lb-neg \
    --zone=asia-southeast1-a
    --add-endpoint 'instance=my-vm1,ip=10.1.1.1,port=80' \

将网络端点组添加到后端服务

控制台


若要将网络端点组添加到后端服务,请执行以下操作:

  1. 转到 Google Cloud Platform Console 中的“负载平衡”页面。
    转到“负载平衡”页面
  2. 点击要修改其后端服务的负载平衡器的名称。
  3. 负载平衡器详情页面上,点击铅笔型的修改图标。
  4. 修改负载平衡器页面上,点击后端配置。
  5. 后端配置页面上,点击铅笔型的修改图标。
  6. 点击 +添加后端 (+Add backend)。
  7. 选择一个网络端点组,然后点击完成。
  8. 点击更新

gcloud


若要将一个 NEG 添加到后端服务,请运行以下命令:

gcloud compute backend-services add-backend [BACKEND_SERVICE] \
    [--network-endpoint-group=[NETWORK_ENDPOINT_GROUP]] \
    [--network-endpoint-group-zone=[ZONE]]

例如:

gcloud compute backend-services add-backend my-lb \
   --network-endpoint-group my-lb-neg \
   --network-endpoint-group-zone=asia-southeast1-a \
   --global \
   --balancing-mode=RATE \
   --max-rate-per-endpoint=5

从后端服务中移除网络端点组

控制台


  1. 转到 Google Cloud Platform Console 中的“负载平衡”页面。
    转到“负载平衡”页面
  2. 点击要修改其后端服务的负载平衡器的名称。
  3. 负载平衡器详情页面上,点击铅笔型的修改图标。
  4. 修改负载平衡器页面上,点击后端配置。
  5. 后端配置页面上,点击要从中移除 NEG 的后端服务的铅笔型修改图标。
  6. 在*“后端”部分,找到要移除的 NEG,然后点击该 NEG 对应的垃圾桶图标。
  7. 点击更新

gcloud


若要从后端服务中移除 NEG,请运行以下命令:

gcloud compute backend-services remove-backend [BACKEND_SERVICE] \
    --network-endpoint-group=NETWORK_ENDPOINT_GROUP \
    --network-endpoint-group-zone=NETWORK_ENDPOINT_GROUP_ZONE

例如:

gcloud compute backend-services remove-backend my-lb \
    --network-endpoint-group=my-lb-neg \
    --network-endpoint-group-zone=asia-southeast1-a

从网络端点组中移除端点

从负载平衡 NEG 中移除网络端点时,会根据后端服务中指定的排空参数触发连接排空。如果多个后端服务引用相同的 NEG,则系统会应用所有后端服务之间的最大排空间隔时间。

控制台


若要从网络端点组移除端点,请执行以下操作:

  1. 转到 Google Cloud Platform Console 中的“网络端点组”页面。
    转到“网络端点组”页面
  2. 点击要从中删除端点的网络端点组的名称。您会看到网络端点组详情 (Network endpoint group detail) 页面。
  3. 选择要删除的网络端点,然后点击删除端点

gcloud


若要从网络端点组移除端点,请运行以下命令:

gcloud compute network-endpoint-groups update NEG_NAME \
[--zone=ZONE] \
--remove-endpoint 'instance=INSTANCE_NAME,[ip=IP],[port=PORT]' \
--remove-endpoint ...

例如:

gcloud compute network-endpoint-groups update my-lb-neg \
     --remove-endpoint 'instance=my-vm1,ip=10.1.1.1,port=80' \
     --zone=asia-southeast1-a

列出网络端点组

控制台


要查看网络端点组的列表,请转到 Google Cloud Platform Console 中的“网络端点组”页面。
转到“网络端点组”页面

gcloud


若要列出网络端点组,请运行以下命令:

gcloud compute network-endpoint-groups list

描述特定的网络端点组

控制台


若要获取特定网络端点组的详情,请执行以下操作:

  1. 转到 Google Cloud Platform Console 中的“网络端点组”页面。
    转到“网络端点组”页面
  2. 点击要查看其详细信息的网络端点组的名称。

gcloud


若要获取特定网络端点组的详情,请运行以下命令:

gcloud compute network-endpoint-groups describe [NEG_NAME] \
    [--zone=ZONE]

在上面的命令中,[NEG_NAME] 是网络端点组的名称。[ZONE] 是可选的,是从中创建 NEG 的地区的名称。

例如,以下 gcloud 命令会列出有关网络端点组 my-lb-neg 的信息。

gcloud compute network-endpoint-groups describe my-lb-neg \
    --zone=asia-southeast1-a

此命令的输出如下:

    creationTimestamp: '2018-04-09T14:51:34.381-07:00'
    id: '5260475207627726473'
    kind: compute#networkEndpointGroup
    loadBalancer:
      defaultPort: 80
      network: https://www.googleapis.com/compute/beta/projects/[PROJECT_ID]/global/networks/default
      zone: https://www.googleapis.com/compute/beta/projects/[PROJECT_ID]/zones/asia-southeast1-a

移除网络端点组

如果网络端点组已连接到后端服务,则您无法将其删除。在删除 NEG 之前,请确保该 NEG 已与后端服务分离。

如果删除虚拟机,相应虚拟机上的所有网络端点都会立即从 NEG 中移除,系统会关闭所有连接。在删除后端服务之后再删除 NEG 时,也会在不执行连接排空的情况下移除该 NEG 中的所有端点。

控制台


若要从后端服务中移除网络端点组,请执行以下操作:

  1. 转到 Google Cloud Platform Console 中的“负载平衡”页面。
    转到“负载平衡”页面
  2. 点击要修改其后端服务的负载平衡器的名称。
  3. 负载平衡器详情页面上,点击铅笔型的修改图标。
  4. 修改负载平衡器页面上,点击后端配置。
  5. 后端配置页面上,点击要从中移除 NEG 的后端服务的铅笔型修改图标。
  6. 在*“后端”部分,找到要移除的 NEG,然后点击该 NEG 对应的垃圾桶图标。
  7. 点击更新

若要删除网络端点组,请执行以下操作:

  1. 转到 Google Cloud Platform Console 中的“网络端点组”页面。
    转到“网络端点组”页面
  2. 找到您要删除的网络端点组。
  3. 点击该行中的垃圾桶图标。

gcloud


若要从后端服务中移除网络端点组,请运行以下命令:

gcloud compute backend-services remove-backend [BACKEND_SERVICE] \
    [--network-endpoint-group=[NETWORK_ENDPOINT_GROUP]] \
    [--network-endpoint-group-zone=[ZONE]]

若要删除网络端点组,请运行以下命令:

gcloud compute network-endpoint-groups delete [NEG_NAME] \
    --zone=[ZONE]

例如:

gcloud compute backend-services remove-backend my-neg-backend \
    --network-endpoint-group=my-lb-neg \
    --network-endpoint-group-zone=southeast1-a
gcloud compute network-endpoint-groups delete my-lb-neg \
    --zone=asia-southeast1-a

列出网络端点组中的端点

控制台


若要查看网络端点组中的端点列表,请执行以下操作:

  1. 转到 Google Cloud Platform Console 中的“网络端点组”页面。
    转到“网络端点组”页面
  2. 点击要从中删除端点的网络端点组的名称。您会看到网络端点组详情 (Network endpoint group detail) 页面,其中列出了该端点组中的端点。

gcloud


若要列出网络端点组中的所有网络端点,请运行以下命令:

gcloud compute network-endpoint-groups list-network-endpoints NEG_NAME \
    [--zone=ZONE]

检查网络端点的运行状况

要为具有网络端点组后端的后端服务执行运行状况检查,该检查的端口指定方式必须为以下两种之一:

  • 固定(编号)端口 (--port)
  • 配置为使用网络端点的服务端口 (--use-serving-port)

以下示例创建了一个运行状况检查,它通过 --use-serving-port 标志使用网络端点的服务端口。请注意,--use-serving-port 标志是通过 gcloud compute health-checks create 实现的(而非通过 gcloud compute health-checks update 实现)。

如果一个后端是网络端点组,则您不能为其使用旧版运行状况检查。如需了解详情,请参阅运行状况检查概念

网络端点组负载平衡示例

以下示例会创建负载平衡网络端点组,将三个网络端点附加到 NEG,并列出端点。假设您已经有 3 个虚拟机拥有在这些端口上运行的服务。

  1. 创建子网、别名 IP 地址和两个虚拟机。

    gcloud compute networks subnets create subnet-a \
        --network network-a \
        --range 10.128.0.0/16 \
        --secondary-range container-range=192.168.0.0/16
    
    gcloud compute instances create vm1 --zone asia-southeast1-a \
        --network-interface \
        "subnet=subnet-a,aliases=r1:192.168.0.0/24;secondaryrange1:192.168.1.0/24"
    
    gcloud compute instances create vm2 --zone asia-southeast1-a \
        --network-interface \
        "subnet=subnet-a,aliases=r1:192.168.2.0/24"
    
  2. 创建 NEG。请注意,您可以有多个位于同一个地区的 NEG。

    gcloud compute network-endpoint-groups create neg1 \
         --zone=asia-southeast1-a \
         --network=network-a --subnet=subnet-a \
         --default-port=80
    
        Created [https://www.googleapis.com/compute/beta/projects/project/zones/asia-southeast1-a/networkEndpointGroups/my-lb-neg].
        NAME       LOCATION       TYPE            ENDPOINT_TYPE   DEFAULT_PORT ENDPOINTS
        neg1  asia-southeast1-a  LOAD_BALANCING  80           0
    
  3. 将端点添加到 NEG。

    gcloud compute network-endpoint-groups update neg1 \
       --zone=asia-southeast1-a
       --add-endpoint ‘instance=vm1,ip=192.168.0.1’ \
       --add-endpoint ‘instance=vm1,ip=192.168.0.1,port=8080’ \
       --add-endpoint ‘instance=vm1,ip=192.168.1.2,port=8088’ \
       --add-endpoint ‘instance=vm1,ip=192.168.1.2,port=8080’ \
       --add-endpoint ‘instance=vm2,ip=192.168.2.1,port=8088’ \
       --add-endpoint ‘instance=vm2,ip=192.168.2.2,port=8080’
    
  4. 创建运行状况检查。

    gcloud compute health-checks create http healthcheck1 --use-serving-port
    
  5. 创建后端服务。

    gcloud compute backend-services create backendservice1 --global --health-checks healthcheck1
    
  6. 将后端添加到后端服务。

    gcloud compute backend-services add-backend backendService1 --global \
       --network-endpoint-group=neg1 \
       --network-endpoint-group-zone=asia-southeast1-a \
       --balancing-mode=RATE --max-rate-per-endpoint=5
    
  7. 创建网址映射。

    gcloud compute url-maps create urlmap1 --default-service backendservice1
    
  8. 创建目标代理。

    gcloud compute target-http-proxies create httpproxy1 --url-map urlmap1
    
  9. 创建转发规则。

    gcloud compute forwarding-rules create forwardingrule1 \
        --ip-protocol http --ports=80 --global --target-http-proxy httpproxy1
    
  10. 创建防火墙规则。

    gcloud compute firewall-rules create allow-load-balancer \
        --network network-a \
        --source-ranges 130.211.0.0/22,35.191.0.0/16 \
        --target-tags lb \
        --allow tcp