设置 TCP 代理负载平衡

Google Cloud TCP 代理负载平衡可让您为世界各地的所有用户使用同一个 IP 地址。TCP 代理负载平衡可以自动将流量路由到最靠近用户的实例。

本指南介绍了如何设置 TCP 代理负载平衡。 在开始之前,请参阅 TCP 代理负载平衡概览,了解 TCP 代理负载平衡的工作原理。

概览

此示例演示了如何为存在于两个区域(us-central1us-east1)中的一项简单服务设置全局 TCP 代理负载平衡。在本示例中,服务是一组配置为在端口 110 做出响应的 Apache 服务器。许多浏览器都不允许端口 110,因此我们在测试部分使用 curl

在此示例中,您可以配置以下内容:

  1. 分布在两个区域的四个实例
  2. 包含实例的实例组
  3. 用于验证实例运行状况的运行状况检查
  4. 后端服务,用于监控实例并防止实例超出配置的使用量
  5. 目标 TCP 代理
  6. 外部静态 IPv4 地址和用于将用户流量发送到代理的转发规则
  7. 外部静态 IPv6 地址和用于将用户流量发送到代理的转发规则
  8. 允许流量从负载平衡器和运行状况检查器访问实例的防火墙规则

配置负载平衡器后,请测试该配置。

权限

若要按照本指南中的说明进行操作,您必须能够创建实例以及修改项目中的网络。因此,您必须具有项目所有者或编辑者身份,或者必须拥有以下所有 Compute Engine IAM 角色

任务 所需角色
创建网络、子网和负载平衡器组件 Network Admin
添加和移除防火墙规则 Security Admin
创建实例 计算实例管理员

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

配置实例和实例组

本部分说明如何创建简单的实例组、如何将实例添加到实例组,以及如何将这些实例添加到具有运行状况检查功能的后端服务。 生产系统通常会使用基于实例模板托管实例组,但此配置对初始测试更为快捷。

配置实例

为了进行测试,请在四个实例(分别位于两个实例组中,每个实例组中有两个实例)上安装 Apache。TCP 代理负载平衡一般不用于处理 HTTP 流量,但 Apache 是一种常用软件,易于设置测试。

在此示例中,创建的实例具有 tcp-lb 标记。防火墙规则稍后会使用此标记。

控制台


创建实例

  1. 转到 Google Cloud Console 中的“虚拟机实例”页面。
    转到“虚拟机实例”页面
  2. 点击创建实例
  3. 名称设置为 ig-us-central1-1
  4. 区域设置为 us-central1
  5. 地区设置为 us-central1-b
  6. 点击管理、安全、磁盘、网络、单独租用以显示高级设置。
  7. 管理下,点击网络,然后使用 tcp-lb 填充标记字段。
  8. 点击管理,然后在启动脚本字段中输入以下脚本:
    sudo apt-get update
    sudo apt-get install apache2 -y
    sudo sed -i '/Listen 80/c\Listen 110' /etc/apache2/ports.conf
    sudo service apache2 restart
    echo '<!doctype html><html><body><h1>ig-us-central1-1</h1></body></html>' | sudo tee /var/www/html/index.html
  9. 其余字段保留默认值。
  10. 点击创建
  11. 使用相同的设置创建 ig-us-central1-2,但需在启动脚本字段中添加以下脚本:
    sudo apt-get update
    sudo apt-get install apache2 -y
    sudo sed -i '/Listen 80/c\Listen 110' /etc/apache2/ports.conf
    sudo service apache2 restart
    echo '<!doctype html><html><body><h1>ig-us-central1-2</h1></body></html>' | sudo tee /var/www/html/index.html
  12. 使用相同设置创建 ig-us-east1-1,但需将区域设置为 us-east1,并将地区设置为 us-east1-b。在启动脚本字段中输入以下脚本:
    sudo apt-get update
    sudo apt-get install apache2 -y
    sudo sed -i '/Listen 80/c\Listen 110' /etc/apache2/ports.conf
    sudo service apache2 restart
    echo '<!doctype html><html><body><h1>ig-us-east1-1</h1></body></html>' | sudo tee /var/www/html/index.html
  13. 使用相同设置创建 ig-us-east1-2,但需将区域设置为 us-east1,并将地区设置为 us-east1-b。在启动脚本字段中输入以下脚本:
    sudo apt-get update
    sudo apt-get install apache2 -y
    sudo sed -i '/Listen 80/c\Listen 110' /etc/apache2/ports.conf
    sudo service apache2 restart
    echo '<!doctype html><html><body><h1>ig-us-east1-2</h1></body></html>' | sudo tee /var/www/html/index.html

gcloud


  1. us-central1-b 地区中创建 ig-us-central1-1

    gcloud compute instances create ig-us-central1-1 \
        --image-family debian-9 \
        --image-project debian-cloud \
        --tags tcp-lb \
        --zone us-central1-b \
        --metadata startup-script="#! /bin/bash
          sudo apt-get update
          sudo apt-get install apache2 -y
          sudo sed -i '/Listen 80/c\Listen 110' /etc/apache2/ports.conf
          sudo service apache2 restart
          echo '<!doctype html><html><body><h1>ig-us-central1-1</h1></body></html>' | tee /var/www/html/index.html
          EOF"
    
    Created [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/us-central1-b/instances/ig-us-central1-1].
    NAME             ZONE          MACHINE_TYPE  PREEMPTIBLE INTERNAL_IP EXTERNAL_IP    STATUS
    ig-us-central1-1 us-central1-b n1-standard-1             10.240.0.8  23.251.150.133 RUNNING
    
  2. us-central1-b 地区中创建 ig-us-central1-2

    gcloud compute instances create ig-us-central1-2 \
        --image-family debian-9 \
        --image-project debian-cloud \
        --tags tcp-lb \
        --zone us-central1-b \
        --metadata startup-script="#! /bin/bash
          sudo apt-get update
          sudo apt-get install apache2 -y
          sudo sed -i '/Listen 80/c\Listen 110' /etc/apache2/ports.conf
          sudo service apache2 restart
          echo '<!doctype html><html><body><h1>ig-us-central1-2</h1></body></html>' | tee /var/www/html/index.html
          EOF"
    
    Created [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/us-central1-b/instances/ig-us-central1-2].
    NAME             ZONE          MACHINE_TYPE  PREEMPTIBLE INTERNAL_IP EXTERNAL_IP    STATUS
    ig-us-central1-2 us-central1-b n1-standard-1             10.240.0.11 23.251.148.160 RUNNING
    
  3. us-east1-b 地区中创建 ig-us-east1-1

    gcloud compute instances create ig-us-east1-1 \
        --image-family debian-9 \
        --image-project debian-cloud \
        --tags tcp-lb \
        --zone us-east1-b \
        --metadata startup-script="#! /bin/bash
          sudo apt-get update
          sudo apt-get install apache2 -y
          sudo sed -i '/Listen 80/c\Listen 110' /etc/apache2/ports.conf
          sudo service apache2 restart
          echo '<!doctype html><html><body><h1>ig-us-east1-1</h1></body></html>' | tee /var/www/html/index.html
              EOF"
    
    Created [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/us-east1-b/instances/ig-us-east1-1].
    NAME          ZONE       MACHINE_TYPE  PREEMPTIBLE INTERNAL_IP EXTERNAL_IP    STATUS
    ig-us-east1-1 us-east1-b n1-standard-1             10.240.0.12 104.196.31.214 RUNNING
    
  4. us-east1-b 地区中创建 ig-us-east1-2

    gcloud compute instances create ig-us-east1-2 \
        --image-family debian-9 \
        --image-project debian-cloud \
        --tags tcp-lb \
        --zone us-east1-b \
        --metadata startup-script="#! /bin/bash
          sudo apt-get update
          sudo apt-get install apache2 -y
          sudo sed -i '/Listen 80/c\Listen 110' /etc/apache2/ports.conf
          sudo service apache2 restart
          echo '<!doctype html><html><body><h1>ig-us-east1-2</h1></body></html>' | tee /var/www/html/index.html
          EOF"
    
    Created [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/us-east1-b/instances/ig-us-east1-2].
    NAME          ZONE       MACHINE_TYPE  PREEMPTIBLE INTERNAL_IP EXTERNAL_IP    STATUS
    ig-us-east1-2 us-east1-b n1-standard-1             10.240.0.13 104.196.25.101 RUNNING
    

为每个地区创建一个实例组并添加实例

控制台


  1. 转到 Cloud Console 中的实例组页面。
    转到“实例组”页面
  2. 点击创建实例组
  3. 名称设置为 us-ig1
  4. 地区设置为 us-central1-b
  5. 点击指定端口名称映射。 负载平衡器通过一个已命名端口将流量发送到实例组。创建一个已命名端口来将传入流量映射到特定的端口号。
    1. 端口名称设置为 tcp110
    2. 端口号设置为 110
  6. 组类型下,选择非托管实例组
  7. 虚拟机实例下,选择 ig-us-central1-1ig-us-central1-2
  8. 其他设置保持不变。
  9. 点击创建
  10. 重复上述步骤,但设置以下值:
    • 名称us-ig2
    • 区域us-east1
    • 地区us-east1-b
    • 端口名称tcp110
    • 端口号110
    • 实例ig-us-east1-1ig-us-east1-2

gcloud


  1. 创建 us-ig1 实例组。

    gcloud compute instance-groups unmanaged create us-ig1 \
        --zone us-central1-b
    
    Created [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/us-central1-b/instanceGroups/us-ig1].
    NAME    LOCATION       SCOPE  NETWORK  MANAGED  INSTANCES
    us-ig1  us-central1-b  zone                     0
    
  2. 为实例组创建已命名的端口。

    gcloud compute instance-groups set-named-ports us-ig1 \
        --named-ports tcp110:110 \
        --zone us-central1-b
    
    Updated [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/us-east1-b/instanceGroups/us-ig2].
  3. ig-us-central1-1ig-us-central1-2 添加到 us-ig1

    gcloud compute instance-groups unmanaged add-instances us-ig1 \
        --instances ig-us-central1-1,ig-us-central1-2 \
        --zone us-central1-b
    
    Updated [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/us-central1-b/instanceGroups/us-ig1].
  4. 创建 us-ig2 实例组。

    gcloud compute instance-groups unmanaged create us-ig2 \
        --zone us-east1-b
    
    Created [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/us-east1-b/instanceGroups/us-ig2].
    NAME    LOCATION    SCOPE  NETWORK  MANAGED  INSTANCES
    us-ig2  us-east1-b  zone                     0
    
  5. 为实例组创建已命名的端口。

    gcloud compute instance-groups set-named-ports us-ig2 \
        --named-ports tcp110:110 \
        --zone us-east1-b
    
    Updated [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/us-east1-b/instanceGroups/us-ig2].
  6. ig-us-east1-1ig-us-east1-2 添加到 us-ig2

    gcloud compute instance-groups unmanaged add-instances us-ig2 \
        --instances ig-us-east1-1,ig-us-east1-2 \
        --zone us-east1-b
    
    Updated [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/us-east1-b/instanceGroups/us-ig2].

现在,每个区域都有一个实例组。每个实例组都有两个虚拟机实例。

配置负载平衡器

控制台


创建负载平衡器并配置后端服务

  1. 转到 Google Cloud Console 中的“负载平衡”页面。
    转到“负载平衡”页面
  2. 点击创建负载平衡器
  3. 启动负载平衡器配置:
    1. TCP 负载平衡下,点击开始配置
    2. 面向互联网或仅限内部设置为从互联网到我的虚拟机
    3. 多个区域或单个区域设置为多个区域
    4. 点击继续
    5. 名称设置为 my-tcp-lb
    6. 点击后端配置
    7. 后端类型下,选择实例组
    8. 协议下,选择 TCP
  4. 配置第一个后端:
    1. 新后端下,选择实例组 us-ig1
    2. 保留其余的默认值。
  5. 配置第二个后端:
    1. 点击添加后端
    2. 选择实例组 us-ig2
    3. 端口号下,删除 80 并添加 110
  6. 配置运行状况检查:
    1. 运行状况检查中,选择创建运行状况检查
    2. 将运行状况检查的名称设置为 my-tcp-health-check
    3. 协议下,选择 TCP
    4. 端口设置为 110
  7. 保留其余的默认值。
  8. 点击保存并继续
  9. 在 Google Cloud Console 中,验证后端配置旁边是否有复选标记。如果未完成,请仔细检查您是否已完成所有步骤。

配置前端服务

  1. 点击前端配置
  2. 添加第一条转发规则:
    1. 输入 my-tcp-lb-forwarding-rule 作为名称
    2. 协议下,选择 TCP
    3. IP 地址下,选择创建 IP 地址
      1. 输入 tcp-lb-static-ip 作为名称
      2. 点击保留
    4. 端口设置为 110
    5. (可选)在代理协议下,选择 On。如需了解详情,请参阅代理协议
    6. 点击完成
  3. 添加第二个转发规则:
    1. 点击添加前端 IP 和端口
    2. 输入 my-tcp-lb-ipv6-forwarding-rule 作为名称
    3. 协议下,选择 TCP
    4. IP 版本设置为 IPv6
    5. IP 地址下,点击创建 IP 地址
      1. 输入 tcp-lb-ipv6-static-ip 作为名称。
      2. 点击保留
    6. 端口设置为 110
    7. (可选)在代理协议下,选择 On
    8. 点击完成
  4. 在 Google Cloud Console 中,验证前端配置旁边是否有复选标记。如果没有,请仔细检查是否完成了上述所有步骤。

检查并最终确定

  1. 点击检查并最终确认
  2. 仔细检查您的设置。
  3. 点击创建

gcloud


创建运行状况检查

gcloud compute health-checks create tcp my-tcp-health-check --port 110
Created [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/healthChecks/my-tcp-health-check].
NAME                PROTOCOL
my-tcp-health-check TCP

创建后端服务

gcloud compute backend-services create my-tcp-lb \
    --global-health-checks \
    --global \
    --protocol TCP \
    --health-checks my-tcp-health-check \
    --timeout 5m \
    --port-name tcp110
Created [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/backendServices/my-tcp-lb].
NAME      BACKENDS PROTOCOL
my-tcp-lb          TCP

或者,您可以使用 --protocol SSL 配置从负载平衡器到实例之间的加密通信。

将实例组添加到后端服务

gcloud compute backend-services add-backend my-tcp-lb \
    --global \
    --instance-group us-ig1 \
    --instance-group-zone us-central1-b \
    --balancing-mode UTILIZATION \
    --max-utilization 0.8
Updated [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/backendServices/my-tcp-lb].
gcloud compute backend-services add-backend my-tcp-lb \
    --global \
    --instance-group us-ig2 \
    --instance-group-zone us-east1-b \
    --balancing-mode UTILIZATION \
    --max-utilization 0.8
Updated [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/backendServices/my-tcp-lb].

配置目标 TCP 代理

如果您要开启代理标头,请将其设置为 PROXY_V1,而不是 none

gcloud compute target-tcp-proxies create my-tcp-lb-target-proxy \
    --backend-service my-tcp-lb \
    --proxy-header NONE
Created [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/targetTcpProxies/my-tcp-lb-target-proxy].
NAME                   PROXY_HEADER SERVICE
my-tcp-lb-target-proxy NONE         my-tcp-lb

预留全局静态 IPv4 和 IPv6 地址

您的客户可以使用这些 IP 地址来访问已进行负载平衡的服务。

gcloud compute addresses create tcp-lb-static-ipv4 \
    --ip-version=IPV4 \
    --global
Created [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/addresses/tcp-lb-static-ipv4].
NAME                 REGION ADDRESS                 STATUS
tcp-lb-static-ip            [LB_STATIC_IPV4]        RESERVED
gcloud compute addresses create tcp-lb-static-ipv6 \
    --ip-version=IPV6 \
    --global
Created [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/addresses/tcp-lb-static-ipv6].
NAME                   REGION ADDRESS                 STATUS
tcp-lb-static-ip-ipv6         [LB_STATIC_IPV6]        RESERVED

为两个地址配置全局转发规则

在 [LB_STATIC_IPV4] 和 [LB_STATIC_IPV4] 的相应位置,输入相关的 IP 地址。您可以使用 gcloud compute addresses list 查找地址。

gcloud beta compute forwarding-rules create my-tcp-lb-ipv4-forwarding-rule \
    --global \
    --target-tcp-proxy my-tcp-lb-target-proxy \
    --address [LB_STATIC_IPV4] \
    --ports 110
Created [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/forwardingRules/my-tcp-lb-ipv4-forwarding-rule].
NAME                           REGION IP_ADDRESS       IP_PROTOCOL TARGET
my-tcp-lb-ipv4-forwarding-rule        [LB_STATIC_IPV4] TCP         my-tcp-lb-target-proxy
gcloud beta compute forwarding-rules create my-tcp-lb-ipv6-forwarding-rule \
    --global \
    --target-tcp-proxy my-tcp-lb-target-proxy \
    --address [LB_STATIC_IPV6] \
    --ports 110
Created [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/forwardingRules/my-tcp-lb-ipv6-forwarding-rule].
NAME                           REGION IP_ADDRESS       IP_PROTOCOL TARGET
my-tcp-lb-ipv6-forwarding-rule        [LB_STATIC_IPV6] TCP         my-tcp-lb-target-proxy

为 TCP 代理负载平衡器创建防火墙规则

将防火墙配置为允许流量从负载平衡器和运行状况检查程序发送到实例。在这种情况下,我们将打开 TCP 端口 110。运行状况检查将使用同一端口。由于负载平衡器与实例之间的流量使用 IPv4,因此只需要打开 IPv4 范围。

控制台


  1. 转到 Google Cloud Console 中的“防火墙”页面。
    转到“防火墙”页面
  2. 点击创建防火墙规则
  3. 输入 allow-tcp-lb-and-health 作为名称
  4. 网络下,选择 default
  5. 目标下,选择指定的目标标记
  6. 目标标记设置为 tcp-lb
  7. 来源过滤条件设置为 IP ranges
  8. 来源 IP 地址范围设置为 130.211.0.0/2235.191.0.0/16
  9. 允许的协议和端口设置为 tcp:110
  10. 点击创建

gcloud


 gcloud compute firewall-rules create allow-tcplb-and-health \
     --source-ranges 130.211.0.0/22,35.191.0.0/16 \
     --target-tags tcp-lb \
     --allow tcp:110
Created [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/firewalls/allow-tcp110-130-211-0-0-22].
NAME                     NETWORK SRC_RANGES                   RULES      SRC_TAGS TARGET_TAGS
allow-tcplb-and-health   default 130.211.0.0/22,35.191.0.0/16 tcp:110             tcp-lb

测试负载平衡器

IP:端口字段中将 lb_ip 替换为负载平衡器的 IPv4 或 IPv6 地址后,您可以运行以下命令来访问负载平衡器:

curl lb_ip:110

创建运行状况检查

运行状况检查可确定哪些实例能接收新连接。 您可以配置 TCP、SSL、HTTP 或 HTTPS 运行状况检查以确定实例的运行状况。

  • 如果在您后端实例上运行的服务是基于 HTTP 的,请使用 HTTP 运行状况检查。
  • 如果在您后端实例上运行的服务基于 HTTPS,请使用 HTTPS 运行状况检查。
  • 如果在您后端实例上运行的服务基于 HTTP/2,请使用 HTTP/2 运行状况检查。
  • 如果在您后端实例上运行的服务使用的是 SSL,请使用 SSL 运行状况检查。
  • 除非您有明确的理由使用其他种类的运行状况检查,否则请使用 TCP 运行状况检查。

运行状况检查防火墙规则

负载平衡实例的运行状况检查探测请求来自范围 130.211.0.0/2235.191.0.0/16 中的地址。这些是负载平衡器用于连接到后端实例的 IP 地址范围。您的防火墙规则必须在相关端口上允许这些连接。

如需详细了解运行状况检查,请参阅运行状况检查页面。

其他配置选项

本部分对配置示例进行了详细讲解,提供了一些其他替代配置选项。所有任务均为可选任务。您可以按任意顺序执行这些任务。

用于保留客户端连接信息的 PROXY 协议

TCP 代理负载平衡会终止来自客户端的 TCP 连接并创建通向实例的新连接。因此在默认情况下,不会保留原始客户端 IP 和端口信息。

要保留原始连接信息并将其发送到您的实例,请启用 PROXY 协议(版本 1)。此协议将包含来源 IP 地址、目标 IP 地址和端口号的附加标头作为请求的一部分发送给实例。

如果您为用户流量设置了 PROXY 协议,则还必须为运行状况检查设置此协议,以确保您在同一端口上传送流量并检查运行状况。

PROXY 协议标头通常是一行用户可读的文本,格式如下:

PROXY TCP4 <client IP> <load balancing IP> <source port> <dest port>\r\n

PROXY 协议示例如下所示:

PROXY TCP4 192.0.2.1 198.51.100.1 15221 110\r\n

其中客户端 IP 为 192.0.2.1、负载平衡 IP 为 198.51.100.1、客户端端口为 15221 以及目标端口为 110

在客户端 IP 未知的情况下,负载平衡器将使用以下格式生成 PROXY 协议标头:

PROXY UNKNOWN\r\n

如果您检查运行状况并在同一端口上传送内容,则可以将运行状况检查 --proxy-header 设置为与您的负载平衡器设置相匹配。本教程使用端口 110 来执行运行状况检查和传送内容。 如果使用不同的端口,则可以根据需要决定是否要采用此设置以执行运行状况检查。

启用会话亲和性

示例配置创建的后端服务没有会话粘性。

这些流程介绍了如何为示例 TCP 代理负载平衡器更新后端服务,以便后端服务使用客户端 IP 粘性或生成的 Cookie 亲和性。

启用客户端 IP 粘性后,负载平衡器会根据使用客户端 IP 地址和负载平衡器 IP 地址(外部转发规则的外部 IP 地址)创建的哈希,将特定客户端的请求定向到同一后端虚拟机。

控制台

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

  1. 转到 Google Cloud Console 中的“负载平衡”页面。
    转到“负载平衡”页面
  2. 点击后端
  3. 点击 my-tcp-lb(您为此示例创建的后端服务的名称),然后点击修改
  4. 后端服务详情页面上,点击高级配置
  5. 会话亲和性下,从菜单中选择客户端 IP
  6. 点击更新

gcloud

使用以下 gcloud 命令更新 my-tcp-lb 后端服务,指定客户端 IP 会话亲和性:

gcloud compute backend-services update my-tcp-lb \
    --global \
    --session-affinity=CLIENT_IP

API

要设置客户端 IP 会话粘性,请向 backendServices/patch 方法发出 PATCH 请求。

PATCH https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/us-west1/backendServices/my-tcp-lb
{
  "sessionAffinity": "CLIENT_IP"
}

连接排空

您可以在后端服务上启用连接排空,以确保在终止、手动移除或由自动扩缩程序移除正在处理流量的实例时,对用户造成的干扰最小。如需详细了解连接排空,请参阅启用连接排空文档。

TCP 代理负载平衡和 Google Cloud 防火墙

网络负载平衡不同,对 TCP 代理负载平衡的访问无法通过防火墙规则进行控制。这是因为 TCP 代理负载平衡在 Google Cloud 的边缘实现,而防火墙规则在数据中心的实例上实现。

监控

如需为您的 TCP 代理负载平衡器设置监控功能,请参阅使用监控功能

问题排查

页面无法从负载平衡器 IP 加载

由于端口 110 对于许多浏览器而言都是受限端口,因此必须使用 curl 等工具来测试负载平衡器。如果您无法通过 curl 访问自己的页面,可以查看本节其余部分介绍的一些问题排查步骤。

验证实例的运行状况

验证实例运行状况是否良好。

gcloud compute backend-services get-health [BACKEND-SERVICE]

确认您的防火墙规则是否正确

  • 运行状况检查程序和负载平衡器都需要 130.211.0.0/2235.191.0.0/16 处于打开状态。
  • 如果您使用的是实例标记,请确保标记列在防火墙规则的 TARGET_TAGS 下,并确保您的所有实例都具有该标记。在以下示例中,实例具有 tcp-lb 标记。
gcloud compute firewall-rules list
NAME                      NETWORK SRC_RANGES                    RULES          SRC_TAGS TARGET_TAGS
allow-tcplb-and-health    default 130.211.0.0/22,35.191.0.0/16  tcp:110                 tcp-lb

尝试访问单个实例

临时设置一个允许单独访问实例的防火墙规则,然后尝试从特定实例加载页面。

  1. 打开防火墙,以允许任何来源的流量发送到已标记的实例。 为此,请创建一个来源过滤条件,以便对于端口 110 上流向具有 tcp-lb 标记的实例的 TCP 流量,将其来源 IP 范围设为 0.0.0.0/0

    gcloud compute firewall-rules create allow-tcp110-0-0-0-0 \
        --source-ranges 0.0.0.0/0 \
        --target-tags tcp-lb \
        --allow tcp:110
    
    Created [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/firewalls/allow-tcp110-0-0-0-0].
    NAME                 NETWORK SRC_RANGES RULES   SRC_TAGS TARGET_TAGS
    allow-tcp110-0-0-0-0 default 0.0.0.0/0  tcp:110          tcp-lb
    
  2. 查找其中一个实例的 EXTERNAL_IP 地址。

    gcloud compute instances list
    
    NAME             ZONE           MACHINE_TYPE  PREEMPTIBLE INTERNAL_IP EXTERNAL_IP    STATUS
    ig-us-central1-1 us-central1-b  n1-standard-1             10.240.0.8  EXTERNAL_IP RUNNING
    ig-us-central1-2 us-central1-b  n1-standard-1             10.240.0.11 EXTERNAL_IP RUNNING
    ig-us-east1-1    us-east1-b     n1-standard-1             10.240.0.12 EXTERNAL_IP RUNNING
    ig-us-east1-2    us-east1-b     n1-standard-1             10.240.0.13 EXTERNAL_IP RUNNING
  3. 直接从浏览器访问一个或多个实例。

    curl [EXTERNAL_IP]:110
    
  4. 如果无法通过此方法访问实例,请确保软件运行正常。如果可以逐个访问实例,请确保负载平衡器防火墙规则正确无误。

    gcloud compute firewall-rules describe allow-tcp-lb-and-health
    
    allowed:
      IPProtocol: tcp
        ports:
        '110'
    creationTimestamp: '2017-03-16T15:21:34.119-07:00'
    description: ''
    id: '8144207668574597377'
    kind: compute#firewall
    name: allow-tcp-lb-and-health
    network: https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/networks/default
    selfLink: https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/firewalls/allow-tcp-lb-and-health
    sourceRanges:
      130.211.0.0/22
      35.191.0.0/16
    targetTags:
      tcp-lb
  5. 确保实例运行正常后,请移除“从任何位置”防火墙规则。

    gcloud compute firewall-rules delete allow-tcp110-0-0-0-0
    
    The following firewalls will be deleted:
       [allow-tcp110-0-0-0-0]
    Do you want to continue (Y/n)?  y
    Deleted [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/firewalls/allow-tcp110-0-0-0-0].

后续步骤