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

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

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

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

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

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

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

准备工作

本指南假定您熟悉 bash

创建可用区代管式实例组

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

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

设置实例

Cloud Console

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

    转到“实例组”页面

  2. 点击创建实例组
  3. 选择左侧的新建代管实例组
  4. 对于名称,请输入 ig-us-1
  5. 位置下,选择单个地区
  6. 对于区域,选择 us-central1
  7. 对于可用区,选择 us-central1-a
  8. 实例模板下,选择创建新的实例模板

    1. 对于名称,请输入 ig-us-template
    2. 确保启动磁盘已设置为 Debian 映像,例如 Debian GNU/Linux 9 (stretch)。本文中的说明使用仅 Debian 支持的命令,例如 apt-get
    3. 管理、安全、磁盘、网络、单独租用下的管理标签页上,将以下脚本插入到启动脚本字段。

      #! /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
      
    4. 网络下,使用 network-lb 标记填充标记字段。

    5. 点击保存并继续

  9. 指定要在组中创建的实例数。

    对于此示例,在自动扩缩模式下,选择:

    • 不自动扩缩
    • 实例数下,输入 2
  10. 点击创建以创建新实例组。

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

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

gcloud

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

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

    gcloud compute instance-templates create ig-us-template \
    --region=us-central1 \
    --tags=network-lb \
    --image-family=debian-9 \
    --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
    

配置防火墙规则

创建一条防火墙规则,以允许外部流量到达后端实例。

控制台

  1. 转到 Google Cloud Console 中的“防火墙”页面。
    转到“防火墙”页面
  2. 点击创建防火墙规则
  3. 输入 allow-network-lb 作为名称
  4. 选择要应用防火墙规则的网络默认)。
  5. 目标下,选择指定的目标标记
  6. 目标标记字段中,输入 network-lb
  7. 来源 IP 地址范围设置为 0.0.0.0/0(允许来自任何来源的流量)。这样,外部流量和运行状况检查探测都会到达后端实例。
  8. 指定的协议和端口下,点击 tcp 旁边的复选框,然后输入 80
  9. 点击创建。新的防火墙规则可能需要一段时间才能在 Console 中显示,或者您可能需要点击刷新才能看见规则。

gcloud

gcloud compute firewall-rules create allow-network-lb \
    --target-tags network-lb \
    --allow tcp:80

配置负载平衡器

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

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

控制台

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

  3. 对于面向互联网或仅限内部,选择从互联网到我的虚拟机

  4. 对于多区域或单区域,选择仅单个区域

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

  6. 点击继续

后端配置

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

前端配置

  1. 点击前端配置
  2. 输入 network-lb-forwarding-rule 作为名称
  3. IP 下,点击下拉菜单并选择创建 IP 地址
    1. 预留新的静态 IP 地址屏幕上,指定名称 network-lb-ip
    2. 点击预留
  4. 选择单个,然后输入 80 作为端口号
  5. 点击完成按钮。

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

检查配置

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

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

gcloud

  1. 为负载平衡器创建静态外部 IP 地址

    gcloud compute addresses create network-lb-ip \
        --region us-central1
    
  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. 创建转发规则,用于将传入的 TCP 流量路由到后端服务。使用第 1 步中预留的 IP 地址作为负载平衡器的静态外部 IP 地址。

    gcloud compute forwarding-rules create network-lb-forwarding-rule \
        --load-balancing-scheme external \
        --region us-central1 \
        --ports 80 \
        --address network-lb-ip \
        --backend-service network-lb-backend-service
    

测试负载平衡器

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

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

控制台

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

gcloud

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

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

将流量发送到负载平衡器

此过程会将外部流量发送到负载平衡器。

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

    $ while true; do curl -m1 IP_ADDRESS; done
    
  2. 请注意 curl 命令返回的结果。该结果文本中显示了生成响应的后端虚拟机的名称,例如:Page served from: VM_NAME

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

其他配置选项

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

配置会话亲和性

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

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

控制台

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

    转到“负载平衡”

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

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

  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 beta compute backend-services 命令更新后端服务的连接跟踪政策:

gcloud beta 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:后端运行状况不佳时的连接持久性行为。如需查看受支持值的列表,请参阅运行状况不佳的后端上的连接持久性

后续步骤