使用代管实例组设置 Cloud CDN

Cloud CDN 利用 Google Cloud 全球外部 HTTP(S) 负载平衡器来提供路由、运行状况检查和任播 IP 支持。全球外部 HTTP(S) 负载平衡器可以有多个后端实例类型,并且您可以选择要为哪些后端(也称为源站)启用 Cloud CDN。

本设置指南介绍如何创建一个启用了 Cloud CDN 的简单的外部 HTTP 负载平衡器。负载平衡器具有以下资源:
  • 默认 Virtual Private Cloud (VPC) 网络
  • Compute Engine 托管实例组
  • 默认网址映射
  • 预留的外部 IP 地址
如需设置具有“TLS 终止”功能的简单外部 HTTPS 负载平衡器,请参阅设置简单的外部 HTTPS 负载平衡器

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

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

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

拓扑

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

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

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

  1. 客户端向转发规则中定义的外部 IPv4 地址发送内容请求。
  2. 负载平衡器检查是否可以从缓存中处理请求。如果可以,负载平衡器将请求的内容从缓存中传送出去。否则,继续进行处理。
  3. 转发规则将请求定向到目标 HTTP 代理。
  4. 目标代理使用网址映射中的规则确定单个后端服务接收所有请求。
  5. 负载平衡器确定后端服务只有一个实例组,并将请求定向到该组中的虚拟机实例。
  6. 该虚拟机提供用户请求的内容。
启用了 Cloud CDN 的简单 HTTP(S) 负载平衡(点击可放大)
启用了 Cloud CDN 的简单 HTTP(S) 负载平衡(点击可放大)

权限

为完成本指南中的步骤,您必须拥有在项目中创建 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
    

配置防火墙规则

在此示例中,您将创建 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 ranges
  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

预留外部 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. 点击后端配置
  7. 创建或选择后端服务和后端存储分区下,选择后端服务 > 创建后端服务
  8. 为您的后端服务添加名称,例如 web-backend-service
  9. 协议下,选择 HTTP
  10. 后端 > 新后端 > 实例组中,选择您的实例组 lb-backend-example
  11. 保留其他默认设置。
  12. 运行状况检查下,选择创建运行状况检查,然后为您的运行状况检查添加一个名称,例如 http-basic-check
  13. 将协议设置为 HTTP,然后点击保存并继续
  14. 选择启用 Cloud CDN
  15. 保留其他默认设置。
  16. 点击创建
  • 主机和路径规则中,保留默认设置。
  • 前端配置中,使用以下值:
    1. 协议设置为 HTTP
    2. IP 地址设置为您之前创建的 lb-ipv4-1
    3. 确保将端口设置为 80 以允许 HTTP 流量。
    4. 点击完成
  • 点击检查并最终确定
  • 配置完负载平衡器后,点击创建
  • 等待负载平衡器完成创建。
  • 点击负载平衡器的名称。
  • 负载平衡器详情屏幕上,记下负载平衡器的 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 \
              --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
          

    启用 Cloud CDN

    如果您在创建后端服务时尚未启用 Cloud CDN,请立即通过更新后端服务执行此操作:

    gcloud compute backend-services update-backend web-backend-service \
        --enable-cdn
    

    您可以在缓存概览中详细了解 Cloud CDN 能够识别的缓存指令以及 Cloud CDN 无法缓存的内容。

    将流量发送到您的实例

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

    控制台

    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)。如果您的浏览器未呈现此页面,请查看本指南中的配置设置。

    停用 Cloud CDN

    控制台

    为单个后端服务停用 Cloud CDN

    1. 在 Google Cloud Console 中,转到 Cloud CDN 页面。

      转到 Cloud CDN 页面

    2. 在源站所在行的右侧,点击菜单 ,然后选择修改
    3. 取消选中您想要停止使用 Cloud CDN 的所有后端服务的复选框。
    4. 点击更新

    为某个源站的所有后端服务移除 Cloud CDN

    1. 在 Cloud Console 中,转到 Cloud CDN 页面。

      转到 Cloud CDN 页面

    2. 在源站所在行的右侧,点击菜单 ,然后选择移除
    3. 点击移除进行确认。

    gcloud

    gcloud compute backend-services update BACKEND_SERVICE_NAME \
        --no-enable-cdn
    

    停用 Cloud CDN 后,不会使缓存失效或完全清除缓存。如果您停用然后重新启用 Cloud CDN,则大部分或所有缓存的内容仍可能会被缓存。为了防止内容通过缓存传送,您必须使该内容失效

    后续步骤

    • 如需了解缓存的内容,请参阅缓存概览
    • 如需在 GKE 中使用 Cloud CDN,请参阅 Ingress 功能
    • 如需检查 Cloud CDN 是否正在从缓存传送响应,请参阅查看日志
    • 如需了解常见问题及解决方案,请参阅问题排查
    • 如需了解 Cloud CDN 的工作原理,请参阅 Cloud CDN 概览