请求路由到多区域经典版应用负载均衡器

本指南演示了如何创建符合以下条件的 Google Cloud HTTPS 负载均衡器:

  • 根据请求网址路径选择后端服务。
  • 将请求路由到靠近客户端的后端(多区域负载均衡)。

在开始之前,请确保您已熟悉外部应用负载均衡器概念。

如需查看简化示例,请参阅使用 Compute Engine 后端设置外部应用负载均衡器。如需了解高级路由(例如 HTTP 重写和重定向),请参阅外部应用负载均衡器的流量管理

概览

本指南介绍如何创建这样的负载均衡器,它根据请求网址中的路径引导流量并均衡多个地区的流量。您将在美国(us-central1-b 区域)和欧盟(eu-west1-b 区域)这两个地区总共创建 8 个 Compute Engine 实例,然后创建一个负载均衡器,用于将流量路由到这些实例。

按照说明完成操作后,您的负载均衡器配置如下:

  • 包含以 /video 开头的网址路径的流量会路由到一个后端服务。
  • 包含与上述格式不匹配的网址路径的流量会路由到另一个后端服务。

在本方法指南文档中,您将创建如下图所示的配置:

多区域 HTTPS 负载均衡(点击可放大)
多区域 HTTPS 负载均衡(点击可放大)

图中事件顺序如下:

  1. 客户端访问 https://www.example.com/video/concert 网址,并向转发规则中定义的外部 IP 地址发送内容请求。请求可以使用 IPv4 或 IPv6;这两种协议有相应的转发规则。
  2. 转发规则将请求定向到目标 HTTPS 代理。
  3. 目标代理使用网址映射中指定的规则来确定用于接收请求的后端服务。包含 /video 的请求(例如 https://www.example.com/video/concert)会发送到 video-backend-service。其他任何网址路径都会发送到默认服务 web-backend-service
  4. 负载均衡器根据后端服务的实例组加载情况以及与客户端的邻近程度,确定哪个实例组应该处理请求,并将请求定向到该组中的某个实例。
  5. 该实例提供每个用户请求的内容。video 实例提供视频内容,而 www 实例则提供其他所有内容。

在此示例中,负载均衡器会接受来自客户端的 HTTPS 请求,并作为代理将这些请求以 HTTP 格式发送到后端。您还可以将负载均衡器配置为接受 HTTP 请求,以及在将请求代理到后端时使用 HTTPS。

准备工作

本指南中的说明需要用到项目。如果您还没有项目,请立即设置一个。这些说明将指导您创建自定义模式 Virtual Private Cloud (VPC) 网络。您还必须设置自定义防火墙规则,以允许流量到达实例。

如果您希望通过命令行进行操作,请安装 gcloud 命令行工具。如需了解该工具的概念信息和安装信息,请参阅 gcloud 概览

权限

要完成本指南中的步骤,您必须拥有在项目中创建 Compute Engine 实例的权限。您必须拥有项目的 Owner 或 Editor 角色,或者必须拥有以下 Compute Engine IAM 角色

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

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

设置

可选:创建新项目

建议拥有 resourcemanager.projects.create 权限的用户先创建一个新项目,然后再按照本方法指南的其余说明操作。这样可以简化本指南末尾的清理工作。

配置网络和子网

在此示例中,请使用以下 VPC 网络、区域和子网:

  • 网络:网络为自定义模式 VPC 网络,名为 lb-network

  • 两个不同地区中的子网:

    • us-subnet 使用 10.1.10.0/24 作为其主要 IP 地址范围,并且位于 us-central1 地区。
    • eu-subnet 使用 10.1.11.0/24 作为其主要 IP 地址范围,并且位于 europe-west1 地区。

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

控制台

  1. 在 Google Cloud 控制台中,进入 VPC 网络页面。

    进入 VPC 网络页面

  2. 点击创建 VPC 网络

  3. 输入 lb-network 作为名称

  4. 子网部分中,创建第一个子网:

    • 子网创建模式设置为自定义
    • 新子网部分中,输入以下信息:
      • 名称us-subnet
      • 区域us-central1
      • IP 地址范围10.1.10.0/24
      • 点击完成
  5. 仍然在子网部分,点击添加子网并创建第二个子网:

    • 新子网部分中,输入以下信息:
      • 名称eu-subnet
      • 区域europe-west1
      • IP 地址范围10.1.11.0/24
      • 点击完成
  6. 点击创建

gcloud

  1. 创建自定义 VPC 网络:

    gcloud compute networks create lb-network --subnet-mode=custom
    
  2. 创建 us-subnet

    gcloud compute networks subnets create us-subnet \
      --network=lb-network \
      --range=10.1.10.0/24 \
      --region=us-central1
    
  3. 创建 eu-subnet

    gcloud compute networks subnets create eu-subnet \
      --network=lb-network \
      --range=10.1.11.0/24 \
      --region=europe-west1
    

配置防火墙规则

默认的拒绝入站流量规则会阻止传入后端实例的流量,包括来自负载均衡器和 Google Cloud 健康检查系统的流量。您必须创建新的防火墙规则来替换默认的规则,并允许流量到达您的实例。

在此示例中,您将创建以下防火墙规则:

  • fw-allow-ssh:入站流量规则,它适用于负载均衡实例,允许从任何地址到 TCP 端口 22 的传入 SSH 连接。您可以为此规则选择限制性更高的源 IP 地址范围;例如,您可以仅指定要从中启动 SSH 会话的系统的 IP 地址范围。此示例使用目标标记 allow-ssh 来标识应该应用该规则的后端虚拟机。

  • fw-allow-health-check-and-proxy:入站流量规则,它适用于负载均衡实例,允许来自负载均衡器和 Google Cloud 健康检查系统(130.211.0.0/2235.191.0.0/16)的流量。此示例使用目标标记 allow-health-check 来标识应该应用该规则的后端虚拟机。

控制台

  1. 在 Google Cloud 控制台中,转到防火墙页面。

    转到“防火墙政策”

  2. 点击创建防火墙规则以创建第一条防火墙规则:

    1. 输入 fw-allow-ssh 作为名称
    2. 网络下,选择 lb-network
    3. 目标下,选择指定的目标标记
    4. 使用 allow-ssh 填充目标标记字段。
    5. 来源过滤条件设置为 IPv4 范围
    6. 来源 IPv4 范围设置为 0.0.0.0/0
    7. 协议和端口下,选择指定的协议和端口
    8. 选中 TCP 复选框,然后输入 22 作为端口号。
    9. 点击创建
  3. 点击创建防火墙规则以创建第二条防火墙规则:

    1. 输入 fw-allow-health-check-and-proxy 作为名称
    2. 网络下,选择 lb-network
    3. 目标下,选择指定的目标标记
    4. 使用 allow-health-check 填充目标标记字段。
    5. 来源过滤条件设置为 IPv4 范围
    6. 来源 IPv4 范围设置为 130.211.0.0/2235.191.0.0/16
    7. 协议和端口下,选择指定的协议和端口
    8. 选中 TCP 复选框,然后输入 80,443 作为端口号。
    9. 点击创建

gcloud

  1. 创建 fw-allow-ssh 防火墙规则,允许通过 SSH 连接到网络标记为 allow-ssh 的虚拟机。如果省略 source-ranges,Google Cloud 会将规则解释为表示所有来源

    gcloud compute firewall-rules create fw-allow-ssh \
        --network=lb-network \
        --action=allow \
        --direction=ingress \
        --target-tags=allow-ssh \
        --rules=tcp:22
    
  2. 创建 fw-allow-health-check-and-proxy 规则,以允许负载均衡器和 Google Cloud 健康检查与 TCP 端口 80443 上的后端实例进行通信:

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

创建实例

如需使用 Compute Engine 后端设置负载均衡器,您的虚拟机需要位于实例组中。本指南介绍了如何使用运行 Apache 的 Linux 虚拟机创建托管实例组。

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

在此示例中,您将创建 8 个虚拟机实例 (VM):4 个用于提供视频内容,4 个用于提供其他所有内容。您需要使用启动脚本来安装 Apache 网络服务器软件,并为每个实例分别提供唯一主页。注意,您可以在虚拟机上使用任何网络服务器;为方便起见,本例中安装了 Apache。

控制台

创建一个实例模板。

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

    转到“实例模板”

    1. 点击创建实例模板
    2. 对于名称,输入 video-us-template
    3. 确保启动磁盘已设置为 Debian 映像,例如 Debian GNU/Linux 10 (buster)。本文中的说明使用仅 Debian 支持的命令,例如 apt-get
    4. 点击高级选项
    5. 点击网络并配置以下字段:
      1. 对于网络标记,请输入 allow-health-checkallow-ssh
      2. 对于网络接口,请选择以下内容:
        • 网络lb-network
        • 子网us-subnet
    6. 点击管理。将以下脚本输入启动脚本字段。

      #! /bin/bash
      apt-get update
      apt-get install apache2 -y
      a2ensite default-ssl
      a2enmod ssl
      vm_hostname="$(curl -H "Metadata-Flavor:Google" \
      http://metadata.google.internal/computeMetadata/v1/instance/name)"
      mkdir -p /var/www/html/video
      echo "Page served from: $vm_hostname" | \
      tee /var/www/html/index.html /var/www/html/video/index.html
      systemctl restart apache2
      
    7. 点击创建

  2. 创建代管式实例组。在 Google Cloud 控制台中,转到实例组页面。

    转到“实例组”

    1. 点击创建实例组
    2. 选择新的代管式实例组(无状态)。如需了解详情,请参阅无状态或有状态 MIG
    3. 对于名称,输入 ig-video-us
    4. 位置下方,选择单个可用区
    5. 对于区域,选择您的首选区域。本示例使用 us-central1
    6. 对于可用区,选择 us-central1-b
    7. 实例模板下,选择 video-us-template
    8. 自动扩缩模式下,选择 Off:do not autoscale
    9. 实例数上限下,输入 2
    10. 点击创建

gcloud

  1. 创建一个实例模板。

    gcloud compute instance-templates create video-us-template \
       --region=us-central1 \
       --network=lb-network \
       --subnet=us-subnet \
       --tags=allow-health-check,allow-ssh \
       --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://metadata.google.internal/computeMetadata/v1/instance/name)"
         mkdir -p /var/www/html/video
         echo "Page served from: $vm_hostname" | \
         tee /var/www/html/index.html /var/www/html/video/index.html
         systemctl restart apache2'
    
  2. 基于该模板创建一个代管式实例组。

    gcloud compute instance-groups managed create ig-video-us \
       --template=video-us-template --size=2 --zone=us-central1-b
    

对这 4 个实例组重复 4 次此过程。请务必更改每个实例组的实例组名、模板名、地区和区域,如下所示:

  • ig-video-usvideo-us-templateus-central1-b(如示例中所示)
  • ig-video-euvideo-eu-templateeurope-west1-b
  • ig-www-uswww-us-templateus-central1-b
  • ig-www-euwww-europe-templateeurope-west1-b

向实例组添加已命名端口

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

控制台

  1. 在 Google Cloud 控制台中,转到实例组页面。

    进入“实例组”

  2. 点击实例组的名称(例如 ig-video-us),然后点击修改组

  3. 点击指定端口名称映射

  4. 点击添加项目

  5. 对于端口名称,请输入 http。对于端口号,请输入 80

  6. 点击保存

对每个实例组重复此步骤。

gcloud

gcloud compute instance-groups unmanaged set-named-ports ig-video-us \
    --named-ports http:80 \
    --zone us-central1-b
gcloud compute instance-groups unmanaged set-named-ports ig-www-us \
    --named-ports http:80 \
    --zone us-central1-b
gcloud compute instance-groups unmanaged set-named-ports ig-video-eu \
    --named-ports http:80 \
    --zone europe-west1-b
gcloud compute instance-groups unmanaged set-named-ports ig-www-eu \
    --named-ports http:80 \
    --zone europe-west1-b

保留外部 IP 地址

现在您的实例已启动并正在运行,请设置负载均衡所需的服务。在本部分中,您将创建两个全局静态外部 IP 地址,您的客户将使用这些地址访问负载均衡器。

控制台

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

    转到“外部 IP 地址”

  2. 点击预留静态地址以预留 IPv4 地址。

  3. 指定名称 lb-ipv4-1

  4. 将网络层级设置为优质

  5. IP 版本设置为 IPv4

  6. 类型设置为全局

  7. 点击保留

  8. 再次点击预留静态地址以预留 IPv6 地址。

  9. 指定名称 lb-ipv6-1

  10. 将网络层级设置为优质

  11. IP 版本设置为 IPv6

  12. 确保将类型设置为全局

    在此示例中,负载均衡器使用优质层级网络。使用标准层级网络的负载均衡器将改用地区 IP 地址。标准层级无法使用 IPv6 地址。

  13. 点击保留

gcloud

  1. 预留 IPv4 地址:

    gcloud compute addresses create lb-ipv4-1 \
      --ip-version=IPV4 \
      --network-tier=PREMIUM \
      --global
    
  2. 预留 IPv6 地址:

    gcloud compute addresses create lb-ipv6-1 \
      --ip-version=IPV6 \
      --network-tier=PREMIUM \
      --global
    

配置负载均衡资源

负载均衡器功能包含多个连接的资源。在本部分中,您将设置并连接这些资源。这些资源如下:

  • 命名端口 - 负载均衡器使用这些端口将流量导向您的实例组。
  • 健康检查 - 用于轮询您的实例,以查看其健康状况是否良好。负载均衡器仅向运行状况良好的实例发送流量。
  • 后端服务 - 用于跟踪容量、会话粘性和健康检查状态。后端服务根据容量和实例运行状况将请求定向到后端虚拟机或端点。
  • 网址映射 - 负载均衡器根据请求网址的主机和路径,使用该映射将请求定向到特定的后端服务。
  • SSL 证书资源。 SSL 证书资源包含 SSL 证书信息,负载均衡器在 HTTPS 客户端连接到 TLS 时使用这些信息终止 TLS。您可以使用多个 SSL 证书,这些证书可以是 Google 管理的 SSL 证书或自行管理的 SSL 证书的任意组合。您必须为所使用的每个证书创建一个 SSL 证书资源。
  • 目标 HTTPS 代理 - 负载均衡器使用该代理将您的网址映射和 SSL 证书与您的全局转发规则相关联。
  • 两条全局转发规则(IPv4 和 IPv6 各一条)- 用于保留全局外部 IP 地址资源。全局转发规则将传入的请求转发到目标代理。

控制台

为您的负载均衡器命名

  1. 转到 Google Cloud 控制台中的“负载均衡”页面。
    创建负载均衡器
  2. 应用负载均衡器 (HTTP/S) 卡片上,点击开始配置
  3. 面向互联网或仅限内部下,选择从互联网到我的虚拟机
  4. 全球性或区域级下,选择以下某个选项:
    • 对于经典版应用负载均衡器,请选择经典版应用负载均衡器
    • 对于全球外部应用负载均衡器,请选择全球外部应用负载均衡器
  5. 点击继续
  6. 对于负载均衡器的名称,请输入 web-map
  7. 不关闭窗口继续操作。

www 实例配置后端服务和健康检查

负载均衡器需要两个后端服务,还需要进行健康检查,才能为这两个服务提供相关服务。在此示例中,负载均衡器终止来自客户端的 HTTPS 请求,并使用 HTTP 与后端进行通信。为此,您需要为后端协议和健康检查指定 HTTP。

www 实例配置后端服务

  1. 点击后端配置
  2. 创建或选择后端服务下拉菜单中,将鼠标指针悬停在后端服务上,然后选择创建后端服务
  3. 将后端服务的名称设置为 web-backend-service
  4. 确保将后端类型设置为实例组
  5. 协议下拉菜单中,选择 HTTP
  6. 已命名的端口字段中,输入 http
  7. 后端下,将实例组设置为 ig-www-us
  8. 对于负载均衡器和实例之间的流量,请将端口号设置为 80
  9. 保留其余字段的默认值。
  10. 点击新后端窗口底部的完成
  11. 点击添加后端 (Add backend) 并重复相关步骤,但是要选择实例组 ig-www-eu
  12. 不关闭窗口继续操作。

www 实例配置健康检查

  1. 健康检查下的后端配置窗口中,选择创建健康检查另创建一项健康检查
  2. 如需创建 HTTP 健康检查,请设置以下健康检查参数:
    • 名称http-basic-check-www
    • 协议HTTP
    • 端口80
  3. 点击保存并继续
  4. 点击创建

video 实例配置后端和健康检查

  1. 重复上述步骤,但将第二个后端服务命名为 video-backend-service,并为其分配 ig-video-usig-video-eu 实例组。
  2. 按照相同的步骤创建健康检查,但将健康检查命名为 http-basic-check-video。健康检查名称不得重复。

配置主机和路径规则

主机和路径规则用于配置负载均衡器的网址映射资源。

  1. 在屏幕左侧列中,点击主机和路径规则
  2. 第一行的右侧列中有 web-backend-service,并且该行已填充主机路径的默认规则 Any unmatched (default)
  3. 确保右侧列中有第二行且该行带有 video-backend-service。如果该行不存在,请点击添加主机和路径规则,然后从右侧列的下拉菜单中选择 video-backend-service。按照如下所示填充其他列:
    1. 主机设置为 *
    2. 路径字段中:
      1. 输入 /video,然后按 Tab 键。
      2. 输入 /video/*,然后按 Tab 键。

配置前端

前端配置部分用于为负载均衡器配置若干资源,包括转发规则和 SSL 证书。此外,它还可以用于选择在客户端和负载均衡器之间使用的协议。

在此示例中,您将在客户端和负载均衡器之间使用 HTTPS,因此您需要一个或多个 SSL 证书资源来配置代理。 请参阅 SSL 证书,了解如何创建 SSL 证书资源。我们建议您使用 Google 管理的证书。

  1. 创建全球外部应用负载均衡器页面的左侧面板中,点击前端配置
  2. 名称字段中,输入 https-content-rule
  3. 协议字段中,选择 HTTPS
  4. 不关闭窗口继续操作。

配置 IPv4 转发规则

  1. IP 版本设置为 IPv4
  2. IP 地址中,选择您之前创建的 lb-ipv4-1
  3. 确保将端口设置为 443,以允许 HTTPS 流量。
  4. 点击证书下拉列表。
    1. 如果您已拥有自行管理的 SSL 证书资源,并且想要将它用作主要 SSL 证书,请从下拉菜单中选择该证书。
    2. 否则,请选择创建新证书
    3. 填写名称 www-ssl-cert
    4. 选择上传我的证书创建 Google 托管的证书。如需创建 Google 管理的证书,您必须拥有一个网域。如果您没有网域,可以上传自己的证书进行测试。
    5. 如果您选择了上传我的证书,请完成以下步骤。
      1. 公钥证书字段中,执行以下操作之一:
        • 点击上传按钮,然后选择您的 PEM 格式的证书文件。
        • 复制并粘贴 PEM 格式证书的内容。内容必须以 -----BEGIN CERTIFICATE----- 开头,并以 -----END CERTIFICATE----- 结尾。
      2. 对于证书链字段,请执行以下操作之一:
        • 点击上传按钮,然后选择 CA 的证书文件。 此文件应包含中间 CA 证书和根 CA 证书。
        • 复制并粘贴证书链的内容。链中的每个证书都必须采用 PEM 格式,以 -----BEGIN CERTIFICATE----- 开头,并以 -----END CERTIFICATE----- 结尾。Google Cloud 不会为您验证证书链,您必须自行负责验证。
        • 如果您省略证书链,您的证书应由广受信任的 CA 签名,客户端将自动信任由此类 CA 签名的证书。
      3. 对于私钥证书字段,请执行以下操作之一:
        • 点击上传按钮,然后选择您的私钥。您的私钥必须采用 PEM 格式,且不受密码保护。
        • 复制并粘贴 PEM 格式的私钥内容。RSA 私钥必须以 -----BEGIN RSA PRIVATE KEY----- 开头,并以 -----END RSA PRIVATE KEY----- 结尾。ECDSA 私钥必须以 -----BEGIN EC PRIVATE KEY----- 开头,并以 -----END EC PRIVATE KEY----- 结尾。
      4. 点击创建
    6. 如果您选择了创建 Google 托管的证书,请输入网域
  5. 如需添加除了主要 SSL 证书资源之外的其他证书资源,请执行以下操作:
    1. 点击添加证书
    2. 证书列表中选择一个证书,或点击创建新证书并按照上述说明操作。
  6. QUIC 协商下,选择以下选项之一:
    • 自动(默认):允许 Google 控制 QUIC 的协商时间。目前,当您选择自动时,QUIC 处于停用状态。选择此选项即表示您允许 Google 以后自动为此负载均衡器启用 QUIC 协商和 HTTP/3。在 gcloud 和 API 中,此选项称为 NONE
    • 已启用:允许负载均衡器与客户端协商 QUIC。
    • 已停用:阻止负载均衡器与客户端协商 QUIC。
  7. 点击完成
  8. 不关闭窗口继续操作。

配置 IPv6 转发规则

  1. 点击添加前端 IP 和端口
  2. 输入 https-content-ipv6-rule 作为名称
  3. 如果要在客户端和负载均衡器之间使用 HTTPS,请在协议字段中选择 HTTPS。如果要在客户端和负载均衡器之间使用 HTTP,请选择 HTTP
  4. IP 版本设置为 IPv6
  5. IP 中,选择您之前创建的 lb-ipv6-1
  6. 必须使用默认端口 443
  7. 如果您已经拥有要使用的 SSL 证书资源,请从证书下拉菜单中选择该证书。如果没有,请选择创建新证书
    1. 填写名称 www-ssl-cert
    2. 在相应的字段中上传您的公钥证书(.crt 文件)、证书链(.csr 文件)和私钥(.key 文件)。
    3. 点击创建
  8. 如需添加除了主要 SSL 证书资源之外的其他证书资源,请执行以下操作:
    1. 点击添加证书
    2. 证书列表中选择一个证书,或点击创建新证书并按照上述说明操作。
  9. QUIC 协商下,选择以下选项之一:
    • 自动(默认):允许 Google 控制 QUIC 的协商时间。目前,当您选择自动时,QUIC 处于停用状态。选择此选项即表示您允许 Google 以后自动为此负载均衡器启用 QUIC 协商和 HTTP/3。在 gcloud 和 API 中,此选项称为 NONE
    • 已启用:允许负载均衡器与客户端协商 QUIC。
    • 已停用:阻止负载均衡器与客户端协商 QUIC。
  10. 点击完成

审核并最终完成

  1. 创建全球外部应用负载均衡器页面的左侧面板中,点击检查并最终确定
  2. 比较您的设置与您打算创建的内容。
  3. 如果看起来都正确,请点击创建以创建您的外部应用负载均衡器。

gcloud

  1. 创建健康检查。如果您在负载均衡器和后端之间使用 HTTP,请使用 gcloud 命令来处理 HTTP。

    gcloud compute health-checks create http http-basic-check \
        --port 80
    
  2. 为每个内容提供方创建一项后端服务

    --protocol 字段设置为 HTTP,因为我们使用 HTTP 来转到实例。对于健康检查,请使用我们前面创建的 http-basic-check 健康检查。

    • 对于全球外部应用负载均衡器,请将 gcloud CLI 命令与 load-balancing-scheme=EXTERNAL_MANAGED 结合使用。此设置提供了高级流量管理功能
    • 对于经典版应用负载均衡器,请使用 load-balancing-scheme=EXTERNAL
    gcloud compute backend-services create video-backend-service \
        --load-balancing-scheme=LOAD_BALANCING_SCHEME \
        --global-health-checks \
        --protocol=HTTP \
        --port-name=http \
        --health-checks=http-basic-check \
        --global
    
    gcloud compute backend-services create web-backend-service \
        --load-balancing-scheme=LOAD_BALANCING_SCHEME \
        --global-health-checks \
        --protocol=HTTP \
        --port-name=http \
        --health-checks=http-basic-check \
        --global
    
  3. 将您的实例组作为后端添加到后端服务。后端定义了其包含的实例组的容量(最大后端利用率或每秒查询次数上限)。在此示例中,请将 balancing-mode 设置为 UTILIZATION 值,将 max-utilization 设置为 0.8,将 capacity-scaler 设置为 1。如果您希望排空后端服务,请将 capacity-scaler 设置为 0

    添加 ig-video-us 实例组:

    gcloud compute backend-services add-backend video-backend-service \
        --balancing-mode=UTILIZATION \
        --max-utilization=0.8 \
        --capacity-scaler=1 \
        --instance-group=ig-video-us \
        --instance-group-zone=us-central1-b \
        --global
    

    添加 ig-video-eu 实例组:

    gcloud compute backend-services add-backend video-backend-service \
        --balancing-mode=UTILIZATION \
        --max-utilization=0.8 \
        --capacity-scaler=1 \
        --instance-group=ig-video-eu \
        --instance-group-zone=europe-west1-b \
        --global
    

    添加 ig-www-us 实例组:

    gcloud compute backend-services add-backend web-backend-service \
        --balancing-mode=UTILIZATION \
        --max-utilization=0.8 \
        --capacity-scaler=1 \
        --instance-group=ig-www-us \
        --instance-group-zone=us-central1-b \
        --global
    

    添加 ig-www-eu 实例组:

    gcloud compute backend-services add-backend web-backend-service \
        --balancing-mode=UTILIZATION \
        --max-utilization=0.8 \
        --capacity-scaler=1 \
        --instance-group=ig-www-eu \
        --instance-group-zone=europe-west1-b \
        --global
    
  4. 创建网址映射,将传入请求路由到相应的后端服务。在此示例中,通过 --path-rules 标志定义的请求路径映射会根据发送到您网站的每个请求中的网址路径拆分流量。与 --path-rules 列表中条目不匹配的流量将发送到 --default-service flag 中的条目。

    1. 创建网址映射:

      gcloud compute url-maps create web-map \
          --default-service web-backend-service
      
    2. 将路径匹配程序添加到您的网址映射并定义您的请求路径映射:

      gcloud compute url-maps add-path-matcher web-map \
          --default-service web-backend-service \
          --path-matcher-name pathmap \
          --path-rules="/video=video-backend-service,/video/*=video-backend-service"
      
  5. 创建要在 HTTPS 代理中使用的 SSL 证书资源。如需创建 Google 管理的证书,您必须拥有一个网域。如果您没有网域,则可以使用自签名 SSL 证书进行测试。如需了解详情,请参阅 SSL 证书类型

    如果您要使用多个 SSL 证书,则必须为每个证书创建一个 SSL 证书资源。

    如需创建自行管理的 SSL 证书资源,请运行以下命令:

    gcloud compute ssl-certificates create www-ssl-cert \
        --certificate [CRT_FILE_PATH] \
        --private-key [KEY_FILE_PATH]
    

    如需创建 Google 管理的 SSL 证书资源,请运行以下命令:

    gcloud compute ssl-certificates create www-ssl-cert \
      --domains [DOMAIN]
    
  6. 创建一个目标 HTTPS 代理将请求路由到您的网址映射。该代理属于负载均衡器,保存用于 HTTPS 负载均衡的 SSL 证书,因此您还需要在此步骤中加载证书。

    gcloud compute target-https-proxies create https-lb-proxy \
        --url-map web-map --ssl-certificates www-ssl-cert
    
  7. 创建两个全局转发规则(分别用于您创建的两个 IP 地址),将传入请求路由到代理。

    • 对于全球外部应用负载均衡器,请将 gcloud CLI 命令与 load-balancing-scheme=EXTERNAL_MANAGED 结合使用。此设置提供了高级流量管理功能
    • 对于经典版应用负载均衡器,请使用 load-balancing-scheme=EXTERNAL
    gcloud compute forwarding-rules create https-content-rule \
        --load-balancing-scheme=LOAD_BALANCING_SCHEME \
        --network-tier=PREMIUM \
        --address=lb-ipv4-1 \
        --global \
        --target-https-proxy=https-lb-proxy \
        --ports=443
    
    gcloud compute forwarding-rules create https-content-ipv6-rule \
        --load-balancing-scheme=LOAD_BALANCING_SCHEME \
        --network-tier=PREMIUM \
        --address=lb-ipv6-1 \
        --global \
        --target-https-proxy=https-lb-proxy \
        --ports=443
    

创建全局转发规则后,您的配置可能需要花费几分钟时间才能传播到全球范围。

将您的网域连接到负载均衡器

创建负载均衡器后,请记好与负载均衡器关联的 IP 地址,例如 30.90.80.100。如需将您的网域指向负载均衡器,请使用您的网域注册服务创建 A 记录。如果您向 SSL 证书添加了多个网域,则必须为每个网域添加一条 A 记录,所有网域均指向负载均衡器的 IP 地址。例如,如需为 www.example.comexample.com 创建 A 记录,请使用以下命令:

NAME                  TYPE     DATA
www                   A        30.90.80.100
@                     A        30.90.80.100

如果您使用 Cloud DNS 作为 DNS 提供商,请参阅添加、修改和删除记录

将流量发送到您的实例

现在您已经配置了负载均衡服务,接下来可开始将流量发送到转发规则,观察流量进入不同的实例。

Console 和网络浏览器

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

    转到“负载均衡”

  2. 点击 web-map,展开您刚创建的负载均衡器。

  3. 后端部分中,确认实例运行状况良好。运行状况良好列应会填充相应信息,指示每个实例组(共 4 个)中的两个实例运行状况均良好。否则,请先尝试重新加载页面。Google Cloud 控制台可能需要一些时间才能指示实例运行状况良好。如果后端在几分钟后看起来运行状况不佳,请检查防火墙配置以及分配给后端实例的网络标记集。

  4. 记录负载均衡器的 IPv4 和 IPv6 地址:

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

      转到“外部 IP 地址”

    2. 名称下,找到名为 lb-ipv4-1lb-ipv6-1 的地址,然后记录外部地址列中的关联值。

  5. 如果您使用的是 Google 管理的证书,请执行下列操作:

    1. 创建以下 DNS 记录:

    2. 请确认证书资源的状态为“有效”。如需了解详情,请参阅 Google 管理的 SSL 证书资源状态

  6. 转到下列项之一,使用网络浏览器测试负载均衡器:

    • https://IP_ADDRESS,其中 IP_ADDRESS 是负载均衡器的 IPv4 地址。如果浏览器显示证书警告,您必须明确指示浏览器信任该证书。出现此警告的原因是证书通常配置了网域(而非 IP 地址)。

    • https://FQDN,其中 FQDN 是您为其配置了 DNS 以指向负载均衡器 IP 地址的完全限定域名 (FQDN)。如果您使用的是自行管理的自签名 SSL 证书,或者自行管理且由自定义证书授权机构 (CA) 签名的 SSL 证书,则浏览器会显示证书警告,除非您明确将其配置为信任该证书或其 CA。如需详细了解自行管理的证书,请参阅创建私钥和证书

    您的浏览器应会打开一个页面,其中显示提供该页面的实例的名称及其区域(例如 Page on ig-www-us-02 in us-central1-b)。

  7. 在浏览器中,转到以下任一位置:

    • https://IP_ADDRESS/video,其中 IP_ADDRESS 是负载均衡器的 IPv4 地址。

    • https://FQDN/video,其中 FQDN 是您为其配置了 DNS 以指向负载均衡器 IP 地址的 FQDN。

    您的浏览器应会呈现一个页面,其中的内容显示提供该页面的视频实例的名称及其区域(例如 Page on ig-video-us-02 in us-central1-b

gcloud 和使用 curl

  1. 记录负载均衡器的 IPv4 和 IPv6 地址:

    gcloud compute addresses describe lb-ipv4-1 \
    --format="get(address)" \
    --global
    
    gcloud compute addresses describe lb-ipv6-1 \
    --format="get(address)" \
    --global
    
  2. 如果您使用的是 Google 管理的证书,请执行下列操作:

    1. 创建以下 DNS 记录:

    2. 请确认证书资源的状态为“有效”。如需了解详情,请参阅 Google 管理的 SSL 证书资源状态

      gcloud compute ssl-certificates list
      
  3. 使用 curl 命令测试以下网址的响应。将 IP_ADDRESS 替换为负载均衡器的 IPv4 地址:

    curl -k https://IP_ADDRESS
    
    curl -k https://IP_ADDRESS/video/
    
  4. 使用 curl 命令测试以下网址的响应。将 IP_ADDRESS 替换为负载均衡器的 IPv6 地址。对于 IPv6,您必须使用方括号 ([]) 将地址括起来,并使用 -g 标志停用全球传播功能(例如 curl -g -6 "https://[2001:DB8::]/")。

    curl -k -g -6 https://[IP_ADDRESS]
    
    curl -k -g -6 https://[IP_ADDRESS]/video/
    

测试多区域功能

如需模拟位于其他地理位置的用户,您可以连接到其他区域中的某个虚拟机实例,然后从该实例运行 curl 命令,查看请求被转到该区域中最接近它的一个实例。

如果您连接到 ig-www-us-01,则运行 curl 命令会显示请求转到 us-central1 中的实例。输出将如下所示:Page on ig-www-us-02 in us-central1-b

如果您连接到 ig-www-eu-01,则运行 curl 命令会显示请求转到 europe-west1 中的实例。输出将如下所示:Page on ig-www-eu-02 in europe-west1-b

您可以从位于世界各地的客户端系统执行测试。如果某个地区中的后端运行状况不佳或达到容量上限,则 HTTPS 负载均衡器会自动将流量发送到最接近的下一个地区

其他配置选项

本部分对配置示例进行了扩展,以提供一些额外的替代配置选项。所有任务均为可选任务。您可以按任意顺序执行这些任务。

启用会话亲和性

以下过程演示了如何为每个后端服务配置不同类型的会话亲和性:

  • web-backend-service 的客户端 IP 地址会话亲和性
  • video-backend-service 的 HTTP Cookie 会话亲和性

启用客户端 IP 亲和性后,负载均衡器会根据从客户端的 IP 地址创建的哈希,将特定客户端的请求定向到同一后端虚拟机。

启用生成的 Cookie 亲和性后,负载均衡器会针对第一个请求发出一个 Cookie。对于具有相同 Cookie 的每个后续请求,负载均衡器会将请求定向到同一个后端虚拟机或端点。对于外部应用负载均衡器,Cookie 名为 GCLB

控制台

要为 web-backend-service 启用客户端 IP 会话亲和性,请执行以下操作:

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

    进入“负载均衡”

  2. 点击后端

  3. 点击 web-backend-service(您为此示例创建的其中一个后端服务的名称),然后点击修改

  4. 后端服务详情页面上,点击高级配置

  5. 会话亲和性下,从菜单中选择客户端 IP

  6. 点击保存

要为 video-backend-service 启用生成的 Cookie 会话亲和性,请执行以下操作:

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

    进入“负载均衡”

  2. 点击后端

  3. 点击 video-backend-service(您为此示例创建的其中一个后端服务的名称),然后点击修改

  4. 后端服务详情页面上,点击高级配置

  5. 会话亲和性下,从菜单中选择生成的 Cookie

  6. 点击更新

gcloud

使用以下 gcloud 命令更新 web-backend-service 后端服务,并指定客户端 IP 会话亲和性:

gcloud compute backend-services update web-backend-service \
    --session-affinity=CLIENT_IP \
    --global

使用以下 gcloud 命令更新 video-backend-service 后端服务,并指定生成的 Cookie 会话亲和性:

gcloud compute backend-services update video-backend-service \
    --session-affinity=GENERATED_COOKIE \
    --global

API

如需设置客户端 IP 会话亲和性,请向 backendServices/patch 方法发出 PATCH 请求。

PATCH https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/backendServices/web-backend-service
{
  "sessionAffinity": "CLIENT_IP"
}

要设置生成的 Cookie 会话亲和性,请向 backendServices/patch 方法发出 PATCH 请求。

PATCH https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/backendServices/video-backend-service
{
  "sessionAffinity": "GENERATED_COOKIE"
}

从后端虚拟机中移除外部 IP 地址

外部应用负载均衡器使用后端的内部 IP 地址和特殊的负载均衡器路由与后端进行通信。后端实例不需要使用外部 IP 地址即可与负载均衡器进行通信。您可以通过从后端实例中移除外部 IP 地址来提高安全性。

要从后端实例移除外部 IP 地址,请按照这些指示操作。

如果您需要使用 SSH 连接到没有外部 IP 地址的后端实例,请参阅连接到没有外部 IP 地址的实例

清理

完成本教程后,您可以删除自己创建的资源,避免日后再为这些资源付费。如果这些资源是在其自己的项目中创建的,则您可以删除整个项目。否则,您可以逐个删除这些资源。

删除项目

控制台

  1. 在 Google Cloud 控制台中,转到 Projects 页面。

    转到“项目”

  2. 在项目列表中,选择要删除的项目,然后点击删除

  3. 在对话框中输入 PROJECT_ID,然后点击关机以删除项目。

gcloud

运行以下命令,将 PROJECT_ID 替换为您的项目 ID:

gcloud projects delete PROJECT_ID

逐个删除资源

控制台

删除负载均衡器

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

    转到“负载均衡”

  2. 选中 web-map 旁边的复选框。

  3. 点击页面顶部的删除按钮。

  4. 选中其他所有资源(包括后端服务、健康检查和 SSL 证书)旁边的复选框。

  5. 点击删除负载均衡器和所选的资源

删除实例组

  1. 在 Google Cloud 控制台中,转到实例组页面。

    进入“实例组”

  2. 选中顶部名称旁边的复选框,选择所有实例组。

  3. 点击删除

  4. 在确认窗口中,点击 删除

释放外部 IP 地址

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

    转到“外部 IP 地址”

  2. 选中 lb-ipv4-1lb-ipv6-1 旁边的复选框。

  3. 点击释放静态地址

  4. 在确认窗口中,点击 删除

删除防火墙规则

  1. 在 Google Cloud 控制台中,转到防火墙页面。

    转到“防火墙政策”

  2. 选中 fw-allow-health-check-and-proxyfw-allow-ssh 旁边的复选框。

  3. 点击删除

  4. 在确认窗口中,点击 删除

删除虚拟机实例

  1. 在 Google Cloud 控制台中,前往虚拟机实例页面。

    转到虚拟机实例

  2. 选中顶部名称旁边的复选框,选择所有实例。

  3. 点击删除

  4. 在确认窗口中,点击 删除

删除 VPC 网络

  1. 在 Google Cloud 控制台中,转到 VPC 网络页面。

    转到 VPC 网络页面

  2. 点击 lb-network(确认)。

  3. 在网络详细信息页面上,点击删除 VPC 网络

  4. 在确认窗口中,点击 删除

gcloud

删除负载均衡器

如需删除负载均衡器,您需要删除它的每个组件。

  1. 删除转发规则:

    gcloud compute forwarding-rules delete https-content-rule \
        --global
    
    gcloud compute forwarding-rules delete https-content-ipv6-rule \
        --global
    
  2. 删除全局外部 IP 地址:

    gcloud compute addresses delete lb-ipv4-1 \
        --global
    
    gcloud compute addresses delete lb-ipv6-1 \
        --global
    
  3. 删除目标代理:

    gcloud compute target-https-proxies delete https-lb-proxy
    
  4. 删除 SSL 证书:

    gcloud compute ssl-certificates delete www-ssl-cert
    
  5. 删除网址映射:

    gcloud compute url-maps delete web-map
    
  6. 删除后端服务:

    gcloud compute backend-services delete web-backend-service \
        --global
    
    gcloud compute backend-services delete video-backend-service \
        --global
    
  7. 删除健康检查:

    gcloud compute health-checks delete http-basic-check
    

您已删除所有负载均衡器资源。

删除实例组

使用以下名称和区域组合重复运行以下命令,删除 4 个非托管式实例组。依据以下内容替换 INSTANCE_GROUP_NAMEZONE

  • 名称:ig-www-us,区域:us-central1-b
  • 名称:ig-video-us,可用区:us-central1-b
  • 名称:ig-www-eu,可用区:europe-west1-b
  • 名称:ig-video-eu,区域:europe-west1-b
gcloud compute instance-groups unmanaged delete INSTANCE_GROUP_NAME \
   --zone=ZONE

删除虚拟机实例

使用以下名称和区域组合重复运行以下命令,删除 8 个虚拟机。依据以下内容替换 VM_NAMEZONE

  • 名称:ig-www-us-01,区域:us-central1-b
  • 名称:ig-www-us-02,可用区:us-central1-b
  • 名称:ig-video-us-01,可用区:us-central1-b
  • 名称:ig-video-us-02,可用区:us-central1-b
  • 名称:ig-www-eu-01,可用区:europe-west1-b
  • 名称:ig-www-eu-02,可用区:europe-west1-b
  • 名称:ig-video-eu-01,可用区:europe-west1-b
  • 名称:ig-video-eu-02,区域:europe-west1-b
gcloud compute instances delete VM_NAME \
   --zone=ZONE

删除防火墙规则

将两条防火墙规则都删除:

gcloud compute firewall-rules delete fw-allow-health-check-and-proxy
gcloud compute firewall-rules delete fw-allow-ssh

删除 VPC 网络

  1. 删除 us-subnet

    gcloud compute networks subnets delete us-subnet \
    --region=us-central1
    
  2. 删除 eu-subnet

    gcloud compute networks subnets delete eu-subnet \
    --region=europe-west1
    
  3. 删除 VPC 网络:

    gcloud compute networks delete lb-network
    

您已删除在此项目中设置的所有资源。

后续步骤