使用共享 VPC 设置内部 HTTP(S) 负载平衡

本文档介绍了如何在共享 VPC 网络上配置内部 HTTP(S) 负载平衡。

如果您不想使用共享 VPC 网络,请参阅设置内部 HTTP(S) 负载平衡

准备工作

  1. 阅读共享 VPC 概览
  2. 阅读内部 HTTP(S) 负载平衡概览,包括共享 VPC 架构限制部分。

权限

为共享 VPC 设置内部 HTTP(S) 负载平衡器需要管理员进行一些前期设置和预配。完成此操作后,服务项目所有者可以使用管理员预配的资源来部署负载平衡器和后端。

本部分汇总了按照本指南在共享 VPC 网络上设置内部 HTTP(S) 负载平衡器所需的权限。

设置共享 VPC

必须拥有以下角色,才能:

  1. 执行一次性管理任务,例如设置共享 VPC 和启用宿主项目。
  2. 执行管理任务:每次您想要添加新的服务项目时都必须重复执行这些管理任务。这包括关联服务项目、预配和配置网络资源以及向服务项目管理员授予访问权限。

这些任务必须在共享 VPC 宿主项目中执行。我们建议 Shared VPC Admin 也成为共享 VPC 宿主项目的所有者。这将自动授予 Network Admin 和 Security Admin 角色。

任务 所需角色
设置共享 VPC,启用宿主项目并向服务项目管理员授予访问权限 Shared VPC Admin
在共享 VPC 中创建子网并向服务项目管理员授予访问权限 Network Admin
添加和移除防火墙规则 Security Admin

预配子网后,宿主项目所有者必须将宿主项目中的 Network User 角色授予需要使用这些资源的任何人(通常是服务项目管理员或开发者)。

任务 所需角色
使用属于宿主项目的 VPC 和子网 Network User

可以在项目级层或针对单个子网授予此角色。我们建议您针对单个子网授予此角色。如果针对项目授予此角色,则将向您授予权限来访问宿主项目的 VPC 中的所有当前子网和未来子网。

部署和更新内部 HTTP(S) 负载平衡器和后端

服务项目管理员需要服务项目中的以下角色才能创建负载平衡资源和后端。如果您是服务项目的 Owner 或 Editor,则会自动获得这些角色所授予的权限。

授予的服务项目中的角色
任务 所需角色
创建负载平衡器组件 Network Admin
创建实例 Instance Admin
创建和修改 SSL 证书 Security Admin

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

设置概览

如上图所示,此示例在共享 VPC 网络部署上创建内部 HTTP(S) 负载平衡器。

共享 VPC 中的内部 HTTP(S) 负载平衡
共享 VPC 中的内部 HTTP(S) 负载平衡

内部 HTTP(S) 负载平衡器的网络资源(例如代理专用子网和后端实例的子网)是在宿主项目中创建的。后端实例的防火墙规则也是在宿主项目中创建的。

负载平衡器的转发规则、目标代理、网址映射、后端服务和后端实例是在服务项目中创建的。

前提条件

您无需在每次想要创建内部 HTTP(S) 负载平衡器时都执行本部分中的步骤。但是,在继续创建负载平衡器之前,您必须确保可以访问此处所述的资源。

使用宿主项目和服务项目设置共享 VPC

  1. 设置共享 VPC
  2. 启用宿主项目
  3. 关联服务项目

这些说明的其余部分假定您已设置共享 VPC。这包括为您的组织设置 IAM 政策,以及指定宿主项目和服务项目。

在设置共享 VPC 并启用宿主项目和服务项目之前,请勿继续操作。

在宿主项目中配置网络和子网

您需要一个包含两个子网的共享 VPC 网络:一个用于负载平衡器的前端和后端,另一个用于负载平衡器的代理。

本示例使用以下网络、地区和子网:

  • 网络。网络名为 lb-network

  • 负载平衡器前端和后端的子网us-west1 地区中名为 lb-frontend-and-backend-subnet 的子网使用 10.1.2.0/24 作为其主要 IP 地址范围。

  • 代理子网us-west1 地区中名为 proxy-only-subnet 的子网使用 10.129.0.0/23 作为其主要 IP 地址范围。

为负载平衡器的前端和后端配置子网

您无需在每次想要创建内部 HTTP(S) 负载平衡器时都执行此步骤。您只需确保服务项目可以访问共享 VPC 网络中的子网(以及代理专用子网)。

Cloud Console

  1. 在 Google Cloud Console 中,转到 VPC 网络页面。
    转到“VPC 网络”页面
  2. 点击创建 VPC 网络
  3. 对于名称,请输入 lb-network
  4. 子网部分中执行以下操作:
    • 子网创建模式设置为自定义
    • 新子网部分中,输入以下信息:
      • 名称lb-frontend-and-backend-subnet
      • 地区us-west1
      • IP 地址范围10.1.2.0/24
    • 点击完成
  5. 点击创建

gcloud

  1. 使用 gcloud compute networks create 命令创建 VPC 网络:

    gcloud compute networks create lb-network --subnet-mode=custom
    
  2. us-west1 地区的 lb-network 网络中创建子网:

    gcloud compute networks subnets create lb-frontend-and-backend-subnet \
        --network=lb-network \
        --range=10.1.2.0/24 \
        --region=us-west1
    

配置代理专用子网

代理专用子网适用于 lb-network VPC 网络中 us-west1 地区内的所有内部 HTTP(S) 负载平衡器。在每个网络中,每个地区只能有一个代理专用子网处于活跃状态。

如果此网络中的 us-west1 地区已为内部 HTTP(S) 负载平衡器预留代理专用子网,请勿执行此步骤。

Cloud Console

  1. 在 Cloud Console 中,转到 VPC 网络页面。
    转到“VPC 网络”页面
  2. 点击共享 VPC 网络的名称:lb-network
  3. 点击添加子网
  4. 对于名称,请输入 proxy-only-subnet
  5. 对于地区,请选择 us-west1
  6. 预留内部 HTTP(S) 负载平衡设置为打开
  7. 对于 IP 地址范围,请输入 10.129.0.0/23
  8. 点击添加

gcloud

使用 gcloud compute networks subnets create 命令创建代理专用子网。

gcloud compute networks subnets create proxy-only-subnet \
  --purpose=INTERNAL_HTTPS_LOAD_BALANCER \
  --role=ACTIVE \
  --region=us-west1 \
  --network=lb-network \
  --range=10.129.0.0/23

向服务项目管理员授予对后端子网的访问权限

服务项目管理员需要访问 lb-frontend-and-backend-subnet 子网,以便他们可以为负载平衡器选择前端 IP 地址并预配负载平衡器的后端。

Shared VPC Admin 必须向服务项目管理员(或是将部署使用该子网的资源和后端的开发者)授予对后端子网的访问权限。有关说明,请参阅某些子网的服务项目管理员

在宿主项目中配置防火墙规则

您无需在每次想要创建内部 HTTP(S) 负载平衡器时都执行此步骤。这是一次性步骤,必须由宿主项目管理员在宿主项目中执行。

此示例使用以下防火墙规则:

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

  • fw-allow-health-check。适用于负载平衡实例的入站流量规则,该规则允许来自 Google Cloud 运行状况检查系统(130.211.0.0/2235.191.0.0/16)的所有 TCP 流量。此示例使用目标标记 load-balanced-backend 来标识它应该应用到的实例。

  • fw-allow-proxies。适用于负载平衡实例的入站流量规则,该规则允许从内部 HTTP(S) 负载平衡器的代管式代理发送到端口 804438080 的 TCP 流量。此示例使用目标标记 load-balanced-backend 来标识它应该应用到的实例。

如果不使用上述防火墙规则,则默认拒绝入站流量规则会阻止传入后端实例的流量。

Cloud Console

  1. 在 Cloud Console 中,转到防火墙规则页面。
    转到“防火墙规则”页面
  2. 点击创建防火墙规则,以创建允许传入 SSH 连接的规则:
    • 名称fw-allow-ssh
    • 网络lb-network
    • 流量方向:入站
    • 对匹配项执行的操作:允许
    • 目标:指定的目标标记
    • 目标标记allow-ssh
    • 来源过滤条件IP ranges
    • 来源 IP 地址范围0.0.0.0/0
    • 协议和端口
      • 选择指定的协议和端口
      • 勾选 tcp 并输入端口号 22
  3. 点击创建
  4. 再次点击创建防火墙规则,创建允许 Google Cloud 运行状况检查的规则:
    • 名称fw-allow-health-check
    • 网络lb-network
    • 流量方向:入站
    • 对匹配项执行的操作:允许
    • 目标:指定的目标标记
    • 目标标记load-balanced-backend
    • 来源过滤条件IP ranges
    • 来源 IP 地址范围130.211.0.0/2235.191.0.0/16
    • 协议和端口
      • 选择指定的协议和端口
      • 勾选 tcp,然后输入 80
        最佳做法是将此规则限制为仅使用与运行状况检查所使用的协议和端口匹配的协议和端口。如果您使用 tcp:80 协议和端口,则 Google Cloud 可以使用 HTTP 通过端口 80 联系您的虚拟机,但无法使用 HTTPS 通过端口 443 联系这些虚拟机。
  5. 点击创建
  6. 第三次点击创建防火墙规则,以创建允许负载平衡器的代理服务器连接后端的规则:
    • 名称fw-allow-proxies
    • 网络lb-network
    • 流量方向:入站
    • 对匹配项执行的操作:允许
    • 目标:指定的目标标记
    • 目标标记load-balanced-backend
    • 来源过滤条件IP ranges
    • 来源 IP 地址范围10.129.0.0/23
    • 协议和端口
      • 选择指定的协议和端口
      • 勾选 tcp 并输入端口号 80, 443, 8080
  7. 点击创建

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 规则以允许 Google Cloud 运行状况检查。本示例允许来自运行状况检查探测工具的所有 TCP 流量;但是,您可以根据自己的需求配置较小范围的端口集。

    gcloud compute firewall-rules create fw-allow-health-check \
        --network=lb-network \
        --action=allow \
        --direction=ingress \
        --source-ranges=130.211.0.0/22,35.191.0.0/16 \
        --target-tags=load-balanced-backend \
        --rules=tcp
    
  3. 创建 fw-allow-proxies 规则以允许内部 HTTP(S) 负载平衡器的代理连接到您的后端。

    gcloud compute firewall-rules create fw-allow-proxies \
      --network=lb-network \
      --action=allow \
      --direction=ingress \
      --source-ranges=10.129.0.0/23 \
      --target-tags=load-balanced-backend \
      --rules=tcp:80,tcp:443,tcp:8080
    

在服务项目中配置内部 HTTP(S) 负载平衡器

本部分介绍如何设置负载平衡器和后端。这些步骤应由服务项目管理员(或在服务项目中操作的开发者)执行,无需宿主项目管理员参与。本部分中的步骤与设置内部 HTTP(S) 负载平衡的标准步骤大致类似。

本部分介绍了针对在 Compute Engine 虚拟机上运行的服务或 Google Kubernetes Engine 集群中的 pod 上运行的服务,设置负载平衡所需的配置。客户端可连接到您在负载平衡器的转发规则中配置的 IP 地址和端口。当客户端向此 IP 地址和端口发送流量时,系统会根据内部 HTTP(S) 负载平衡器的网址映射,将其请求转发到后端实例(Compute Engine 虚拟机或 GKE pod)。

此页面上的示例明确设置内部 HTTP(S) 负载平衡器转发规则的预留内部 IP 地址,而不是允许分配临时内部 IP 地址。我们建议的最佳做法是,为转发规则预留 IP 地址。

创建代管实例组

本部分介绍如何创建模板和代管实例组。这个代管实例组提供运行示例内部 HTTP(S) 负载平衡器的后端服务器的虚拟机实例。来自客户端的流量在经过负载平衡处理后传送到这些后端服务器。出于演示目的,后端会传送其自己的主机名。

Cloud Console

  1. 在 Cloud Console 中,转到实例组页面。
    转到“实例组”页面
  2. 点击创建实例组
  3. 选择左侧的新建代管实例组
  4. 对于名称,请输入 l7-ilb-backend-example
  5. 位置下方,选择单个区域
  6. 对于地区,请选择 us-west1
  7. 对于区域,请选择 us-west1-a
  8. 实例模板下,选择创建新的实例模板

    1. 对于名称,请输入 l7-ilb-backend-template
    2. 确保启动磁盘已设置为 Debian 映像,例如 Debian GNU/Linux 9 (stretch)。本文中的说明使用仅 Debian 支持的命令,例如 apt-get。如果您需要更改启动磁盘,请点击更改
      1. 操作系统下,选择 Debian
      2. 版本下,选择一个可用的 Debian 映像,例如 Debian GNU/Linux 9 (stretch)
      3. 点击选择
    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. 网络下,选择与我共享的网络(通过宿主项目:HOST_PROJECT_ID

    5. 选择 lb-network 作为网络,对于子网,选择 lb-frontend-and-backend-subnet

    6. 添加以下网络标记:allow-sshload-balanced-backend

    7. 点击保存并继续

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

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

    • 不自动扩缩
    • 实例数下,输入 2

    (可选)在界面的自动扩缩部分中,您可以将实例组配置为根据实例 CPU 使用情况自动添加或移除实例

  10. 点击创建以创建新实例组。

gcloud

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

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

    gcloud compute instance-templates create l7-ilb-backend-template \
    --region=us-west1 \
    --network=projects/HOST_PROJECT_ID/global/networks/lb-network \
    --subnet=projects/HOST_PROJECT_ID/regions/us-west1/subnetworks/lb-frontend-and-backend-subnet \
    --tags=allow-ssh,load-balanced-backend \
    --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' \
    --project SERVICE_PROJECT_ID
    
  2. 使用 gcloud compute instance-groups managed create 命令在该区域中创建一个代管实例组。

    gcloud compute instance-groups managed create l7-ilb-backend-example \
        --zone=us-west1-a \
        --size=2 \
        --template=l7-ilb-backend-template \
        --project SERVICE_PROJECT_ID
    

配置负载平衡器

下面的示例介绍了如何创建以下内部 HTTP(S) 负载平衡器资源:

  • HTTP 运行状况检查
  • 将代管实例组用作后端的后端服务
  • 网址映射
  • SSL 证书(仅 HTTPS 必须提供)
  • 目标代理
  • 转发规则

代理可用性

根据使用同一共享 VPC 网络的服务项目数量,较之每个 Google Cloud 项目托管自己的网络所在的网络部署模型,您可能会更快地达到配额或限制

例如,有时 Google Cloud 地区没有足够的代理容量来容纳新的内部 HTTP(S) 负载平衡器。如果发生这种情况,Cloud Console 会在您创建负载平衡器时提供一条代理可用性警告消息。如需解决此问题,您可以执行以下任一操作:

  • 等待容量问题的解决。
  • 请联系您的 Google Cloud 销售团队来提高这些限额。

Cloud Console

选择负载平衡器类型

  1. 在 Cloud Console 中,转到负载平衡页面。
    转到“负载平衡”页面
  2. HTTP(S) 负载平衡下,点击开始配置
  3. 选择“仅在我的虚拟机之间”。此设置表示负载平衡器是内部的。
  4. 点击继续

准备负载平衡器

  1. 对于负载平衡器的名称,请输入 l7-ilb-shared-vpc
  2. 对于地区,请选择 us-west1
  3. 对于网络,请选择与我共享的网络(通过宿主项目:HOST_PROJECT_ID
    1. 从下拉列表中选择 lb-network
      如果您看到共享 VPC 网络中需要代理专用子网警告,请确认宿主项目管理员是否已在 lb-network 共享 VPC 网络中的 us-west1 地区创建 proxy-only-subnet。即使您无权查看此页面上的代理专用子网,负载平衡器创建也会成功。
  4. 不关闭窗口继续操作。

配置后端服务

  1. 点击后端配置
  2. 创建或选择后端服务菜单中,选择创建后端服务
  3. 将后端服务的名称设置为 l7-ilb-backend-service
  4. 后端类型设置为实例组
  5. 新后端部分:
    1. 实例组设置为 l7-ilb-backend-example
    2. 端口号设置为 80
    3. 平衡模式设置为利用率
    4. 点击完成
  6. 运行状况检查部分,使用以下参数选择创建运行状况检查
    1. 名称l7-ilb-basic-check
    2. 协议HTTP
    3. 端口80
  7. 点击保存并继续
  8. 点击创建

配置网址映射

点击路由规则。确保 l7-ilb-backend-service 是任何不匹配的主机和任何不匹配的路径的唯一后端服务。

如需了解流量管理,请参阅设置流量管理

配置前端

对于 HTTP

  1. 点击前端配置
  2. 点击添加前端 IP 和端口
  3. 名称设置为 l7-ilb-forwarding-rule
  4. 协议设置为 HTTP
  5. 子网设置为 lb-frontend-and-backend-subnet
    请勿为前端选择代理专用子网,即使它是下拉列表中的选项也是如此。
  6. 内部 IP 下,选择预留静态内部 IP 地址
  7. 在显示的面板中提供以下详细信息:
    1. 名称l7-ilb-ip
    2. 静态 IP 地址部分,选择让我选择
    3. 自定义 IP 地址部分,输入 10.1.2.99
    4. 点击保留
  8. 端口设置为 80
  9. 点击完成

对于 HTTPS

如果您在客户端和负载平衡器之间使用 HTTPS,则需要一个或多个 SSL 证书资源来配置代理。如需了解如何创建 SSL 证书资源,请参阅 SSL 证书。内部 HTTP(S) 负载平衡器目前不支持由 Google 管理的证书。

  1. 点击前端配置
  2. 点击添加前端 IP 和端口
  3. 名称字段中,输入 l7-ilb-forwarding-rule
  4. 协议字段中,选择 HTTPS (includes HTTP/2)
  5. 子网设置为 lb-frontend-and-backend-subnet
    请勿为前端选择代理专用子网,即使它是下拉列表中的选项也是如此。
  6. 内部 IP 下,选择预留静态内部 IP 地址
  7. 在显示的面板中提供以下详细信息:
    1. 名称l7-ilb-ip
    2. 静态 IP 地址部分,选择让我选择
    3. 自定义 IP 地址部分,输入 10.1.2.99
    4. 点击保留
  8. 确保将端口设置为 443,以允许 HTTPS 流量。
  9. 点击证书下拉列表。
    1. 如果您已经拥有要用作主要 SSL 证书的自行管理的 SSL 证书资源,请从下拉菜单中选择该证书。
    2. 否则,请选择创建新证书
      1. 填写名称 l7-ilb-cert
      2. 在相应字段中上传您的 PEM 格式的文件:
        • 公钥证书
        • 证书链
        • 私钥
      3. 点击创建
  10. 如需添加除了主要 SSL 证书资源之外的其他证书资源,请执行以下操作:
    1. 点击添加证书
    2. 证书列表中选择一个证书,或点击创建新证书并按照上述说明操作。
  11. 点击完成

检查并最终确定配置

点击创建

gcloud

  1. 使用 gcloud compute health-checks create http 命令定义 HTTP 运行状况检查。

    gcloud compute health-checks create http l7-ilb-basic-check \
       --region=us-west1 \
       --use-serving-port \
       --project SERVICE_PROJECT_ID
    
  2. 使用 gcloud compute backend-services create 命令定义后端服务。

    gcloud compute backend-services create l7-ilb-backend-service \
      --load-balancing-scheme=INTERNAL_MANAGED \
      --protocol=HTTP \
      --health-checks=l7-ilb-basic-check \
      --health-checks-region=us-west1 \
      --region=us-west1 \
      --project SERVICE_PROJECT_ID
    
  3. 使用 gcloud compute backend-services add-backend 命令将后端添加到后端服务。

    gcloud compute backend-services add-backend l7-ilb-backend-service \
      --balancing-mode=UTILIZATION \
      --instance-group=l7-ilb-backend-example \
      --instance-group-zone=us-west1-a \
      --region=us-west1 \
      --project SERVICE_PROJECT_ID
    
  4. 使用 gcloud compute url-maps create 命令创建网址映射。

    gcloud compute url-maps create l7-ilb-map \
      --default-service=l7-ilb-backend-service \
      --region=us-west1 \
      --project SERVICE_PROJECT_ID
    
  5. 创建目标代理。

    对于 HTTP

    对于内部 HTTP 负载平衡器,使用 gcloud compute target-http-proxies create 命令创建目标代理。

    gcloud compute target-http-proxies create l7-ilb-proxy \
      --url-map=l7-ilb-map \
      --url-map-region=us-west1 \
      --region=us-west1 \
      --project SERVICE_PROJECT_ID
    

    对于 HTTPS

    如需了解如何创建 SSL 证书资源,请参阅 SSL 证书。内部 HTTP(S) 负载平衡器目前不支持由 Google 管理的证书。

    将文件路径分配给变量名称。

    export LB_CERT=path to PEM-formatted file
    
    export LB_PRIVATE_KEY=path to PEM-formatted file
    

    使用 gcloud compute ssl-certificates create 命令创建地区 SSL 证书。

    gcloud compute ssl-certificates create l7-ilb-cert \
      --certificate=$LB_CERT \
      --private-key=$LB_PRIVATE_KEY \
      --region=us-west1
    

    使用地区 SSL 证书通过 gcloud compute target-https-proxies create 命令创建目标代理。

    gcloud compute target-https-proxies create l7-ilb-proxy \
      --url-map=l7-ilb-map \
      --region=us-west1 \
      --ssl-certificates=l7-ilb-cert \
      --project SERVICE_PROJECT_ID
    
  6. 创建转发规则。

    对于自定义网络,必须在转发规则中引用子网。

    对于转发规则的 IP 地址,请使用 lb-frontend-and-backend-subnet。如果您尝试使用代理专用子网,则无法创建转发规则。

    对于 HTTP

    使用带有正确标志的 gcloud compute forwarding-rules create 命令。

    gcloud compute forwarding-rules create l7-ilb-forwarding-rule \
      --load-balancing-scheme=INTERNAL_MANAGED \
      --network=projects/HOST_PROJECT_ID/global/networks/lb-network \
      --subnet=projects/HOST_PROJECT_ID/regions/us-west1/subnetworks/lb-frontend-and-backend-subnet \
      --address=10.1.2.99 \
      --ports=80 \
      --region=us-west1 \
      --target-http-proxy=l7-ilb-proxy \
      --target-http-proxy-region=us-west1 \
      --project SERVICE_PROJECT_ID
    

    对于 HTTPS

    使用带有正确标志的 gcloud compute forwarding-rules create 命令创建转发规则。

    gcloud compute forwarding-rules create l7-ilb-forwarding-rule \
      --load-balancing-scheme=INTERNAL_MANAGED \
      --network=projects/HOST_PROJECT_ID/global/networks/lb-network \
      --subnet=projects/HOST_PROJECT_ID/regions/us-west1/subnetworks/lb-frontend-and-backend-subnet \
      --address=10.1.2.99 \
      --ports=443 \
      --region=us-west1 \
      --target-https-proxy=l7-ilb-proxy \
      --target-https-proxy-region=us-west1 \
      --project SERVICE_PROJECT_ID
    

测试

创建虚拟机实例以测试连接性

客户端可位于宿主项目或任何连接的服务项目中。在此示例中,您将通过在服务项目中部署客户端虚拟机来测试负载平衡器是否正常运行。客户端必须使用同一共享 VPC 网络,而且与负载平衡器位于同一个地区。

gcloud compute instances create l7-ilb-client-us-west1-a \
    --image-family=debian-9 \
    --image-project=debian-cloud \
    --subnet=projects/HOST_PROJECT_ID/regions/us-west1/subnetworks/lb-frontend-and-backend-subnet \
    --zone=us-west1-a \
    --tags=allow-ssh \
    --project SERVICE_PROJECT_ID

测试负载平衡器

登录您刚刚创建的实例,通过测试确定可以通过内部 HTTP(S) 负载平衡器的转发规则 IP 地址访问后端的 HTTP(S) 服务,并且流量正在后端实例之间进行负载平衡。

通过 SSH 连接到每个客户端实例

gcloud compute ssh l7-ilb-client-us-west1-a \
    --zone=us-west1-a

验证 IP 是否提供其主机名

curl 10.1.2.99

对于 HTTPS 测试,请将 curl 替换为:

curl -k -s 'https//:10.1.2.99:443'

-k 标志会导致 curl 跳过证书验证。

运行 100 个请求并确认它们已进行负载平衡

对于 HTTP

{
  RESULTS=
  for i in {1..100}
  do
      RESULTS="$RESULTS:$(curl --silent 10.1.2.99)"
  done
  echo "***"
  echo "*** Results of load-balancing to 10.1.2.99: "
  echo "***"
  echo "$RESULTS" | tr ':' '\n' | grep -Ev "^$" | sort | uniq -c
  echo
}

对于 HTTPS

{
  RESULTS=
  for i in {1..100}
  do
      RESULTS="$RESULTS:$(curl -k -s 'https://:10.1.2.99:443')"
  done
  echo "***"
  echo "*** Results of load-balancing to 10.1.2.99: "
  echo "***"
  echo "$RESULTS" | tr ':' '\n' | grep -Ev "^$" | sort | uniq -c
  echo
}

后续步骤