目标
在本教程中,您将了解以下内容:
- 创建 Compute Engine 实例模板和托管实例组 (MIG)。
- 获取域名和证书。
- 使用证书创建 HTTPS 负载均衡器。
- 启用 IAP。
- 测试 IAP 是否正常运行。
费用
本教程使用 Google Cloud 的以下收费组件:
- Compute Engine
- 4 个虚拟机 (VM)
- 网络
- 全局负载平衡器转发规则
- 入站流量
若要根据预计使用情况来估算费用,请参阅此价格计算器。
准备工作
在开始本教程之前,您需要做好以下准备:
第 1 步:创建 Compute Engine 模板
在 Google Cloud 控制台中,转到 Compute Engine > 创建实例模板页面,然后选择要在其中创建模板的项目。
除以下几项外,其他设置均使用默认值:
- 机器类型:
- micro (f1-micro)
- 访问权限范围:
- 针对每个 API 设置访问权限
- Compute Engine:只读
- 防火墙:
- 允许 HTTP 流量
- 复制以下脚本并将其粘贴到管理部分的自动化 > 启动脚本下方:
更新完值后,点击创建以创建模板。
第 2 步:创建托管实例组
在 Google Cloud 控制台中,转到 Compute Engine > 创建新的实例组页面,然后选择要在其中创建代管式实例组的项目。
除以下几项外,其他设置均使用默认值:
- 名称:my-managed-instance-group
- 位置:多地区
- 实例模板:选择您在第 1 步中创建的实例模板
- 实例数:如需更改实例数,您必须先关闭自动扩缩功能。
- 自动扩缩模式:不自动扩缩
健康检查:选择创建健康检查,然后输入以下值:
- 名称:my-health-check
- 协议:HTTP
点击保存并继续,使用新的健康检查。
更新完值后,点击创建以创建托管实例组 (MIG)。
第 3 步:获取域名和证书
要使用负载平衡器处理 HTTPS 流量,您需要一个域名和一个签名证书。您可以在 Google Domains 上注册一个网域,也可以使用自己选择的网域注册商。在继续本指南之前,请先注册您的网域。
设置证书
创建证书,以向用户标识您的网站。如需了解如何创建证书,请参阅使用 Google 管理的 SSL 证书。
您的 CA 必须验证注册的域名是否为您所有。在以下步骤中,您将创建一个虚拟机来对您的网域进行 CA 身份验证。
创建一个虚拟机来验证您的网域所有权
在 Google Cloud 控制台中,转到 Compute Engine >“创建实例”页面。
除以下几项外,其他设置均使用默认值:
- 名称:certbot-vm
- 机器类型:micro (f1-micro)
- 访问权限范围:
- 针对每个 API 设置访问权限
- Compute Engine:读写
- 启动磁盘映像:
- Debian GNU/Linux 9(拉伸)
- 防火墙:
- 允许 HTTP 流量
- 允许 HTTPS 流量
更新完值后,点击创建以创建虚拟机实例。请记下刚刚创建的虚拟机的外部 IP 地址。下一步操作将会用到该地址。
将您的网域设置为指向虚拟机
要将您的网域设置为指向虚拟机,请按照下述步骤配置 A 记录:
- 通过网域托管服务商登录您的网域账号。
- 找到相关页面以更新网域的 DNS 记录。此页面的名称可能是“DNS 管理” (DNS Management)、“域名服务器管理”(Name Server Management) 或“高级设置” (Advanced Settings)。
- 将 A 记录更改为以下值:
- 名称/主机/别名:@
- 值:您创建用于验证上述网域所有权的虚拟机的外部 IP 地址。
- TTL:注册商的默认值,或 86400(一天)。
- 等待 DNS 记录更新。您所添加的记录最长可能需要一天的时间来传播。
如需了解详情,请参阅关于 A 记录。
测试服务器
要测试您的服务器是否正常运行,请按照下述步骤操作:
在 Google Cloud 控制台中,前往 Compute Engine > 虚拟机实例页面。
转到“虚拟机实例”页面在 certbot-vm 对应的 Connect 下方,点击 SSH.
运行以下命令以在虚拟机上运行小型网络服务器:
mkdir web cd web echo "Hello" > index.html sudo busybox httpd -v -f
在网络浏览器中,转到您之前注册的域名。您的网络浏览器应显示
Hello
,并且您的 SSH 会话应显示一条包含... response:200
的消息。否则,请等待几分钟,然后重复此步骤。测试成功完成后,按 Ctrl+C 停止网络服务器。
创建证书
要创建证书,请在虚拟机上运行以下命令来注册 Let's Encrypt,其中 YOUR_DOMAIN 是您的域名(不包括协议):
sudo pkill busybox sudo apt-get install -y certbot sudo certbot certonly --standalone -d YOUR-DOMAIN
在此过程中,Let's Encrypt 可能会向您索要电子邮件地址,以便在您的证书即将到期时(默认为在颁发 3 个月后到期)发送提醒。此外,您必须同意 Let's Encrypt 设定的服务条款。
成功注册后,您应该会看到一条消息,其内容为 Congratulations! Your certificate and chain have been saved at...
将证书添加到项目中
如需将证书添加到项目中,请在虚拟机上运行以下命令:
sudo su cd /etc/letsencrypt/live/YOUR_DOMAIN gcloud compute ssl-certificates create my-cert --certificate=fullchain.pem --private-key=privkey.pem
成功创建证书后,应该看到如下所示的消息:Created
[https://www.googleapis.com/compute/v1/projects/example-project/global/sslCertificates/my-cert]
在继续操作之前,请先关闭 SSH 会话。
第 4 步:创建负载均衡器
在开始执行此步骤之前,请确保您在上一步中启动的 SSH 会话已关闭。准备就绪后,请按照以下步骤创建负载平衡器:
在 Google Cloud 控制台中,转到网络服务 > 创建负载均衡器页面,然后选择要为其创建负载均衡器的项目。
转到“创建负载平衡器”页面在 HTTP(S) 负载平衡下,点击开始配置。
选择从互联网到我的虚拟机。
在显示的新建外部应用负载均衡器页面上,为您的负载均衡器输入一个名称。
点击后端配置,然后选择后端服务 > 创建后端服务。
在创建后端服务面板的名称框中,输入
my-backend-service
。
在新后端下方,除以下内容外,其他设置均使用默认值:
- 实例组:my-managed-instance-group
在健康检查下,选择 my-health-check。
更新完值后,点击创建。新 HTTP(S) 负载均衡器面板会重新显示出来。
点击主机和路径规则以加载默认值。您无需添加任何规则。
点击前端配置。除以下几项外,其他设置均使用默认值:
- 协议:HTTPS
- IP 地址:点击创建 IP 地址
- 输入要与新的静态 IP 地址关联的名称。
- 点击保留以保留静态 IP 地址。
- 证书:my-cert
输入完前端配置值后,点击完成。
点击创建。此时将显示负载均衡页面,并且将在负载均衡器列表中创建新的负载均衡器。
在 Google Cloud 控制台创建完新负载均衡器后,点击负载均衡器的名称,并在详细信息 > 前端下记下外部 IP 地址。下一步操作将会用到该地址。
将您的网域设置为指向负载均衡器
要将您的网域设置为指向负载均衡器,请按照以下步骤配置 A 记录:
- 通过网域托管服务商登录您的网域账号。
- 找到相关页面以更新网域的 DNS 记录。此页面的名称可能是“DNS 管理” (DNS Management)、“域名服务器管理”(Name Server Management) 或“高级设置” (Advanced Settings)。
- 将 A 记录更改为以下值:
- 名称/主机/别名:@
- 值:您在上面创建的负载均衡器的外部 IP 地址。不要将端口
:443
添加到 DNS 记录中。 - TTL:注册商的默认值,或 86400(一天)。
- 等待 DNS 记录更新。要传播您刚刚添加的记录,最长可能需要一天的时间。
- 如需测试负载均衡器,请使用网络浏览器通过
https://
协议转到您的网域。- 如果尚未设置负载均衡器,您将会看到“HTTP 502”错误。
- 如果负载均衡器已准备就绪,您将会看到“请求未获得批准”。
如需了解详情,请参阅关于 A 记录。
重启虚拟机
如需对来自 IAP 的请求正确进行身份验证,您必须按照以下步骤重启 MIG 中的虚拟机:
- 在 Google Cloud 控制台中,前往 Compute Engine >“实例组”页面。
转到“实例组”页面 - 点击 my-managed-instance-group。
- 在显示的实例组详情页面顶部,点击滚动式重新启动/替换。
- 在显示的重新启动/替换 my-managed-instance-group 的实例页面上,设置以下值:
- 操作:重新启动
- 不可用的实例数上限:3 个实例,共 3 个实例
- 最短等待时间:0 s
- 更新完值后,点击重新启动。
第 5 步:设置 IAP
配置防火墙
接下来,您需要配置防火墙以阻止对底层虚拟机的访问,并仅允许通过 IAP 的访问:
- 前往 Google Cloud 控制台的 VPC 网络 > 防火墙规则。
转到“防火墙规则”页面 - 选中以下规则旁边的复选框:
- default-allow-http
- default-allow-https
- default-allow-internal
- 点击删除。
- 点击创建防火墙规则并设置以下值:
- 名称:allow-iap-traffic
- 目标:网络中的所有实例
- 来源 IP 地址范围(将每个值粘贴到框中后,按 Enter 键)。IP 范围已列入许可名单,因为这是负载均衡器与后端通信的前提条件。
- 130.211.0.0/22
- 35.191.0.0/16
- 协议和端口:
- 指定的协议和端口
- tcp:80
- 更新完值后,点击创建。
设置 IAP
如需为您的项目设置 IAP,请按照以下步骤操作:
- 在 Google Cloud 控制台中,转到安全 > Identity-Aware Proxy 页面,然后选择要为其启用 IAP 的项目。
转到 Identity-Aware Proxy 页面 如果您尚未配置项目的 OAuth 同意屏幕,系统将提示您执行此操作。
-
转到 OAuth 同意屏幕。
配置同意屏幕 - 在支持电子邮件地址下,选择要显示为公开联系人的电子邮件地址。该电子邮件地址必须属于当前登录的用户帐号,或者属于当前登录用户是管理员或所有者的 Google 群组。
- 输入您要显示的应用名称。
- 根据需要添加任何可选详细信息。
- 点击保存。
如需稍后更改 OAuth 同意屏幕上的信息(例如产品名称或电子邮件地址),请重复上述步骤配置同意屏幕。
-
转到 OAuth 同意屏幕。
在 my-backend-service 旁边,
在随即显示的 开启 IAP 窗口中,选中“我已经阅读了配置要求,并根据文档配置了我的 Compute Engine 资源”旁边的复选框。
点击开启。
将主账号添加到访问列表中
接下来,您需要将主账号添加到项目的 IAP 访问权限列表中。
- 在 IAM 和管理 > Identity-Aware Proxy 右侧的访问权限部分中,点击添加。
- 输入您要授予访问权限的主账号(包括您自己),然后为主账号分配 IAP-secured Web App User 角色。主帐号可以是:
- Google 账号:user@gmail.com
- Google 群组:admins@googlegroups.com
- 服务账号:server@example.gserviceaccount.com
- Google Workspace 网域:example.com
步骤 6:测试 IAP
如需测试 IAP 是否正常运行,请按照以下步骤操作:
- 在网络浏览器中,前往您的网域。
- 如果您看到“请求未获得批准”,请过几分钟后重试。
- 如果您看到 Google 登录屏幕,请使用您在上一步中授予了访问权限的 Google 账号进行登录。
- 您应该会看到如下消息:“您好,user@example.com。我是my-managed-instance-group-29z6。”
- 尝试刷新页面。您的浏览器应显示托管实例组中 3 台机器的名称。这表明负载均衡器将流量分配到该组中的各个虚拟机。
恭喜!您已经使用 IAP 成功启用了负载均衡服务。
清理
为避免因本教程中使用的资源导致您的 Google Cloud 账号产生费用,请删除包含这些资源的项目,或者保留项目但删除各个资源。
在为 Compute Engine 设置完 IAP 之后,您可以清理在 Google Cloud 上创建的资源,避免日后再为这些资源付费。以下部分介绍了如何删除或关闭这些资源。
删除项目
若要避免产生费用,最简单的方法是删除您为本教程创建的项目。
如需删除项目,请执行以下操作:
- 在 Google Cloud 控制台中,进入管理资源页面。
- 在项目列表中,选择要删除的项目,然后点击删除。
- 在对话框中输入项目 ID,然后点击关闭以删除项目。
删除实例
如需删除 Compute Engine 实例,请执行以下操作:
- 在 Google Cloud 控制台中,转到虚拟机实例页面。
- 选中要删除的实例。
- 如需删除实例,请点击 更多操作,点击删除,然后按照说明操作。
删除默认网络的防火墙规则
如需删除防火墙规则,请执行以下操作:
- 在 Google Cloud 控制台中,转到防火墙页面。
- 选中要删除的防火墙规则。
- 如需删除防火墙规则,请点击 删除。