跨多个位置和专区部署隔离工作负载
本教程可能会发生成本。 使用“成本估算器”根据您的预计使用量生成成本估算。
本教程将指导您完成通过供应 IBM Cloud® Virtual Private Cloud(VPC) 来设置高可用性和隔离工作负载的步骤。 您将在一个区域内的多个专区中创建虚拟服务器实例 (VSI),以确保应用程序的高可用性。 您将在第二个区域中创建其他 VSI,并配置全局负载均衡器 (GLB) 以在区域之间提供高可用性,并减少不同地理位置的用户的网络等待时间。
您将从目录供应 IBM Cloud Internet Services (CIS) 服务作为 GLB,并从目录供应 IBM Cloud Secrets Manager 服务以管理所有入局 HTTPS 请求的传输层安全性 (TLS) 证书。
目标
- 通过虚拟私有云可用的基础架构对象了解工作负载隔离。
- 在一个区域的不同专区之间使用负载均衡器在虚拟服务器之间分发流量。
- 在区域之间使用全局负载均衡器,以实现高可用性,提高弹性并缩短等待时间。
{: caption="*
- 管理员 (DevOps) 在区域 1 中的 VPC 内两个不同专区下的子网中供应 VSI,并在区域 2 中创建的 VPC 内重复相同的操作。
- 管理员创建了一个负载平衡器,其后端服务器池位于区域 1 的不同区域,前端为监听器。 在区域 2 中重复相同的操作。
- 管理员利用关联的定制域供应 IBM Cloud Internet Services 服务,并创建一个指向在两个不同 VPC 中创建的负载均衡器的全局负载均衡器。
- 管理员将域 SSL 证书添加到Secrets Manager服务中,从而启用 HTTPS 加密。
- 用户发出 HTTP/HTTPS 请求,全局负载平衡器处理请求。
- 请求会被路由到全局和本地级别的负载平衡器。 然后,可用的服务器实例履行请求。
准备工作
创建虚拟私有云,子网和虚拟服务器实例
在本节中,您将在区域 1 中创建自己的 VPC,并在区域 1 的两个不同区域中创建子网,然后配置 VSI。
创建虚拟私有云
- 浏览至“虚拟私有云”页面,然后单击 创建。
- 在 位置 部分下,选择 地理位置 和 区域,例如
Europe
和London
。 - 输入
vpc-region1
作为 VPC 的名称,选择 资源组,并 (可选) 添加 标记 以组织资源。 - 取消选中默认安全组中的允许 SSH 和允许 ping。 SSH 访问稍后将添加到维护安全组。 将维护安全组添加到实例以允许从防御服务器进行 SSH 访问。 本教程不需要 ping 访问权。
- 将 启用对经典资源的访问 保留为未选中状态,并将 为每个区域创建缺省前缀 保留为已选中状态。
- 在 子网 下,更改专区 1 子网的名称。 单击画笔图标:
- 输入
vpc-region1-zone1-subnet
作为子网的唯一名称。 - 选择与 VPC 资源组相同的 资源组。
- 将缺省值保留在其他值中。
- 单击保存。
- 输入
- 在 子网 下,更改专区 2 子网的名称。 单击画笔图标:
- 输入
vpc-region1-zone2-subnet
作为子网的唯一名称。 - 选择与 VPC 资源组相同的 资源组。
- 将缺省值保留在其他值中。
- 单击保存。
- 输入
- 在 子网 下,删除区域 3 中的子网。 单击减号图标。
- 单击创建虚拟私有云以供应实例。
创建安全组以允许入站流量流至应用程序
通过在安全组中定义规则,为应用程序的 HTTP (80) 和 HTTPS (443) 端口启用入站规则。 在后续步骤中,您将向安全组添加 VSI。
-
浏览至“安全组”页面,然后单击 创建。
-
输入
vpc-region1-sg
作为名称,选择与 VPC 资源组相同的 资源组。 -
选择先前创建的 vpc-region1 虚拟私有云。
-
添加下表中找到的相同 入站规则,然后单击 创建安全组。
入站规则 协议 源类型 源 值 TCP 任意 0.0.0.0/0 端口 80-80 TCP 任意 0.0.0.0/0 端口 443-443
供应虚拟服务器实例
- 浏览至“子网”页面。
- 验证所有子网的状态是否为 可用。
- 单击 vpc-region1-zone1-subnet,后跟 附加资源,然后在 附加实例 下单击 创建。
- 输入
vpc-region1-zone1-vsi
作为虚拟服务器的唯一名称。 - 验证或设置 虚拟私有云,资源组,位置 和 区域 字段。
- 输入
- 在 图像和概要文件 部分下,单击 更改图像。
- 在 搜索项 字段中,输入
Ubuntu
并选取图像的任何版本,然后单击 保存。 - 在 概要文件 部分下,单击 更改概要文件。
- 选取以
2 vCPUs
和4 GB RAM
作为概要文件的 计算,然后单击 保存。 - 将 SSH 密钥设置为之前创建的 SSH 密钥。
- 在 具有虚拟网络接口的网络附件下,单击 eth0 接口行上的画笔图标。
- 点击下一步。
- 选中
vpc-region1-sg
并取消选中 VPC 缺省值 安全组。 - 单击 下一步 几次,然后单击 保存。
- 单击创建虚拟服务器。
- 重复上述步骤以在 vpc-region1-zone2-subnet 子网中供应 vpc-region1-zone2-vsi 虚拟服务器。
在其他位置创建资源
从步骤 1 重复上述步骤,以在另一个区域 (例如,法兰克福) 中供应具有子网和虚拟服务器实例的新 VPC。 在将 region2
替换为 region1
时,请遵循与上面相同的命名约定。
在虚拟服务器实例上安装和配置 Web 服务器
遵循 使用防御主机安全地访问远程实例 中提到的步骤,以安全地维护服务器。 使用充当先前供应的 VSI 的 jump
服务器和维护安全组的防御主机。 每个 VPC 中都需要一个防御主机。
一旦您成功通过 SSH 连接到配置在第 1 地区 的第1区子网中的服务器、
- 在提示符下运行以下命令,将Nginx安装为网络服务器
sudo apt-get update sudo apt-get install nginx
- 使用下面的命令检查 Nginx 服务的状态:
输出应显示 Nginx 服务处于活动状态并且正在运行。sudo systemctl status nginx
- Optionally verify that Nginx works as expected.
curl localhost
. 您应该会看到缺省 Nginx 欢迎页面。 - 要使用区域和专区详细信息更新 html 页面,请运行下面的命令:
将区域和区域附加到nano /var/www/html/index.nginx-debian.html
h1
标记引号Welcome to nginx!
,以便现在读取Welcome to nginx! server running in **zone 1 of region 1**
并保存更改。 - 通过运行
curl localhost
命令来验证更改。 - 重复上述步骤,在所有区域子网的 VSI 上安装和配置网络服务器,同时不要忘记更新 html,以包含相应的区域和区域信息。
使用负载均衡器在专区之间分发流量
在此部分中,您将创建两个负载均衡器。 每个区域一个负载均衡器,以在不同专区内相应子网下的多个服务器实例之间分发流量。
创建安全组以允许通过负载均衡器的入站和出站流量
要允许到应用程序的流量,您需要为 HTTP (80) 和 HTTPS (443) 端口启用入站和出站规则。 在后面的步骤中,创建负载平衡器时,将把它们添加到定义这些规则的安全组中。
-
浏览至“安全组”页面,然后单击 创建。
-
选择先前创建的 vpc-region1 虚拟私有云。
-
输入
vpc-lb-sg
作为名称,选择与 VPC 资源组相同的 资源组。 -
添加与下表中相同的 入站规则。
入站规则 协议 源类型 源 值 TCP 任意 0.0.0.0/0 端口 80-80 TCP 任意 0.0.0.0/0 端口 443-443 -
添加下表中找到的相同 出站规则,然后单击 创建安全组。
出站规则 协议 源类型 源 值 TCP 任意 0.0.0.0/0 端口 80-80 TCP 任意 0.0.0.0/0 端口 443-443 -
在区域 2 中重复上述步骤。
配置负载均衡器
- 浏览至“负载均衡器”页面,然后单击 创建。
- 选择 应用程序负载均衡器 (ALB) 作为负载均衡器类型。
- 在 位置 部分下,选择用于先前创建的 vpc-region1 虚拟私有云的相同 地理位置 和 区域。
- 输入
vpc-lb-region1
作为名称,选择与 VPC 资源组相同的 资源组。 - 选择先前创建的 vpc-region1 虚拟私有云。
- 选择 vpc-region1-zone1-subnet 和 vpc-region1-zone2-subnet 的 子网。
- 单击“创建池”创建新的后端 VSI 池,这些 VSI 作为平等的对等设备共享路由至池的流量。 用下面的值设置参数,完成后点击创建。
- 名称:
region1-pool
- 协议:
HTTP
- 会话粘性:
None
- 代理协议:
Disabled
- 方法
Round robin
- 健康检查路径:
/
- 健康协议:
HTTP
- 运行状况端口:保留为空白
- 间隔(秒):
15
- 超时(秒):
5
- 最大重试次数:
2
- 单击创建。
- 名称:
- 单击附加服务器将服务器实例添加到池中。
- 从 子网 下拉列表中,选择 vpc-region1-zone1-subnet 和 vpc-region1-zone2-subnet。
- 选择您创建的实例,并将
80
设置为 端口。 - 单击附加以完成后端池的创建。
- 单击“创建监听器”创建新的前端监听器;监听器是一个检查连接请求的进程。
- 后端水池:
region1-pool
- 协议:
HTTP
- 代理协议: 未选中
- 港口
80
- 最大连接数:留空并单击创建。
- 后端水池:
- 在 安全组 下,选中
vpc-lb-sg
并取消选中缺省安全组。 - 单击创建负载平衡器配置负载平衡器。
- 在 区域 2 中重复以上步骤,这次命名负载均衡器
vpc-lb-region2
和后端池region2-pool
。
测试负载均衡器
- 等待负载均衡器状态更改为活动。
- 在 Web 浏览器中打开主机名。
- 多次刷新页面,并注意到负载均衡器在每次刷新时都会返回来自不同区域或虚拟服务器实例的结果。
- 保存地址,以备将来参考。
您可能注意到这些请求未加密,并且仅支持 HTTP。 在下一部分中,您将配置 SSL 证书和启用 HTTPS。
配置多位置负载均衡
您的应用程序现在在两个区域运行,但缺少一个组件,用户无法从一个入口点透明地访问它。
在此部分中,您将配置 IBM Cloud Internet Services (CIS) 以在两个区域之间分配负载。CIS 提供 全局负载均衡器 (GLB),高速缓存,Web 应用程序防火墙 (WAF) 和 页面规则 以保护应用程序,同时确保云应用程序的可靠性和性能。
要配置全局负载均衡器,您将需要:
- 将定制域指向 CIS 名称服务器,
- 检索 VPC 负载均衡器的 IP 地址或主机名,
- 配置运行状况检查,以验证应用程序的可用性,
- 并定义指向 VPC 负载均衡器的源池。
将定制域添加到 IBM Cloud Internet Services
第一步是创建 CIS 实例,并将定制域指向 CIS 名称服务器。
-
如果您没有域名,可以向注册商购买。
-
浏览至 IBM Cloud 目录中的 IBM Cloud Internet Services。
-
选择套餐,设置服务名称和资源组,然后单击 创建 以创建服务实例。
-
供应服务实例时,单击 添加域。
-
输入您的域名,然后单击 下一步。
-
设置 DNS 记录是一个可选步骤,本教程可以跳过,单击下一步。
-
分配名称服务器后,配置注册商或域名提供商,以使用列出的名称服务器。
-
此时,您可以单击 取消 以返回到主页,在配置了注册器或 DNS 提供程序之后,可能需要最多 24 小时才能使更改生效。
当域在“概览”页面上的状态从“待定”变为“激活”时,可以使用
dig <your_domain_name> ns
命令来验证新的名称服务器是否已经生效。
为全局负载均衡器配置运行状况检查
运行状况检查有助于深入了解池的可用性,以便可以将流量路由到运行正常的池。 这些检查定期发送 HTTP/HTTPS 请求并监视响应。
-
在 IBM Cloud Internet Services 仪表板中,浏览至 可靠性 > 全局负载均衡器。
-
选择 运行状况检查,然后单击 创建。
-
将名称设为
nginx
。 -
针对 监视器类型选择 HTTP。
-
将 端口 设置为
80
。 -
将路径设置为
/
。 -
单击创建。
在构建自己的应用程序时,可以定义一个专用的健康状况端点(如_/health_),在这里报告应用程序的状态。
定义源池
池是一组源 VSI 或负载均衡器,当连接到全局负载均衡器时,会智能地将流量路由到这些 VSI 或负载均衡器。 通过两个区域中的 VPC 负载均衡器,您可以定义基于位置的池,并配置 CIS 以根据用户请求的地理位置将用户重定向到最近的 VPC 负载均衡器。
VPC 负载均衡器的源池
- 选择 源池,然后单击 创建。
- 输入池的名称:
region-1-pool
。 - 将原点名称设置为
region-1
。 - 将 Origin Address 设置为region1VPC 负载平衡器的主机名,请参阅 VPC 负载平衡器的概述页面。
- 选择 现有运行状况检查,然后选择先前创建的运行状况检查。
- 选择靠近位置区域 1 的 运行状况检查区域。
- 单击保存。
- 对区域 2 重复上述步骤。
创建全局负载均衡器
定义源池后,可以完成负载均衡器的配置。
-
选择 负载均衡器,然后单击 创建。
-
保留 Enable:
On
和 Proxy:Off
的缺省值。 -
输入全局负载均衡器的名称
lb
,此名称将是子域中用于访问应用程序的初始字符。(http://lb
.<your_domain_name>
)。 -
单击 添加路径。
-
Select the 地区:
Default
. -
选择刚刚创建的源池,即 region-1-pool 和 region-2-pool。
-
单击添加。
-
展开 地理路线部分,您可以根据源区域来分配流量。
如果需要,您可以根据地理位置添加更多路径,并将流量定向到最接近的池。 单击 添加路由,选择全局负载均衡器区域 (例如,西欧 ),然后选择所需的池 (例如,region-2-pool ),然后单击 添加。 请求与任何已定义的路由都不匹配,将重定向到 缺省源池,您定义的全局负载均衡器区域中的用户将定向到最近的负载均衡器 /VSI。
-
单击创建。
使用 HTTPS 进行保护
HTTPS 加密要求可从 CIS 全局负载均衡器和 VPC 负载均衡器访问签名证书。 IBM Cloud Secrets Manager 将用于订购或导入,然后管理域的证书。 然后,将 Identity and Access Management (IAM) 服务授权配置为允许从所需服务对证书进行读访问。
创建并授权 Secrets Manager 实例
-
如果您有现有的 Secrets Manager 实例,那么可以将其用于本教程,或者根据需要执行 创建 Secrets Manager 服务实例 中概述的步骤来创建新的实例。
-
创建一个授权,允许 VPC 负载均衡器服务访问包含 SSL 证书的Secrets Manager实例。
- 浏览至 身份和访问权授权。
- 单击 创建,然后选择 VPC 基础架构服务 作为源服务。
- 选择 特定资源,资源类型,然后选择 Load Balancer for VPC。
- Secrets Manager 作为 目标服务。
- 分配 Writer 服务访问角色。
- 目标服务实例可以是 所有资源,也可以是特定 Secrets Manager 实例 (如果需要)。 现在选择的 所有资源 的离场者。
- 单击 授权。
-
继续在“管理授权”页面中,创建授权以授予 Secrets Manager 对 CIS的访问权:
- 单击创建并选择 Secrets Manager 作为源服务。
- 选择 所有资源 或仅选择先前创建的 Secrets Manager。
- Internet Services 作为目标服务。
- 选择 所有资源 或仅选择先前创建的 CIS。
- 分配管理者服务访问角色。
- 单击 授权。
如果 CIS 实例支持多个域,那么您还可以将 Reader 角色分配给 CIS 实例和 Manager 分配给您用于解决方案的特定域。 请参阅 授予特定域的服务访问权 主题。
IBM CIS 支持对全局负载均衡器进行代理。 代理负载均衡器时,意味着其流量直接通过 CIS运行。 负载均衡器同时支持“仅 DNS”和“HTTP 代理”方式,请考虑下面两种替代方法中的哪一种与您的用例最匹配,然后继续操作,因为流量路由行为不同,如下所示:
- 备用 1: 代理的流量流经 CIS。
- 备用 2: 非代理 (仅限 DNS 方式) 的流量直接从客户机流向源。 在“仅 DNS”方式下,不会应用任何 CIS 安全性,性能和可靠性功能。
有关更多信息,请参阅 代理 DNS 记录和全局负载均衡器 主题。
备用 1: 代理,流量流经 CIS
第一种方法是为自定义域创建通配符证书,然后将其代理到IBM Cloud Internet Services中。CIS)中进行代理,使您能够利用行业领先的安全、保护和性能功能。 将 example.com
替换为以下步骤中的定制域名。
当前正在使用 Let 's Encrypt 对证书进行排序,您可以遵循 支持的认证中心 主题进行更新。 使用 Let 's Encrypt 需要 ACME 帐户。 遵循 连接第三方认证中心 主题中概述的步骤来创建或注册帐户。 此外,您还需要遵循 连接 DNS 提供程序 主题中的步骤来添加 DNS 提供程序。 对于本教程,必须将 CIS 添加为 DNS 提供者。
初始 HTTPS 仅从用户配置为 Secrets Manager。
- 在 Secrets Manager 中订购证书
- 打开 Secrets Manager 服务,然后选择左侧的 密钥。
- 单击添加。
- 如果您正在使用新的 Secrets Manager 实例,那么在订购证书之前需要对其进行配置。 遵循 准备订购公用证书 下概述的步骤。
- 单击 公用证书,然后单击 下一步。
- 填写以下表单:
- 名称-输入您可以记住的名称。
- 描述-输入您选择的描述。
- 点击下一步。
- 在 认证中心 下,选择已配置的 Let 's Encrypt 认证中心引擎。
- 在 密钥算法下,选择首选算法,
- 捆绑软件证书-离开
- 自动证书旋转-离开
- 在 DNS 提供者 下,选择已配置的 DNS 提供者实例
- 单击 选择域 将选中 使用通配符进行选择,并使域本身处于未选中状态,然后单击 完成。
- 单击下一步。
- 复审您的选择,然后单击 添加。
- 您不需要等待激活完成即可执行下一步,但在验证成功之前需要等待它完成。
- 配置从客户机 Web 浏览器到 CIS 端点的 HTTPS。 在 CIS 中,配置 TLS 安全性:
- 打开安全性面板,然后选择 TLS。
- 对于方式,选择客户机到边缘。 这将终止全局负载平衡器上的 HTTPS 连接,并切换为 VPC 负载平衡器上的 HTTP 连接。
- 在CIS中配置全局负载平衡器使用 TLS:
- 打开可靠性面板,选择全局负载平衡器。
- 找到之前创建的全局负载平衡器并打开代理。
- 在浏览器中打开 https://lb.example.com 验证是否成功。
接下来,配置从 CIS 到 VPC 负载均衡器的 HTTPS。
向 VPC 负载均衡器添加 HTTPS 侦听器:
-
导航至 VPC,然后导航至负载平衡器,并单击 vpc-lb-region1。
-
选择前端监听器。
-
单击创建监听器。
-
选择 缺省后端池:
region1-pool
或region2-pool
。 -
选择 HTTPS 并为 端口 输入值
443
。 -
选择先前创建的 Secrets Manager 实例,“SSL 证书”下拉列表应显示您使用来自 Let 's Encrypt 的先前 Secrets Manager 实例订购的证书 名称。 单击创建。
如果 SSL 证书下拉菜单中没有 example.com,则可能漏掉了上面授权 VPC 负载均衡器访问Secrets Manager服务的步骤。 验证 Secrets Manager 服务是否具有 example.com 的证书。
-
对 vpc-lb-region2 负载均衡器重复上述步骤。
创建的通配符证书将允许访问域名,如 vpc-lb-region1 .example.com。 打开 VPC 负载均衡器 vpc-lb-region1 的“概览”选项卡,注意 Hostname 是xxxxxxx-REGION.lb.appdomain.cloud。 通配符证书不能正常运作。 创建一个别名,然后更新配置,就可以解决这个问题。
-
可创建 DNS CNAME 记录,允许客户查找 vpc-lb-region1 .example.com,并解析xxxxxxx-REGION.lb.appdomain.cloud
- 在 CIS中,打开 可靠性 面板并选择 DNS。
- 向下滚动到 DNS 记录,创建一条类型为 CNAME,名称:vpc-lb-region1,TTL:自动,别名域名:VPC 负载均衡器主机名。
- 为 vpc-lb-region2 添加 DNS CNAME 记录。
-
现在调整全局负载平衡器,以使用新的 CNAME 记录。
- 打开可靠性面板,选择全局负载平衡器。
- 查找并编辑起源池,将起源 地址更改为 vpc-lb-region1.example.com。
- 对 vpc-lb-region2.example.com 重复上述步骤。
-
开启端到端安全性。
- 打开安全性面板,然后选择 TLS。
- 对于方式,选择端到端 CA 签名。 这将在全局负载平衡器上使用 HTTPS 连接,并在 VPC 负载平衡器上使用 HTTPS 连接。
在浏览器中打开 https://lb.example.com 验证成功
备用 2: 仅 DNS 方式,流量从客户机直接流向 VPC 负载均衡器
在此替代方法中,您将从 Let 's Encrypt 到 Secrets Manager 订购 lb.example.com
的 SSL 证书,并配置全局负载均衡器。
当前无法直接为 CIS 全局负载均衡器订购证书,但可以为 CNAME 记录订购一个证书。 因此,我们将创建一个 CNAME 来订购证书。
-
打开您先前创建的 CIS 服务,可以在 资源列表 中找到该服务
-
导航至可靠性下的全局负载平衡器,然后单击 DNS。
-
向下滚动到“DNS 记录”部分并创建新记录:
- 类型:
CNAME
- 名称:
lb
- TTL:
default (Automatic)
- 别名域名:
zzz.example.com
- 单击添加记录
- 类型:
-
在 Secrets Manager 中订购证书
- 打开 Secrets Manager 服务,然后选择左侧的 密钥。
- 单击 添加,然后单击 公用证书。 点击下一步。
- 填写以下表单:
- 名称-
lb-alias
。 - 描述-输入您选择的描述。
- 点击下一步。
- 在 认证中心 下,选择已配置的 Let 's Encrypt 认证中心引擎。
- 在 密钥算法 下,选择
RSA4096
- 捆绑软件证书-离开
- 自动证书旋转-离开
- 在 DNS 提供者 下,选择已配置的 DNS 提供者实例
- 单击 选择域
- 展开列出的域以查看子域列表,然后选中 lb.example.com 旁边的复选框,然后单击 完成。
- 名称-
- 单击下一步。
- 复审您的选择,然后单击 添加。
创建 HTTPS 侦听器:
-
导航至 VPC负载平衡器页面。
-
选择 vpc-lb-region1
-
在 前端侦听器下,单击 创建
- 协议:HTTPS
- 端口:443
- 后端池:同一区域中的池
- 选择当前区域作为 SSL 区域
- 选择您刚刚为 lb.example.com 创建的 SSL 证书订单名称
-
单击保存配置 HTTPS 监听器
在区域 2 的负载平衡器中重复上述步骤。
在浏览器中打开 lb.example.com 验证成功
故障转移测试
现在,您应该会看到大多数时间都在访问 区域 1 中的服务器,因为与 区域 2 中的服务器相比,分配的权重更高。 让我们介绍一下 region 1 源池中的运行状况检查故障。
-
导航至虚拟服务器实例的列表。
-
单击在区域 1 中专区 1 内运行的服务器旁边的三个点 (...),并单击停止。
-
对运行在区域 1 区域 2 的服务器重复同样的操作。
-
返回到 CIS 服务下的 GLB,并等待运行状态更改为严重。
-
现在,刷新域 URL 时,您应该会始终命中区域 2 中的服务器。
不要忘记启动1 区 1 号区和 2 号区的服务器。
除去资源
- 除去 CIS 服务下的全局负载均衡器、源池和运行状况检查。
- 删除Secrets Manager服务中的证书。
- 除去负载均衡器、VSI、子网和 VPC。
- 在资源列表下,删除本教程中使用的服务。