多云部署已成为长期趋势。根据F5的《2022年应用策略现状》报告,77%的企业在多个云环境中运行应用。采用多云和混合架构可带来重要优势,例如提高效率、降低中断风险并避免供应商锁定。但这些复杂架构也带来了独特的挑战。
在F5的调查中,软件和IT领导者将以下问题列为主要的多云挑战:
- 可见性(45%的受访者)
- 安全性(44%)
- 迁移应用(41%)
- 优化性能(40%)
在多云环境中管理微服务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试用版或付费订阅,其中包括Instance Manager和API Connectivity Manager,以及用作API网关的NGINX Plus和用于保护API的NGINX App Protect。开始免费试用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”。
- 点击 + 创建按钮以创建新工作区,如图 2 所示。图 2:创建新的基础设施工作区

- 在打开的“创建工作区”面板中,填写“名称”字段(图3中为“demo”)。还可选择填写“描述”字段和“工作区联系信息”部分中的字段。基础设施管理员(例如,贵公司的平台运维团队)可以使用这些联系信息,向工作区用户提供状态或问题的最新信息。图3:为新基础设施工作区命名并添加联系信息

- 单击 创建按钮。
创建环境和API网关集群
在 API Connectivity Manager 中,环境是专用资源(例如 API 网关或 API 开发者门户)的逻辑分组。每个工作区可以创建多个环境(截至本文撰写时最多可创建 25 个)。这些环境通常对应应用开发和部署的不同阶段,例如编码、测试和生产,但也可根据需要用于其他用途。
在一个环境中,API网关集群是由充当API网关的NGINX Plus实例组成的逻辑分组。一个环境可以包含多个共享同一主机名的API网关集群(例如本教程中的api.nginx.com)。API网关集群中的NGINX Plus实例可以位于多种类型的基础设施中,例如多个云环境。
可通过两种方式在API Connectivity Manager中配置Environment,以实现API网关的双活高可用性:
部署多个API Gateway Cluster的主要原因是可以为每个集群应用不同的安全策略集。
在将NGINX Plus实例部署为API网关中,我们部署了两个NGINX Plus实例,一个位于AWS,另一个位于GCP。本教程使用相同的实例来说明两种Environment类型(使用单个API Gateway Cluster或多个API Gateway Cluster);如果要在一个Workspace中部署这两种Environment类型,则需要为第二个Environment创建额外的NGINX Plus实例。
部署包含一个API网关集群的环境
对于包含一个API网关集群的环境,所有NGINX Plus API网关实例均应用相同的安全策略,如图4所示。

创建环境和API Gateway Cluster
- 转到工作区,然后单击 创建环境按钮,如图5所示。图5:在基础设施工作区中创建新环境

- 在打开的“Create Environment”面板中,填写“Name”字段(图6中为“prod”),并根据需要填写“Description”字段,然后选择环境类型(此处选择“Prod”)。图6:为新环境命名并为其分配API网关集群

- 在“API Gateway Clusters”部分,填写“Name”和“Hostname”字段(图 6 中分别为“api-cluster”和“api.nginx.com”)。
- 点击“创建”按钮。此时将打开“环境已创建”面板,其中会显示需要在每个NGINX Plus实例上运行的命令,以便将其分配到API网关集群。为方便起见,相关命令见下文第7步。
将API网关实例分配到API网关集群
在每个NGINX Plus实例上重复以下操作:
- 使用“
ssh”连接并登录该实例。 - 如果NGINX Agent已在运行,请将其停止:
$ systemctl stop nginx-agent- 运行所选命令(可选择
curl或wget)以下载并安装NGINX Agent软件包:
$ 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下,如图7所示。图7:单个API网关集群对部署在多个云中的NGINX Plus实例进行分组

- 如果在“安装和配置 API Connectivity Manager”中未启用 mTLS,请添加:
- 向
‑k命令添加curl标志 - The
--no-check-certificate标志,用于wget命令
- 向
- 对于
<NMS_FQDN>,请替换为NGINX Management Suite服务器的IP地址或完全限定域名。 - 对于“
<cluster_name>”,请替换为API网关集群的名称(本教程中为“api-cluster”)。
- 如果在“安装和配置 API Connectivity Manager”中未启用 mTLS,请添加:
- 继续执行“应用全局策略”。
部署包含多个API网关集群的环境
对于包含多个API网关集群的环境,可将不同的安全策略应用于不同的NGINX Plus API网关实例,如图8所示。

创建环境和API Gateway Cluster
- 转到工作区,然后单击 Create Environment按钮,如图9所示。图9:在基础设施工作区中创建新环境

- 在打开的“Create Environment”面板中,填写“Name”字段(图10中为“prod”),并可选择填写“Description”字段,然后选择环境类型(此处选择“Prod”)。图10:为新环境命名并为其分配第一个API网关集群

- 在API Gateway Clusters部分,填写Name和Hostname字段(图 10 中分别为aws-cluster和api.nginx.com)。
- 单击 创建按钮。此时将打开“环境已创建”面板,其中显示需要在每个NGINX Plus实例上运行的命令,以将该实例分配给API网关集群。为方便起见,相关命令见下文步骤10。
- 返回Environment选项卡,然后点击 + Add区域右上角的API Gateway Clusters按钮,如图11所示。图11:向Environment添加另一个API Gateway Cluster

- 在创建API网关集群面板中,在名称字段中输入第二个集群的名称(图12中的gcp-cluster),并在主机名字段中输入与第一个集群相同的主机名(api.nginx.com)。图12:向环境中添加第二个API网关集群

现在,这两个API网关集群显示在API网关集群页面的Prod环境下,如图13所示。

将API网关实例分配到API网关集群
在每个NGINX Plus实例上重复以下操作:
- 使用“
ssh”连接并登录该实例。 - 如果NGINX Agent已在运行,请将其停止:
$ systemctl stop nginx-agent- 运行所选命令(
curl或wget),下载并安装NGINX Agent软件包:
$ 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)。图14:跨多个云的环境中两个API网关集群中的第一个
图15:跨多个云的环境中两个API网关集群中的第二个
应用全局策略
现在,您可以添加适用于API网关集群中所有NGINX Plus实例的全局策略。例如,要保护客户端对API的访问,可以应用OpenID Connect信赖方或TLS入站策略。要保护API网关与公开API的后端服务之间的连接,请应用TLS后端策略。有关TLS策略的更多信息,请参阅API Connectivity Manager文档。
总结
管理多云和混合架构并非易事。这类环境十分复杂,其中的应用变化迅速,通常难以观测和保护。不过,借助合适的工具,您可以避免供应商锁定,同时保持敏捷性和灵活性,从而更快地向市场推出新功能。作为一款云原生工具,NGINX的API Connectivity Manager可提供管理多云和混合环境中API所需的可扩展性、可见性、治理和安全性。立即开始NGINX Management Suite 30天免费试用,其中包括API Connectivity Manager、作为API网关的NGINX Plus以及用于保护API的NGINX App Protect。- 如果在“安装和配置API Connectivity Manager”中未启用mTLS,请添加:
- 向
‑k标志添加到curl命令中 - 用于
--no-check-certificate命令的wget标志
- 向
- 对于
<NMS_FQDN>,请替换为NGINX Management Suite服务器的IP地址或完全限定域名。 - 对于
<cluster_name>,请替换为相应API网关集群的名称(在本教程中,部署在AWS中的实例使用aws‑cluster,部署在GCP中的实例使用gcp‑cluster)。
- 如果在“安装和配置API Connectivity Manager”中未启用mTLS,请添加:
- 转到要应用策略的API Gateway的Cluster选项卡(图16中的api-cluster)。点击Manage按钮,该按钮位于Policies表格右上角的上方。图16:管理API Gateway Cluster的策略

- 单击左侧导航栏中的“Global Policies”,然后单击该策略所在行最右侧列中的“…”图标(图17中的“TLS Backend”)。从下拉菜单中选择“+ Add Policy”。图17:向API Gateway集群添加全局策略

关于作者

相关博客文章
NGINX Plus R26 正式发布
NGINX Plus R26通过缓存JSON Web密钥集加快JWT验证,并强化TLS握手,从而提升安全性。NGINX JavaScript的新功能包括增强对异步函数的支持,以及实现WebCrypto API。
使用NGINX App Protect DoS保护gRPC应用,抵御严重的DoS攻击
gRPC具备开发人员设计和部署现代应用所需的速度与灵活性,但其开放性也使其极易受到第7层DoS攻击。NGINX App Protect DoS可保护gRPC应用免受此类破坏性攻击。
Ingress Controller 选型指南(第 2 部分):风险与面向未来的规划
了解选择错误的Ingress控制器可能带来的风险,以及如何从关键方面着手,让您的选择更好地适应未来需求。
NGINX Plus R19 正式发布
NGINX Plus R19扩展了监控功能,不仅提供更多指标,还新增了指标分析方式;增加试运行模式,用于测试限速效果;增强键值存储,以支持IP地址范围;并使限速更加动态。
NGINX现已正式加入F5
NGINX现已正式成为F5的一部分。Gus Robertson现任F5 NGINX业务部门负责人。他阐述了两家公司在人才、文化和愿景方面融合的价值,以及双方将如何携手增强NGINX的开源产品和商业产品。
