虚拟私有云中的公共前端和私有后端
本教程可能会发生成本。 使用 成本估算器 根据您的预计使用量生成成本估算。
本教程将指导您创建自己的 IBM Cloud® Virtual Private Cloud (VPC),其中包含多个子网以及每个子网中的一个虚拟服务器实例 (VSI)。 VPC 是共享云基础架构上与其他虚拟网络逻辑隔离的您自己的私有云。
子网是 IP 地址范围。 子网必须绑定到单个专区,不能跨多个专区或区域。 对于 VPC 的用途,子网的重要特征是子网可以彼此隔离,也可以按通常方式互连。 子网隔离可以通过安全组来实现,安全组充当防火墙,用于控制一个或多个虚拟服务器实例的入站和出站流量。
一个好的做法是有一个子网用于必须对外公开的资源。 限制访问的资源不应从外部直接访问,应放置在不同的子网中。 这种子网上的实例可以是后端数据库或者您不希望可公开访问的一些秘密存储。 您将定义安全组,允许或拒绝VSIs的流量。
简言之,使用 VPC,您可以:
- 创建软件定义的网络 (SDN),
- 隔离工作负载,
- 精细控制入站和出站流量。
目标
- 了解虚拟私有云可用的基础架构对象
- 了解如何创建虚拟私有云、子网和服务器实例
- 了解如何应用安全组以保护对服务器的访问
{: caption="*
- 管理员 (DevOps) 在云中设置所需的基础架构(VPC、子网、带规则的安全组、VSI)。
- 因特网用户向前端的 Web 服务器发出 HTTP/HTTPS 请求。
- 前端从安全的后端请求专用资源,并将结果提供给用户。
准备工作
创建虚拟私有云和子网
要加强服务器的安全性,建议仅允许连接到服务器上部署的应用程序所需的端口。 在本教程中,应用程序将是 Web 服务器,因此只需要允许端口 80 上的入站连接。
要对这些服务器执行维护任务,例如安装软件和执行操作系统升级,您将通过一个防御主机来执行。 堡垒主机是指配置了公共IP地址,可通过SSH访问的实例。 设置后,防御主机充当跳板机,允许安全地连接到 VPC 中供应的实例。
在此部分中,您将创建 VPC 和防御主机。
本教程还随附了配套 shell 脚本和 Terraform 模板,可用于生成将使用以下 UI 创建的资源。 它们 在此 Github 存储库中可用。
- 浏览至 Virtual Private Clouds 页面,然后单击 创建。
- 在新建虚拟私有云部分下:
- 输入 vpc-pubpriv 作为 VPC 的名称。
- 选择资源组。
- (可选)添加标记以组织您的资源。
- 取消勾选 默认安全组 中的 允许SSH 和 允许ping。 SSH 访问稍后将添加到维护安全组。 必须将维护安全组添加到实例以允许从防御服务器进行 SSH 访问。 本教程不需要 ping 访问权。
- 在 子网 下,更改专区 1 子网的名称。 单击画笔图标:
- 输入 vpc-secure-bastion-subnet 作为子网的唯一名称。
- 选择与 VPC 资源组相同的 资源组。
- 将缺省值保留在其他值中。
- 单击保存。
- 在 子网 下,更改专区 2 子网的名称。 单击画笔图标:
- 输入vpc-pubpriv-backend-subnet 作为子网的唯一名称。
- 选择与 VPC 资源组相同的 资源组。
- 将缺省值保留在其他值中。
- 单击保存。
- 在 子网 下,更改专区 3 子网的名称。 单击画笔图标:
- 输入 vpc-pubpriv-frontend-subnet 作为子网的唯一名称。
- 选择与 VPC 资源组相同的 资源组。
- 将缺省值保留在其他值中。
- 单击保存。
- 单击创建虚拟私有云。
要确认子网的创建,请前往 子网页面,等待状态变为可用。
创建和配置防御安全组
执行防御主机教程的此部分中描述的步骤来创建安全组,并为防御虚拟服务器实例配置入站规则。
创建防御实例
执行防御主机教程的此部分中描述的步骤来创建防御虚拟服务器实例。
使用维护访问规则配置安全组
执行防御主机教程的此部分中描述的步骤来创建安全组 vpc-secure-maintenance-sg。 在对虚拟服务器实例执行维护任务(例如,安装软件或更新操作系统)时,将使用此安全组。
创建一个后端安全组和VSI
在本节中,您将为后端创建一个安全组和一个虚拟服务器实例。
创建后端安全组
后端安全组控制后端服务器的入站和出站连接。
要为后端创建新的安全组:
- 在 网络下选择 安全组,然后单击 创建。
- 输入 vpc-pubpriv-backend-sg 作为名称,然后选择先前创建的 VPC。
- 选择与 VPC 相同的资源组。
- 单击创建安全组。
您将稍后编辑安全组以添加入站和出站规则。
创建后端虚拟服务器实例
在新创建的子网中创建虚拟服务器实例:
- 点击 子网 下的后端子网。
- 单击 附加资源,在 附加实例 下单击 创建。
- 要配置实例,请执行以下操作:
- 选择一个地点,确保以后再次使用同一地点。
- 将名称设置为 vpc-pubpriv-backend-vsi。
- 像先前一样选择资源组。
- 在 图像 下,单击 更改图像。 使用搜索字段来选择 Ubuntu Linux 作为 操作系统。 可以选取该映像的任何版本。
- 单击 更改概要文件,选择 计算 作为类别,并选取 cx2-2x4 (2 vCPUs 和 4 GB RAM) 作为概要文件。
- 将 SSH密钥设置为之前创建的SSH密钥。
- 在 高级选项 下,将 用户数据 设置为
这将在实例中安装简单的 Web 服务器。#!/bin/bash apt-get update apt-get install -y nginx echo "I'm the backend server" > /var/www/html/index.html service nginx start
- 在 联网下,选择您创建的 VPC。
- 确保选择了 虚拟网络接口,并将 vpc-pubpriv-backend-subnet 列示为子网。 单击该子网的“编辑”图标。
- 首先,在 网络连接和虚拟网络接口详细信息下,验证是否选择了 vpc-pubpriv-backend-subnet。 单击 下一步。
- 取消选中缺省安全组,而选中 vpc-pubpriv-backend-sg 和 vpc-secure-maintenance-sg。
- 在“IP 配置”对话框中,保留所有内容,然后单击 下一步。
- 最后,查看所有内容并通过单击 保存完成。
- 单击创建虚拟服务器实例。
创建前端安全组和VSI
与后端类似,您将创建一个前端虚拟服务器实例和一个安全组。
创建前端安全组
为前端创建新的安全组:
- 单击“网络”下的 安全组,然后单击 创建。
- 输入 vpc-pubpriv-frontend-sg 作为名称,然后选择先前创建的 VPC。
- 选择与 VPC 相同的资源组。
- 单击创建安全组。
创建前端虚拟服务器实例
在新创建的子网中创建虚拟服务器实例:
- 点击 子网 下的前端子网。
- 单击 附加资源,在 附加实例 下单击 创建。
- 要配置实例,请执行以下操作:
- 选择一个地点,确保以后再次使用同一地点。
- 将名称设置为 vpc-pubpriv-frontend-vsi。
- 像先前一样选择资源组。
- 在 图像 下,单击 更改图像。 使用搜索字段来选择 Ubuntu Linux 作为 操作系统。 可以选取该映像的任何版本。
- 单击 更改概要文件,选择 计算 作为类别,并选取 cx2-2x4 (2 vCPUs 和 4 GB RAM) 作为概要文件。
- 将 SSH 密钥设置为您早先创建的 SSH 密钥。
- 在 高级选项 下,将 用户数据 设置为
这将在实例中安装简单的 Web 服务器。#!/bin/bash apt-get update apt-get install -y nginx echo "I'm the frontend server" > /var/www/html/index.html service nginx start
- 在 联网下,选择您创建的 VPC。
- 确保选择了 虚拟网络接口,并将 vpc-pubpriv-fron往往-subnet 列示为子网。 单击该子网的“编辑”图标。
- 首先,在 网络连接和虚拟网络接口详细信息下,验证是否选择了 vpc-pubpriv-fron往往-subnet。 单击 下一步。
- 取消选中默认安全组,并选中 vpc-pubpriv-frontend-sg 和 vpc-secure-maintenance-sg。
- 在“IP 配置”对话框中,保留所有内容,然后单击 下一步。
- 最后,查看所有内容并通过单击 保存完成。
- 单击创建虚拟服务器实例。
实例启动并 运行后,选择前端 VSI vpc-pubpriv-fron往往-vsi,滚动到 具有虚拟网络接口的网络附件,然后从 eth0 的三个点菜单中选择 编辑浮动 IP。 单击 连接,然后 保留新的浮动 IP,并使用 vpc-pubpriv-fron往往-vsi-ip 作为名称。 完成 保留后,您可能必须刷新页面以查看新连接的 IP。
设置前端与后端之间的连接
所有服务器都处于运行状态后,在此部分中,您将设置连接以允许前端和后端服务器之间进行常规操作。
配置前端安全组
前端实例已安装其软件,但由于配置原因,无法访问该实例。
-
若要确认无法访问网络服务器,请打开浏览器,输入
http://<floating-ip-address-of-the-frontend-vsi>
,或使用:curl -v -m 30 http://<floating-ip-address-of-the-frontend-vsi>
此连接最终应该会超时。
-
要启用与前端实例上安装的 Web 服务器的入站连接,您需要打开 Web 服务器正在侦听的端口。
-
导航至网络部分的安全组,然后单击 vpc-pubpriv-frontend-sg。
-
单击 规则 选项卡,然后在 入站规则 下单击 创建。 添加下表中的规则,允许传入HTTP 请求和Ping(ICMP)。.
入站规则 协议 源类型 源 值 描述 TCP 任意 0.0.0.0/0 端口 80-80 此规则允许从任何 IP 地址到前端 Web 服务器的连接。 ICMP 任意 0.0.0.0/0 类型 :8,代码 :留空 此规则允许任何主机对前端服务器执行 ping 操作。 -
接下来,添加出站规则。 后端的端口取决于要在虚拟服务器上安装的软件。 本教程使用在端口 80 上侦听的 Web 服务器。 请参阅下表 出站规则 以获取值。
出站规则 协议 目标类型 目标 值 描述 TCP 安全组 vpc-pubpriv-backend-sg 端口 80-80 此规则允许前端服务器与后端服务器通信。 -
再次访问前端实例
http://<floating-ip-address-of-the-frontend-vsi>
,查看Web服务器的欢迎页面。
测试前端和后端之间的连接
后端服务器运行的 Web 服务器软件与前端服务器运行的相同。 可以将其视为是一个微服务,用于公开前端将调用的 HTTP 接口。 在此部分中,您将尝试从前端服务器实例连接到后端。
-
在 虚拟服务器实例 列表中,获取堡垒服务器主机( vpc-secure-bastion )的浮动IP地址以及前端( vpc-pubpriv-frontend-vsi )和后端( vpc-pubpriv-backend-vsi )服务器实例的私有IP地址。
-
使用
ssh
连接到前端虚拟服务器:ssh -J root@<floating-ip-address-of-the-bastion-vsi> root@<private-ip-address-of-the-frontend-vsi>
仅当 vpc-secure-maintenance-sg 已连接到前端实例时,才能通过防御主机通过 SSH 连接到前端。
-
调用后端 Web 服务器:
curl -v -m 30 http://<private-ip-address-of-the-backend-vsi>
30 秒后,调用将超时。 实际上,后端服务器的安全组尚未配置,因此不允许任何入站连接。
配置后端安全组
要允许与后端服务器的入站连接,您需要配置关联的安全组。
-
导航至网络部分的安全组,然后单击 vpc-pubpriv-backend-sg。
-
单击 规则 选项卡,然后在 入站规则 下单击 创建。 添加以下规则。
入站规则 协议 源类型 源 值 描述 TCP 安全组 vpc-pubpriv-fron余-sg 端口 80-80 此规则允许端口 80 上从前端服务器到后端服务器的入局连接。
确认连接
- 再次从前端服务器调用后端 Web 服务器:
curl -v -m 30 http://<private-ip-address-of-the-backend-vsi>
- 请求会迅速返回,并从后端 Web 服务器输出消息:
I'm the backend server
。 这将完成服务器之间连接的配置。
完成维护
由于前端和后端服务器软件已正确安装并运行,因此可以从维护安全组中除去这些服务器。
- 导航至网络部分的安全组,然后单击 vpc-secure-maintenance-sg。
- 选择 附加资源。
- 点击 “编辑接口”,展开并取消选中 vpc-pubpriv-frontend-vsi 和 vpc-pubpriv-backend-vsi 接口。
- 保存配置。
- 请再次访问前端实例
http://<floating-ip-address-of-the-frontend-vsi>
,确认其是否仍能正常工作。
从维护组中除去服务器后,就不能再使用 ssh
来访问这些服务器。 这些服务器只允许流量流至其 Web 服务器。
在本教程中,您部署了两个应用程序层:一个前端服务器(可通过公用因特网查看)和一个后端服务器(只能由前端服务器在 VPC 中进行访问)。 您配置了安全组规则来确保只允许该应用程序所需的特定端口。
除去资源
- 在 VPC基础设施控制台中,点击 “网络” 下的 “浮动IP”,然后点击VSIs的IP地址,在操作菜单中选择 “释放”。 确认您想要发布此 IP 地址。
- 接下来,通过单击相应的操作菜单,切换到 虚拟服务器实例,停止 和 删除 实例。
- 删除 VSI 之后,切换到子网。 如果子网具有连接的公共网关,那么单击子网名称。 在子网详细信息中,拆离公共网关。 可以从概述页面删除没有公共网关的子网。 删除子网。
- 删除子网后,切换到 VPC 选项卡并删除您的VPC。
使用控制台时,您可能需要刷新浏览器以在删除资源后查看更新后的状态信息。