使用后端服务设置网络负载均衡器

使用集合让一切井井有条 根据您的偏好保存内容并对其进行分类。

本指南介绍如何使用区域后端服务创建基本网络负载均衡部署。此示例会创建一个支持 TCP 或 UDP 流量的网络负载均衡器。如果您要创建对 TCP、UDP、ESP、GRE、ICMP 和 ICMPv6 流量(不仅仅是 TCP 或 UDP)进行负载均衡的网络负载均衡器,请参阅为多种 IP 协议设置网络负载均衡器

在此示例中,我们将使用负载均衡器在 us-central1 区域的两个可用区代管式实例组中的后端虚拟机之间分配 TCP 流量。同样有效的方法是为 us-central1 区域使用单个区域代管式实例组。

使用可用区实例组的网络负载均衡器
使用可用区代管式实例组执行网络负载均衡

此场景会在运行状况良好的实例之间分配 TCP 流量。为了支持此示例,TCP 健康检查配置为确保流量仅发送到健康状况良好的实例。请注意,TCP 健康检查仅支持基于后端服务的负载均衡器。基于目标池的负载均衡器只能使用旧版 HTTP 健康检查。

虽然此示例是对 TCP 流量进行负载均衡,但您可以使用网络负载均衡对 UDP、SSL 和 HTTP(S) 流量进行负载均衡。

网络负载均衡器是区域级负载均衡器。所有负载均衡器组件(后端虚拟机、后端服务和转发规则)必须位于同一区域。

准备工作

安装 Google Cloud CLI。如需全面了解此工具,请参阅 gcloud CLI 概览。您可以在 API 和 gcloud 参考指南中找到与负载均衡相关的命令。

如果您之前未运行过 Google Cloud CLI,请先运行 gcloud init 进行身份验证。

本指南假定您熟悉 bash

设置网络和子网

本页面中的示例使用名为 lb-network自定义模式 VPC 网络。如果您只想处理 IPv4 流量,则可以使用自动模式网络。但是,IPv6 流量需要自定义模式子网

IPv6 流量还需要双栈子网(stack-type 设置为 IPv4_IPv6)。在自定义模式 VPC 网络上创建双栈子网时,您可以为子网选择 IPv6 访问类型。在此示例中,我们将子网的 ipv6-access-type 参数设置为 EXTERNAL。这意味着此子网上的新虚拟机可以分配外部 IPv4 地址和外部 IPv6 地址。

用于此示例的后端实例组和负载均衡器组件位于以下区域和子网中:

  • 区域:us-central1
  • 子网:lb-subnet,其主要 IPv4 地址范围为 10.1.2.0/24。虽然您可以选择在子网上配置哪个 IPv4 地址范围,但系统会自动分配 IPv6 地址范围。Google 提供固定大小 (/64) 的 IPv6 CIDR 地址块。

如需创建示例网络和子网,请按照以下步骤操作。

控制台

如需同时支持 IPv4 和 IPv6 流量,请按照以下步骤操作:

  1. 在 Google Cloud Console 中,转到 VPC 网络页面。
    转到 VPC 网络
  2. 点击创建 VPC 网络
  3. 输入 lb-network 作为名称
  4. 子网部分中执行以下操作:
    • 子网创建模式设置为自定义
    • 新子网部分中,配置以下字段:
      • 名称lb-subnet
      • 区域us-central1
      • IP 栈类型IPv4 和 IPv6(双栈)
      • IPv4 范围10.1.2.0/24
        虽然您可以为子网配置 IPv4 地址范围,但您不能为子网选择 IPv6 地址范围。Google 提供固定大小 (/64) 的 IPv6 CIDR 地址块。
      • IPv6 访问类型外部
      • 点击完成
  5. 点击创建

如需支持仅限 IPv4 流量,请按以下步骤操作:

  1. 在 Google Cloud Console 中,转到 VPC 网络页面。
    转到 VPC 网络
  2. 点击创建 VPC 网络
  3. 输入 lb-network 作为名称
  4. 子网部分中执行以下操作:
    • 子网创建模式设置为自定义
    • 新子网部分中,配置以下字段:
      • 名称lb-subnet
      • 区域us-central1
      • IP 栈类型IPv4(单栈)
      • IPv4 范围10.1.2.0/24
      • 点击完成
  5. 点击创建

gcloud

  1. 创建自定义模式 VPC 网络:

    gcloud compute networks create lb-network \
        --subnet-mode=custom
    
  2. lb-network 网络中,为 us-central1 区域中的后端创建子网。

    对于 IPv4 和 IPv6 流量,请使用以下命令:

    gcloud compute networks subnets create lb-subnet \
      --stack-type=IPV4_IPv6 \
      --ipv6-access-type=EXTERNAL \
      --network=lb-network \
      --range=10.1.2.0/24 \
      --region=us-central1
    

    对于仅限 IPv4 流量,请使用以下命令:

    gcloud compute networks subnets create lb-subnet \
      --network=lb-network \
      --range=10.1.2.0/24 \
      --region=us-central1
    

创建可用区代管式实例组

对于此负载均衡场景,您将创建两个 Compute Engine 可用区代管式实例组并在每个实例上安装一个 Apache Web 服务器。

要同时处理 IPv4 和 IPv6 流量,请将后端虚拟机配置为双栈。将虚拟机的 stack-type 设置为 IPv4_IPv6。虚拟机还会从子网继承 ipv6-access-type 设置(在此示例中为 EXTERNAL)。

作为网络负载均衡器的后端虚拟机参与的实例必须运行相应的 Linux 客机环境Windows 客机环境或提供同等功能的其他进程。

设置实例

Cloud 控制台

  1. 创建实例模板。在 Google Cloud 控制台中,转到实例模板页面。

    转到“实例模板”

    1. 点击创建实例模板
    2. 对于名称,输入 ig-us-template
    3. 确保启动磁盘已设置为 Debian 映像,例如 Debian GNU/Linux 10 (buster)。本文中的说明使用仅 Debian 支持的命令,例如 apt-get
    4. 点击网络、磁盘、安全、管理、单租户
    5. 点击管理,并将以下脚本复制到启动脚本字段中。

      #! /bin/bash
      sudo apt-get update
      sudo apt-get install apache2 -y
      sudo a2ensite default-ssl
      sudo a2enmod ssl
      sudo vm_hostname="$(curl -H "Metadata-Flavor:Google" \
      http://169.254.169.254/computeMetadata/v1/instance/name)"
      sudo echo "Page served from: $vm_hostname" | \
      tee /var/www/html/index.html
      sudo systemctl restart apache2
      
    6. 点击网络

      1. 对于网络标记,请输入 lb-tag
      2. 对于网络接口,请点击默认接口并配置以下字段:
        1. 网络lb-network
        2. 子网lb-subnet
    7. 点击创建

  2. 创建托管实例组。转到 Google Cloud 控制台中的实例组页面。

    转到“实例组”

    1. 点击创建实例组
    2. 选择新的代管式实例组(无状态)。如需了解详情,请参阅无状态或有状态 MIG
    3. 名称输入 ig-us-1
    4. 位置下方,选择单个可用区
    5. 对于区域,请选择 us-central1
    6. 对于可用区,请选择 us-central1-a
    7. 实例模板下,选择 ig-us-template
    8. 指定要在组中创建的实例数。

      对于此示例,请在自动扩缩下指定以下选项:

      • 对于自动扩缩模式,请选择 Off:do not autoscale
      • 对于实例数上限,请输入 2
    9. 点击创建

  3. 重复上述步骤,在 us-central1-c 可用区中创建第二个代管式实例组,并遵循以下规范:

    • 名称ig-us-2
    • 可用区us-central1-c
    • 实例模板:使用上一部分中创建的同一 ig-us-template 模板。

gcloud

本指南中的 gcloud 说明假定您使用的是 Cloud Shell 或安装了 bash 的其他环境。

  1. 使用 gcloud compute instance-templates create 命令创建含有 HTTP 服务器的虚拟机实例模板。

    如需同时处理 IPv4 和 IPv6 流量,请使用以下命令。

    gcloud compute instance-templates create ig-us-template \
    --region=us-central1 \
    --network=lb-network \
    --subnet=lb-subnet \
    --ipv6-network-tier=PREMIUM \
    --stack-type=IPv4_IPv6 \
    --tags=lb-tag \
    --image-family=debian-10 \
    --image-project=debian-cloud \
    --metadata=startup-script='#! /bin/bash
    apt-get update
    apt-get install apache2 -y
    a2ensite default-ssl
    a2enmod ssl
    vm_hostname="$(curl -H "Metadata-Flavor:Google" \
    http://169.254.169.254/computeMetadata/v1/instance/name)"
    echo "Page served from: $vm_hostname" | \
    tee /var/www/html/index.html
    systemctl restart apache2'
    

    要处理仅限 IPv4 流量,请使用以下命令。

    gcloud compute instance-templates create ig-us-template \
    --region=us-central1 \
    --network=lb-network \
    --subnet=lb-subnet \
    --tags=lb-tag \
    --image-family=debian-10 \
    --image-project=debian-cloud \
    --metadata=startup-script='#! /bin/bash
    apt-get update
    apt-get install apache2 -y
    a2ensite default-ssl
    a2enmod ssl
    vm_hostname="$(curl -H "Metadata-Flavor:Google" \
    http://169.254.169.254/computeMetadata/v1/instance/name)"
    echo "Page served from: $vm_hostname" | \
    tee /var/www/html/index.html
    systemctl restart apache2'
    
  2. 使用 gcloud compute instance-groups managed create 命令在可用区中创建一个代管式实例组。

    gcloud compute instance-groups managed create ig-us-1 \
        --zone us-central1-a \
        --size 2 \
        --template ig-us-template
    
  3. us-central1-c 可用区中创建第二个代管式实例组:

    gcloud compute instance-groups managed create ig-us-2 \
        --zone us-central1-c \
        --size 2 \
        --template ig-us-template
    

配置防火墙规则

创建允许外部流量(包括健康检查探测)到达后端实例的防火墙规则。

此示例会创建一条防火墙规则,以允许来自所有来源范围的 TCP 流量到达端口 80 上的后端实例。如果要专门为健康检查探测创建单独的防火墙规则,请使用健康检查概览:探测 IP 范围和防火墙规则中记录的来源 IP 地址范围。

控制台

  1. 转到 Google Cloud Console 中的“防火墙”页面。
    转到“防火墙”页面
  2. 如需允许 IPv4 流量,请执行以下步骤:
    1. 点击创建防火墙规则
    2. 输入 allow-network-lb-ipv4 作为名称
    3. 选择要应用防火墙规则的网络 (lb-network)。
    4. 目标下,选择指定的目标标记
    5. 目标标记字段中,输入 lb-tag
    6. 来源过滤条件下,选择 IPv4 范围
    7. 来源 IPv4 范围设置为 0.0.0.0/0。这允许来自任何来源的 IPv4 流量。这也允许 Google 的健康检查探测访问后端实例。
    8. 指定的协议和端口下,点击 tcp 旁边的复选框,然后输入 80
    9. 点击创建。新的防火墙规则可能需要一段时间才能在 Google Cloud 控制台中显示,或者您可能需要点击刷新才能看见规则。
  3. 如需允许 IPv6 流量,请执行以下步骤:
    1. 再次点击创建防火墙规则
    2. 输入 allow-network-lb-ipv6 作为名称
    3. 选择要应用防火墙规则的网络 (lb-network)。
    4. 目标下,选择指定的目标标记
    5. 目标标记字段中,输入 lb-tag
    6. 来源过滤条件下,选择 IPv6 范围
    7. 来源 IPv6 范围设置为 ::/0。这允许来自任何来源的 IPv6 流量。这也允许 Google 的健康检查探测访问后端实例。
    8. 指定的协议和端口下,点击 tcp 旁边的复选框,然后输入 80
    9. 点击创建。新的防火墙规则可能需要一段时间才能在控制台中显示,或者您可能需要点击刷新才能看见规则。

gcloud

  1. 如需允许 IPv4 流量,请运行以下命令:

    gcloud compute firewall-rules create allow-network-lb-ipv4 \
        --network=lb-network \
        --target-tags=lb-tag \
        --allow=tcp:80 \
        --source-ranges=0.0.0.0/0
    
  2. 如需允许 IPv6 流量,请运行以下命令:

    gcloud compute firewall-rules create allow-network-lb-ipv6 \
      --network=lb-network \
      --target-tags=lb-tag \
      --allow=tcp:80 \
      --source-ranges=::/0
    

配置负载均衡器

接下来,设置负载均衡器。

配置负载均衡器时,虚拟机实例将接收发往您配置的静态外部 IP 地址的数据包。如果您使用的是 Compute Engine 提供的映像,则系统会自动配置您的实例处理此 IP 地址。如果您使用任何其他映像,则必须将此地址配置为 eth0 上的别名或每个实例上的环回地址。

控制台

  1. 转到 Google Cloud Console 中的创建负载均衡器页面。
    转到“创建负载均衡器”页面
  2. TCP 负载均衡下,点击开始配置按钮。

  3. 面向互联网或仅限内部中,选择 From Internet to my VMs

  4. 多区域或单区域中,选择 Single region only

  5. 对于后端类型,选择后端服务

  6. 点击继续

后端配置

  1. 新建 TCP 负载均衡器屏幕上的名称中,输入新负载均衡器的名称 tcp-network-lb。 对于区域,选择 us-central1
  2. 点击后端配置。 您将看到您之前输入的负载均衡器名称,但无法进行修改。
  3. 后端配置屏幕上,进行以下更改:
    1. 新建后端下,选择 IP 栈类型。如果您创建了双栈后端来处理 IPv4 和 IPv6 流量,请选择 IPv4 和 IPv6(双栈)。如需仅处理 IPv4 流量,请选择 IPv4(单栈)
    2. 使用实例组下拉菜单选择 ig-us-1。点击完成。点击添加后端,然后重复此步骤来添加 ig-us-2
    3. 健康检查下,选择创建健康检查另创建一项健康检查,然后输入以下信息:
      • 名称tcp-health-check
      • 协议TCP
      • 端口80
    4. 点击保存
  4. 请先确认后端配置旁边是否有蓝色对勾标记,然后再继续操作。

前端配置

  1. 点击前端配置
  2. 名称输入 network-lb-forwarding-rule
  3. 如需处理 IPv4 流量,请按以下步骤操作:
    1. 对于 IP 版本,请选择 IPv4
    2. IP 地址下,点击下拉菜单并选择创建 IP 地址
      1. 保留静态 IP 地址屏幕上,指定名称 network-lb-ip
      2. 点击预留
    3. 端口下,选择单个,然后输入 80 作为端口号
    4. 点击完成
  4. 如需处理 IPv6 流量,请按以下步骤操作:

    1. 对于 IP 版本,请选择 IPv6
    2. 对于子网,请选择 lb-subnet
    3. IPv6 范围是从 lb-subnet 自动分配的。
    4. 端口下,选择单个,然后输入 80 作为端口号
    5. 点击完成

    前端配置左侧带对勾标记的蓝色圆圈表示设置成功。

检查配置

  1. 点击检查并最终确定按钮,检查负载均衡器的所有配置设置。
  2. 如果设置正确,请点击创建。创建负载均衡器需要几分钟的时间。

    在负载均衡屏幕上,在新负载均衡器的“后端”列下,您会看到一个绿色对勾标记,表明新的负载均衡器运行正常。

gcloud

  1. (仅限 IPv4 流量)为负载均衡器创建静态外部 IPv4 地址

    gcloud compute addresses create network-lb-ipv4 \
        --region us-central1
    

    IPv6 转发规则会使用临时 IP 地址。

  2. 创建 TCP 健康检查。

    gcloud compute health-checks create tcp tcp-health-check \
        --region us-central1 \
        --port 80
    
  3. 创建后端服务

    gcloud compute backend-services create network-lb-backend-service \
        --protocol TCP \
        --health-checks tcp-health-check \
        --health-checks-region us-central1 \
        --region us-central1
    
  4. 将实例组添加到后端服务。

    gcloud compute backend-services add-backend network-lb-backend-service \
    --instance-group ig-us-1 \
    --instance-group-zone us-central1-a \
    --region us-central1
    
    gcloud compute backend-services add-backend network-lb-backend-service \
    --instance-group ig-us-2 \
    --instance-group-zone us-central1-c \
    --region us-central1
    
  5. 根据您希望处理 IPv4 流量还是 IPv6 流量,创建转发规则。创建两个转发规则来处理这两种流量。

    1. 对于 IPv4 流量。创建转发规则,将传入的 TCP 流量路由到后端服务。使用第 1 步中预留的 IPv4 地址作为负载均衡器的静态外部 IP 地址。

      gcloud compute forwarding-rules create network-lb-forwarding-rule-ipv4 \
        --load-balancing-scheme EXTERNAL \
        --region us-central1 \
        --ports 80 \
        --address network-lb-ipv4 \
        --backend-service network-lb-backend-service
      
    2. 对于 IPv6 流量。使用以下命令创建具有临时 IPv6 地址的转发规则。

      gcloud compute forwarding-rules create network-lb-forwarding-rule-ipv6 \
          --load-balancing-scheme EXTERNAL \
          --region us-central1 \
          --subnet lb-subnet \
          --ip-version IPV6 \
          --ports 80 \
          --backend-service network-lb-backend-service
    

测试负载均衡器

至此您已经配置好了负载均衡服务,接下来可以开始将流量发送到负载均衡器的外部 IP 地址,并观察流量被分发到不同的后端实例。

查询负载均衡器的外部 IP 地址

控制台

  1. 高级负载均衡页面中,转到转发规则标签页。
    转到“转发规则”标签页
  2. 找到负载均衡器使用的转发规则。
  3. 地址列中,记下列出的外部 IP 地址。

gcloud:IPv4

输入以下命令,查看负载均衡器使用的 network-lb-forwarding-rule 转发规则的外部 IPv4 地址。

gcloud compute forwarding-rules describe network-lb-forwarding-rule-ipv4 \
    --region us-central1

gcloud:IPv6

输入以下命令,查看负载均衡器使用的 network-lb-forwarding-rule 转发规则的外部 IPv6 地址。

gcloud compute forwarding-rules describe network-lb-forwarding-rule-ipv6 \
    --region us-central1

将流量发送到负载均衡器

使用 curl 连接负载均衡器的 IP 地址,通过这种方式向负载均衡器发送 Web 请求。

  • 从具有 IPv4 连接的客户端,运行以下命令:

    $ while true; do curl -m1 IPV4_ADDRESS; done
    
  • 从具有 IPv6 连接的客户端,运行以下命令:

    $ while true; do curl -m1 http://IPV6_ADDRESS; done
    

    比方说,如果分配的 IPv6 地址为 [2001:db8:1:1:1:1:1:1/96]:80,则该命令应如下所示:

    $ while true; do curl -m1 http://[2001:db8:1:1:1:1:1:1]:80; done
    

请注意 curl 命令返回的结果。该结果文本中显示了生成响应的后端虚拟机的名称,例如:Page served from: VM_NAME

来自 curl 命令的响应会在后端实例之间随机交替。如果响应最初不成功,您可能需要等待大约 30 秒,以便完全加载配置并且实例被标记为运行状况良好,然后再次尝试。

其他配置选项

本部分对配置示例进行了扩展,以提供有关进一步自定义网络负载均衡器的说明。这些任务是可选的。您可以按任意顺序执行这些任务。

配置会话亲和性

示例配置会创建一个停用了会话亲和性的后端服务(值设置为 NONE)。本部分介绍如何更新后端服务以更改负载均衡器的会话亲和性设置。

如需了解支持的会话亲和性类型,请参阅会话亲和性选项

控制台

  1. 在 Google Cloud Console 中,转到负载均衡页面。

    转到“负载均衡”

  2. 点击后端服务的名称,然后点击修改

  3. 修改 TCP 负载均衡器页面上,点击后端配置

  4. 会话亲和性下拉列表中选择一个选项。

  5. 点击更新

gcloud

使用以下 gcloud 命令更新后端服务的会话亲和性:

gcloud compute backend-services update BACKEND_SERVICE \
    --region=REGION \
    --session-affinity=SESSION_AFFINITY_OPTION

请将占位符替换为有效值:

  • BACKEND_SERVICE:您要更新的后端服务
  • SESSION_AFFINITY_OPTION:您要设置的会话亲和性选项

    如需查看网络负载均衡器受支持的值列表,请参阅会话亲和性选项

配置连接跟踪政策

示例配置会创建具有连接跟踪政策的默认设置的后端服务。本部分介绍如何更新后端服务以更改负载均衡器的默认连接跟踪政策。

连接跟踪政策包括以下设置:

gcloud

使用以下 gcloud compute backend-services 命令更新后端服务的连接跟踪政策:

gcloud compute backend-services update BACKEND_SERVICE \
    --region=REGION \
    --tracking-mode=TRACKING_MODE \
    --connection-persistence-on-unhealthy-backends=CONNECTION_PERSISTENCE_BEHAVIOR

请将占位符替换为有效值:

  • BACKEND_SERVICE:您要更新的后端服务
  • TRACKING_MODE:要用于传入数据包的连接跟踪模式。如需查看受支持值的列表,请参阅跟踪模式
  • CONNECTION_PERSISTENCE_BEHAVIOR:后端运行状况不佳时的连接持久性行为。如需查看受支持值的列表,请参阅运行状况不佳的后端上的连接持久性

配置流量导向

本部分介绍如何更新负载均衡器的前端配置,以设置基于来源 IP 地址的流量导向。如需详细了解流量导向的工作原理,请参阅流量导向

以下说明假定您已创建父级基本转发规则。此示例将创建另一个转发规则,即导向转发规则,该规则将具有与父级规则相同的 IP 地址、IP 协议和端口。此导向转发规则配置有来源 IP 地址范围,您可以自定义来自这些来源 IP 地址范围的数据包的转发方式。

gcloud

使用以下命令创建指向后端服务的导向转发规则:

gcloud beta compute forwarding-rules create STEERING_FORWARDING_RULE_BS \
    --load-balancing-scheme=EXTERNAL \
    --backend-service=BACKEND_SERVICE \
    --address=LOAD_BALANCER_VIP \
    --ip-protocol=IP_PROTOCOL \
    --ports=PORTS \
    --region=REGION \
    --source-ip-ranges=SOURCE_IP_ADDRESS_RANGES

使用以下命令创建指向目标实例的导向转发规则:

gcloud beta compute forwarding-rules create STEERING_FORWARDING_RULE_TI \
    --load-balancing-scheme=EXTERNAL \
    --target-instance=TARGET_INSTANCE \
    --address=LOAD_BALANCER_VIP \
    --ip-protocol=IP_PROTOCOL \
    --ports=PORTS \
    --region=REGION \
    --source-ip-ranges=SOURCE_IP_ADDRESS_RANGES

请将占位符替换为有效值:

  • FORWARDING_RULE:您正在创建的导向转发规则的名称。
  • BACKEND_SERVICETARGET_INSTANCE:此导向转发规则将向其发送流量的后端服务或目标实例的名称。即使父级转发规则指向后端服务,您也可以创建指向目标实例的导向转发规则。
  • LOAD_BALANCER_VIPIP_PROTOCOLPORTS:您要创建的导向转发规则的 IP 地址、IP 协议和端口。这些设置应与预先存在的基本转发规则匹配。
  • REGION:您正在创建的转发规则的区域。
  • SOURCE_IP_ADDRESS_RANGES:以英文逗号分隔的 IP 地址或 IP 地址范围的列表。只有在传入数据包的来源 IP 地址属于此处设置的其中一个 IP 地址范围时,此转发规则才会转发流量。

使用以下命令删除导向转发规则。您必须先删除负载均衡器正在使用的所有导向转发规则,然后才能删除负载均衡器本身。

gcloud beta compute forwarding-rules delete STEERING_FORWARDING_RULE \
    --region=REGION

后续步骤