设置简单的外部 HTTP 负载平衡器

本设置指南介绍了如何使用以下资源创建简单的外部 HTTP 负载平衡器: 如需设置具有“TLS 终止”功能的简单外部 HTTPS 负载平衡器,请参阅设置简单的外部 HTTPS 负载平衡器

如需查看包含 IPv6 和 SSL 证书设置的基于内容的多地区示例,请参阅设置基于内容的多地区外部 HTTPS 负载平衡器

如需了解一般概念,请参阅外部 HTTP(S) 负载平衡概览

如果您使用的是 GKE,则通常由 Kubernetes Ingress 控制器配置负载平衡器。如需了解详情,请参阅配置 Ingress 以进行外部负载平衡

HTTP 负载平衡器拓扑

在本指南中,您将创建下图所示的配置。

简单的 HTTP 负载平衡(点击可放大)
简单的 HTTP 负载平衡(点击可放大)

图中的事件顺序如下所示:

  1. 客户端将内容请求发送到转发规则中定义的外部 IPv4 地址。
  2. 转发规则将请求定向到目标 HTTP 代理。
  3. 目标代理使用网址映射中的规则确定单个后端服务接收所有请求。
  4. 负载平衡器确定后端服务只有一个实例组,并将请求定向到该组中的虚拟机实例。
  5. 该虚拟机提供用户请求的内容。

设置权限

为完成本指南中的步骤,您必须拥有在项目中创建 Compute Engine 实例、防火墙规则和预留 IP 地址的权限。您必须拥有项目的 Owner 或 Editor 角色,或者必须拥有以下 Compute Engine IAM 角色

任务 所需角色
创建实例 Instance Admin
添加和移除防火墙规则 Security Admin
创建负载平衡器组件 Network Admin
创建项目(可选) Project Creator

如需了解详情,请参阅以下指南:

创建代管实例组

如需使用 Compute Engine 后端设置负载平衡器,您的虚拟机必须属于某个实例组。本指南介绍了如何创建由一组运行有 Apache 的 Linux 虚拟机组成的代管实例组,然后设置负载平衡。

这个代管实例组提供运行外部 HTTP 负载平衡器的后端服务器的虚拟机。出于演示目的,后端都会传送其各自的主机名。

控制台

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

    转到“实例组”页面

  2. 点击创建实例组
  3. 在左侧选择新建代管实例组
  4. 对于名称,输入 lb-backend-example
  5. 位置下方,选择单个区域
  6. 对于地区,选择您的首选地区。本示例使用 us-east1
  7. 对于区域,选择 us-east1-b
  8. 实例模板下,选择创建新的实例模板
  9. 对于名称,输入 lb-backend-template
  10. 确保启动磁盘已设置为 Debian 映像,例如 Debian GNU/Linux 9 (stretch)。本文中的说明使用仅 Debian 支持的命令,例如 apt-get
  11. 管理、安全、磁盘、网络、单独租用下的管理标签页上,将以下脚本插入到启动脚本字段。

    #! /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
    
  12. 网络标签页上,添加网络标记 allow-health-check

  13. 点击保存并继续

  14. 自动扩缩模式下,选择不自动调节

  15. 实例数下,输入 2

  16. 如需创建新的实例组,请点击创建

gcloud

  1. 创建模板。

    gcloud compute instance-templates create lb-backend-template \
       --region=us-east1 \
       --network=default \
       --subnet=default \
       --tags=allow-health-check \
       --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 lb-backend-example \
       --template=lb-backend-template --size=2 --zone=us-east1-b
    

向实例组添加已命名端口

对于您的实例组,定义一个 HTTP 服务并将端口名称映射到相关端口上。配置完成后,负载平衡服务会将流量转发到已命名的端口。

控制台

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

    转到“实例组”页面

  2. 点击实例组的名称(在此示例中为 lb-backend-example),然后点击修改组
  3. 点击指定端口名称映射
  4. 点击添加项目
  5. 对于端口名称,请输入 http。对于端口号,请输入 80
  6. 点击保存

gcloud

gcloud compute instance-groups unmanaged set-named-ports lb-backend-example \
    --named-ports http:80 \
    --zone us-east1-b

配置防火墙规则

在此示例中,您将创建 fw-allow-health-check 防火墙规则。这是一种入站流量规则,允许来自 Google Cloud 运行状况检查系统(130.211.0.0/2235.191.0.0/16)的流量。此示例使用目标标记 allow-health-check 来标识虚拟机。

控制台

  1. 在 Google Cloud Console 中,转到防火墙页面。

    转到“防火墙”页面

  2. 点击创建防火墙规则以创建第二条防火墙规则。
  3. 对于名称,输入 fw-allow-health-check
  4. 网络下,选择默认
  5. 目标下,选择指定的目标标记
  6. 使用 allow-health-check 填充目标标记字段。
  7. 来源过滤条件设置为 IP 地址范围
  8. 来源 IP 地址范围设置为 130.211.0.0/2235.191.0.0/16
  9. 协议和端口下,选择指定的协议和端口
  10. 选中 tcp 复选框,然后输入端口号 80
  11. 点击创建

gcloud

gcloud compute firewall-rules create fw-allow-health-check \
    --network=default \
    --action=allow \
    --direction=ingress \
    --source-ranges=130.211.0.0/22,35.191.0.0/16 \
    --target-tags=allow-health-check \
    --rules=tcp:80

预留外部 IP 地址

现在您的实例已启动并正在运行,接下来请设置一个全局静态外部 IP 地址,以供客户用来访问您的负载平衡器。

控制台

  1. 在 Google Cloud Console 中,转到外部 IP 地址页面。

    转到“外部 IP 地址”页面

  2. 如需预留 IPv4 地址,请点击预留静态地址
  3. 对于名称,输入 lb-ipv4-1
  4. 网络服务层级设置为优质
  5. IP 版本设置为 IPv4
  6. 类型设置为全局
  7. 点击预留

gcloud

gcloud compute addresses create lb-ipv4-1 \
    --ip-version=IPV4 \
    --global

请记下预留的 IPv4 地址:

gcloud compute addresses describe lb-ipv4-1 \
    --format="get(address)" \
    --global

设置负载平衡器

控制台

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

    转到“负载平衡”页面

  2. 点击创建负载平衡器
  3. HTTP(S) 负载平衡下,点击开始配置
  4. 选择从互联网到我的虚拟机,然后点击继续
  5. 在负载平衡器名称中输入 web-map-http
  6. 点击后端配置
    1. 创建或选择后端服务和后端存储分区下,选择后端服务 > 创建后端服务
    2. 为您的后端服务添加名称,例如 web-backend-service
    3. 协议下,选择 HTTP
    4. 对于已命名端口,请输入 http
    5. 后端 > 新后端 > 实例组中,选择您的实例组 lb-backend-example
    6. 端口号中输入 80
    7. 保留其他默认设置。
    8. 运行状况检查下,选择创建运行状况检查,然后为您的运行状况检查添加一个名称,例如 http-basic-check
    9. 将协议设置为 HTTP,然后点击保存并继续
    10. 保留其他默认设置。
    11. 点击创建
  7. 主机和路径规则中,保留默认设置。
  8. 前端配置中,使用以下值:
    1. 协议设置为 HTTP
    2. IP 地址设置为您之前创建的 lb-ipv4-1
    3. 确保将端口设置为 80 以允许 HTTP 流量。
    4. 点击完成
  9. 点击检查并最终确定
  10. 配置完负载平衡器后,点击创建
  11. 等待负载平衡器完成创建。
  12. 点击负载平衡器的名称。
  13. 负载平衡器详情屏幕上,记下负载平衡器的 IP:端口

gcloud

  1. 创建运行状况检查
        gcloud compute health-checks create http http-basic-check \
            --port 80
        
  2. 创建后端服务
        gcloud compute backend-services create web-backend-service \
            --protocol=HTTP \
            --port-name=http \
            --health-checks=http-basic-check \
            --global
        
  3. 将您的实例组作为后端添加到后端服务。
        gcloud compute backend-services add-backend web-backend-service \
            --instance-group=lb-backend-example \
            --instance-group-zone=us-east1-b \
            --global
        
  4. 创建网址映射,将传入的请求路由到默认的后端服务。
        gcloud compute url-maps create web-map-http \
            --default-service web-backend-service
        
  5. 创建一个目标 HTTP 代理将请求路由到您的网址映射。
        gcloud compute target-http-proxies create http-lb-proxy \
            --url-map web-map-http
        
  6. 创建全局转发规则以将传入请求路由到代理。
        gcloud compute forwarding-rules create http-content-rule \
            --address=lb-ipv4-1\
            --global \
            --target-http-proxy=http-lb-proxy \
            --ports=80
        

测试发送到您的实例的流量

现在负载平衡服务已运行,您可以将流量发送到转发规则并会发现流量被分散到不同的实例。

控制台

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

    转到“负载平衡”页面

  2. 点击您刚刚创建的负载平衡器。
  3. 后端部分中,确认虚拟机运行状况良好。运行状况良好列应该会填充相应信息,指示两个虚拟机运行状况都良好 (2/2)。否则,请先尝试重新加载页面。Cloud Console 可能需要一些时间才能指示虚拟机运行状况良好。如果几分钟后后端似乎仍运行状况不佳,请检查防火墙配置以及分配给后端虚拟机的网络标记。
  4. 在 Cloud Console 显示后端实例运行状况良好后,您可以使用网络浏览器转到 http://IP_ADDRESS 来测试您的负载平衡器。将 IP_ADDRESS 替换为负载平衡器的 IP 地址
  5. 您的浏览器应该会呈现一个页面,其中的内容显示提供该页面的实例的名称以及其区域(例如,Page served from: lb-backend-example-xxxx)。如果您的浏览器未呈现此页面,请查看本指南中的配置设置。

后续步骤