多云部署模式将持续存在。F5 的《2022 年应用策略现状》报告显示,77% 的企业跨多云环境运行应用。通过采用多云和混合架构,企业可获得诸多重要优势,例如提高效率、降低停机风险和避免厂商锁定。但这些复杂架构还是带来了独特的挑战。
接受 F5 调查的软件和 IT 领导者将以下几点列为其所面临的主要多云挑战:
- 可视性(45% 的受访者)
- 安全防护 (44%)
- 应用迁移 (41%)
- 性能优化 (40%)
在多云环境中管理微服务的 API 尤为复杂。如果不实施整体 API 策略,平台运维团队保护和管理 API 的速度将跟不上 API 在公有云、本地和边缘环境激增的速度。我们把这个问题称为 API 蔓延,在之前的一篇博文中,我们解释了为何它会构成重大威胁。
您需要采用多云 API 策略,以周全的方法来统一分布在多云环境中的微服务,从而确保端到端连通性。两种常见的多云和混合部署场景包括:
- 在多云/混合环境中部署不同的服务 —— 或出于成本效益考虑或由于不同的服务与不同的用户群密切相关,您需要在不同的位置运行不同的应用和 API。
- 在多云/混合环境中部署相同的服务 —— 您需要确保部署在不同位置的相同应用的高可用性。
在接下来的教程中,我们将 分步演示如何在第二种部署场景中使用 API Connectivity Manager(F5 NGINX Management Suite 的一部分),即在多个环境中部署相同的服务以确保高可用性。这有助于消除多云或混合生产环境中出现的单点故障:如果一个网关实例发生故障,另一个网关实例将快速接管,这样即使一个云平台出现故障,您的客户也不会遭遇服务中断问题。
API Connectivity Manager 是一个不受运行时限制的云原生解决方案,用于部署、管理和保护 API。通过单一管理平面,您可以管理跨公有云、本地及边缘环境部署的 NGINX Plus API 网关以及开发者门户的所有 API 操作。这有助于您的平台运维团队全面了解 API 流量情况,并轻松地对每个环境实施一致的治理和安全策略。
在多云部署中实现 API 网关的高可用性
正如引言所述,在本教程中,我们将配置 API Connectivity Manager,以确保在多个部署环境中运行的服务的高可用性。具体来说,我们将部署 NGINX Plus 作为 API 网关,以便将流量路由到服务 A 和服务 B——这两个服务在 Google Cloud Platform (GCP) 和 Amazon Web Services (AWS) 这两个公有云中运行。(该设置同样适用于任何部署环境的组合,包括 Microsoft Azure 和本地数据中心。)
图 1 描述了本教程使用的拓扑结构。
请按照下列部分中的步骤来完成本教程的学习:
安装和配置 API Connectivity Manager
- 获取 NGINX Management Suite 试用版或付费订阅 NGINX Management Suite,其中包括 Instance Manager、API Connectivity Manager、NGINX Plus(作为 API 网关)及 NGINX App Protect(可保护 API)。立即开始 NGINX Management Suite 30 天免费试用。
- 安装 NGINX Management Suite。在“安装 Management Suite 模块”章节,按照 API Connectivity Manager(以及其他可选模块)相关说明进行安装。
- 为每个已安装的模块添加许可。
- (可选)设置 TLS 终端和 mTLS,以分别保护客户端与 NGINX Management Suite 的连接以及数据平面上 API Connectivity Manager 和 NGINX Plus 实例之间的流量。
部署 NGINX Plus 实例作为 API 网关
选择用来构成您的多云或混合基础架构的环境。在本教程中,我们选择使用 AWS 和 GCP,并将在每个云中都安装一个 NGINX Plus 实例。无论何种环境,在每个将充当 API 网关的数据平面主机上执行下列步骤:
- 在支持的操作系统上安装 NGINX Plus。
- 安装 NGINX JavaScript 模块 (njs)。
-
在 /etc/nginx/nginx.conf 的主(顶级)上下文中添加以下指令:
load_module modules/ngx_http_js_module.so; load_module modules/ngx_stream_js_module.so;
-
重启 NGINX Plus,例如通过运行这个命令:
$ nginx -s reload
设置基础架构工作区
您可以在 API Connectivity Manager 中创建多个基础架构工作区(截至本文撰写时最多可创建 10 个)。借助隔离的工作区,您可以针对不同的业务线、开发人员团队、外部合作伙伴和云等对象应用不同的策略和身份验证/授权要求。
在 API Connectivity Manager GUI 中操作,新建一个工作区:
- 点击左侧导航栏中的 Infrastructure(基础架构)。
-
点击 + Create(+ 创建)按钮,新建一个工作区,如图 2 所示。
-
在打开的 Create Workspace(创建工作区)面板中,填写 Name(名称)字段(如图 3 所示)。可以选择填写 Description(描述)字段和 Workspace Contact Information(工作区联系人信息)部分中的字段。基础架构管理员(例如您的平台运维团队)可使用联系人信息向工作区的用户提供有关状态或问题的最新动态。
- 点击 Create(创建)按钮。
创建环境和 API 网关集群
在 API Connectivity Manager 中,环境是专用资源(如 API 网关或 API 开发人员门户)的逻辑分组。您可为每个工作区创建多个环境(截至本文撰写时最多可创建 25 个);它们通常对应于应用开发和部署的不同阶段,例如编码、测试和生产,但也可以用于任何所需用途。
在一个环境中,API 网关集群是充当 API 网关的 NGINX Plus 实例的逻辑分组。单个环境可以有多个 API 网关集群,这些集群共享同一个主机名(例如,本教程中为 api.nginx.com)。一个 API 网关集群中的 NGINX Plus 实例可以位于多种基础架构中,例如多个云中。
可通过两种方法在 API Connectivity Manager 中配置环境,以确保 API 网关的 active-active 高可用性:
部署多个 API 网关集群的主要原因是,您可以对每个集群应用不同的安全策略。
在部署 NGINX Plus 实例作为 API 网关时,我们在 AWS 和 GCP 中各部署了一个 NGINX Plus 实例。本教程使用了相同的实例来演示两种环境类型(具有一个 API 网关集群或多个 API 网关集群);若要在单个工作区部署两种环境类型,需为第二种环境创建额外的 NGINX Plus 实例。
部署使用一个 API 网关集群的环境
对于具有一个 API 网关集群的环境,相同的安全防护策略可应用于所有 NGINX Plus API 网关实例,如图 4 所示。
创建环境和 API 网关集群
-
导航到您的工作区,并点击 Create Environment (创建环境)按钮,如图 5 所示。
-
在打开的 Create Environment(创建环境)面板中,填写 Name(名称)字段(图 6 中的 prod)和可选 Description(描述)字段,并选择环境类型(此处我们选择 Prod)。
- 在 API Gateway Clusters(API 网关集群)部分,填写 Name(名称)和 Hostname(主机名)字段(图 6 中的 api-cluster 和 api.nginx.com)。
-
点击 Create(创建)按钮。
Environment Created(环境已创建)面板打开,显示为将其分配给 API 网关集群,您需要在每个 NGINX Plus 实例上运行的命令。为了方便起见,我们在下面的第七步中显示这些命令。
将 API 网关实例分配给 API 网关集群
在每个 NGINX Plus 实例上重复执行以下操作:
- 使用
ssh
连接并登录到实例。 -
如果 NGINX Agent 已经在运行,则将其停止:
$ systemctl stop nginx-agent
-
运行您选择的命令(
curl
或wget
)下载和安装 NGINX Agent 安装包:-
如果没有在“ 安装和配置 API Connectivity Manager”中启用 mTLS,则:
- 将
‑k
标记添加到curl
命令 - 将
--no-check-certificate
标记添加到wget
命令
- 将
- 对于
<NMS_FQDN>
, 使用您的 NGINX Management Suite 服务器的 IP 地址或 FQDN 进行替换。 - 对于
<cluster_name>
, 使用 API 网关集群(在本教程中为api-cluster
)的名称进行替换。
$ curl [-k] https://<NMS_FQDN>/install/nginx-agent > install.sh && sudo sh -install.sh -g <cluster_name> && sudo systemctl start nginx-agent
或者
$ wget [--no-check-certificate] https://<NMS_FQDN>/install/nginx-agent --no-check-certificate -O install.sh && sudo sh install.sh -g <cluster_name> && sudo systemctl start nginx-agent
现在 NGINX Plus 实例出现在了 api-cluster 的 Cluster(集群)窗口中的 Instances(实例)部分,如图 7 所示。
-
- 继续应用全局策略。
部署使用多个 API 网关集群的环境
对于具有多个 API 网关集群的环境,不同的安全防护策略可应用于不同的 NGINX Plus API 网关实例,如图 8 所示。
创建环境和 API 网关集群
-
导航到您的工作区,并点击 Create Environment(创建环境)按钮,如图 9 所示。
-
在打开的 Create Environment(创建环境)面板中,填写 Name(名称)字段(图 10 中的 prod)和可选 Description(描述)字段,并选择环境类型(此处我们选择 Prod)。
- 在 API Gateway Clusters(API 网关集群)部分,填写 Name(名称)和 Hostname(主机名)字段(图 10 中的 aws-cluster 和 api.nginx.com)。
-
点击 Create(创建)按钮。
Environment Created(环境已创建)面板打开,显示为将其分配给 API 网关集群,您需要在每个 NGINX Plus 实例上运行的命令。为了方便起见,我们在下面的第十步中显示这些命令。
-
返回 Environment(环境)选项卡,点击 API Gateway Clusters(API 网关集群)部分右上角的 + Add(+ 添加)按钮,如图 11 所示。
-
在 Create API Gateway Cluster(创建 API 网关集群)面板上,在 Name(名称)字段中填写第二个集群的名称(图 12 中的 gcp-cluster),在 Hostname(主机名)字段中填写与第一个集群相同的主机名 (api.nginx.com)。
现在两个 API 网关集群出现在 Prod 环境的 API 网关集群中,如图 13 所示。
将 API 网关实例分配给 API 网关集群
在每个 NGINX Plus 实例上重复执行以下操作:
- 使用
ssh
连接并登录到实例。 -
如果 NGINX Agent 已经在运行,则将其停止:
$ systemctl stop nginx-agent
-
运行您选择的命令(
curl
或wget
)以下载和安装 NGINX Agent 安装包:-
如果没有在“安装和配置 API Connectivity Manager”中启用 mTLS,则:
- 将
‑k
标记添加到curl
命令 - 将
--no-check-certificate
标记添加到wget
命令
- 将
- 对于
<NMS_FQDN>
, 使用您的 NGINX Management Suite 服务器的 IP 地址或全限定域名进行替换。 - 对于
<cluster_name>
, 使用相应的 API 网关集群名称进行替换(在本教程中,aws-cluster
代表部署在 AWS 中的实例,gcp-cluster
代表部署在 GCP 中的实例)。
$ curl [-k] https://<NMS_FQDN>/install/nginx-agent > install.sh && sudo sh -install.sh -g <cluster_name> && sudo systemctl start nginx-agent
或者
$ wget [--no-check-certificate] https://<NMS_FQDN>/install/nginx-agent --no-check-certificate -O install.sh && sudo sh install.sh -g <cluster_name> && sudo systemctl start nginx-agent
现在相应的 NGINX Plus 实例出现在了 aws-cluster(图 14)和 gcp-cluster(图 15)的 Cluster(集群)窗口中的 Instances(实例)部分。
应用全局策略
现在您可以添加全局策略以应用于 API 网关集群中的所有 NGINX Plus 实例。例如,为了保护客户端对您的 API 的访问,您可以应用 OpenID Connect Relying Party 或 TLS Inbound 策略。为了确保 API 网关和暴露 API 的后端 service 之间的连接,您可应用 TLS backend 策略。有关 TLS 策略的更多信息,请参阅 API Connectivity Manager 文档。
-
导航到您想要应用策略的 API 网关的 Cluster(集群)标签(图 16 中的 api-cluster)。点击位于“策略”表右上角的 Manage(管理)按钮。
-
点击左侧导航栏中的“全局策略”,然后点击策略行最右列中的 … 图标(图 17 中的 TLS 后端)。从下拉菜单中选择 + Add Policy(+ 添加策略)。
结语
管理多云和混合架构并非易事。这些环境错综复杂,其中应用频繁更新,往往很难观测和保护。
但借助正确的工具,您能够避免厂商锁定问题,同时保持所需的敏捷性和灵活性,从而加速将新功能推向市场。作为一款云原生工具,NGINX API Connectivity Manager 可为您提供在多云和混合环境中管理 API 所需的可扩展性、可见性、安全防护及高效治理能力。
立即开启 NGINX Management Suite 30 天免费试用,包括 API Connectivity Manager、NGINX Plus(作为 API 网关)及 NGINX App Protect(可保护 API)。
-