教程:多云和混合环境中API网关的高可用性

NGINX | 2022年12月20日

多云部署已成为长期趋势。根据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网关的拓扑
图1:API Connectivity Manager支持API网关和服务的多云高可用部署

按照以下各节中的步骤完成本教程:

安装和配置 API Connectivity Manager

  1. 获取NGINX Management Suite试用版或付费订阅,其中包括Instance Manager和API Connectivity Manager,以及用作API网关的NGINX Plus和用于保护API的NGINX App Protect。开始免费试用NGINX Management Suite 30天。
  2. 安装NGINX Management Suite。在“安装Management Suite模块”部分,按照说明安装API Connectivity Manager(也可选择安装其他模块)。
  3. 添加许可证,为每个已安装的模块添加相应许可证。
  4. (可选。)设置TLS终止和mTLS,分别保护客户端与NGINX Management Suite之间的连接,以及API Connectivity Manager与数据平面上的NGINX Plus实例之间的流量。

将NGINX Plus实例部署为API网关

选择构成多云或混合基础设施的环境。本教程选择了AWS和GCP,并在每个云环境中分别安装一个NGINX Plus实例。在每个环境中,对将充当API网关的每台数据平面主机执行以下步骤:

  1. 安装NGINX Plus,所用操作系统须为受支持的操作系统。
  2. 安装NGINX JavaScript模块(njs)。
  3. 在/etc/nginx/nginx.conf的主(顶层)上下文中添加以下指令:
load_module modules/ngx_http_js_module.so;load_module modules/ngx_stream_js_module.so;
  1. 重启NGINX Plus,例如运行以下命令:
$ nginx -s reload

设置基础设施工作区

您可以在 API Connectivity Manager 中创建多个基础设施工作区(截至本文撰写时,最多可创建 10 个)。通过相互隔离的工作区,可以针对不同的业务线、开发团队、外部合作伙伴和云等应用特定的策略及身份验证和授权要求。

在API Connectivity Manager GUI中创建一个新工作区:

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

创建环境和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 Connectivity Manager的同一个API Gateway Cluster中部署的API网关如何应用相同的安全策略
图4:同一安全策略适用于部署在一个API Gateway Cluster中的所有API Gateway

创建环境和API Gateway Cluster
  1. 转到工作区,然后单击 创建环境按钮,如图5所示。
    图5:在基础设施工作区中创建新环境
  2. 在打开的“Create Environment”面板中,填写“Name”字段(图6中为“prod”),并根据需要填写“Description”字段,然后选择环境类型(此处选择“Prod”)。
    图6:为新环境命名并为其分配API网关集群
  3. 在“API Gateway Clusters”部分,填写“Name”和“Hostname”字段(图 6 中分别为“api-cluster”和“api.nginx.com”)。
  4. 点击“创建”按钮。此时将打开“环境已创建”面板,其中会显示需要在每个NGINX Plus实例上运行的命令,以便将其分配到API网关集群。为方便起见,相关命令见下文第7步。
将API网关实例分配到API网关集群

在每个NGINX Plus实例上重复以下操作:

  1. 使用“ssh”连接并登录该实例。
  2. 如果NGINX Agent已在运行,请将其停止:
$ systemctl stop nginx-agent
  1. 运行所选命令(可选择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
  1. 或
$ 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
  1. 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”)。
  2. 继续执行“应用全局策略”。

部署包含多个API网关集群的环境

对于包含多个API网关集群的环境,可将不同的安全策略应用于不同的NGINX Plus API网关实例,如图8所示。

此图显示在API Connectivity Manager中,不同的安全策略如何应用于部署在不同API Gateway Cluster中的API网关
图 8:不同的安全策略可应用于部署在不同 API Gateway Cluster 中的 API Gateway

创建环境和API Gateway Cluster
  1. 转到工作区,然后单击 Create Environment按钮,如图9所示。
    图9:在基础设施工作区中创建新环境
  2. 在打开的“Create Environment”面板中,填写“Name”字段(图10中为“prod”),并可选择填写“Description”字段,然后选择环境类型(此处选择“Prod”)。
    图10:为新环境命名并为其分配第一个API网关集群
  3. 在API Gateway Clusters部分,填写Name和Hostname字段(图 10 中分别为aws-cluster和api.nginx.com)。
  4. 单击 创建按钮。此时将打开“环境已创建”面板,其中显示需要在每个NGINX Plus实例上运行的命令,以将该实例分配给API网关集群。为方便起见,相关命令见下文步骤10。
  5. 返回Environment选项卡,然后点击 + Add区域右上角的API Gateway Clusters按钮,如图11所示。
    图11:向Environment添加另一个API Gateway Cluster
  6. 在创建API网关集群面板中,在名称字段中输入第二个集群的名称(图12中的gcp-cluster),并在主机名字段中输入与第一个集群相同的主机名(api.nginx.com)。
    图12:向环境中添加第二个API网关集群

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

图 13:部署在多个云环境中的 NGINX Plus 实例及独立 API Gateway 集群列表

将API网关实例分配到API网关集群

在每个NGINX Plus实例上重复以下操作:

  1. 使用“ssh”连接并登录该实例。
  2. 如果NGINX Agent已在运行,请将其停止:
$ systemctl stop nginx-agent
  1. 运行所选命令(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
  1. 或
$ 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
  1. 相应的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)。
  1. 转到要应用策略的API Gateway的Cluster选项卡(图16中的api-cluster)。点击Manage按钮,该按钮位于Policies表格右上角的上方。
    图16:管理API Gateway Cluster的策略
  2. 单击左侧导航栏中的“Global Policies”,然后单击该策略所在行最右侧列中的“…”图标(图17中的“TLS Backend”)。从下拉菜单中选择“+ Add Policy”。
    图17:向API Gateway集群添加全局策略


分享

相关博客文章

NGINX Plus R26 正式发布
NGINX | 2022/02/15

NGINX Plus R26 正式发布

NGINX Plus R26通过缓存JSON Web密钥集加快JWT验证,并强化TLS握手,从而提升安全性。NGINX JavaScript的新功能包括增强对异步函数的支持,以及实现WebCrypto API。

使用NGINX App Protect DoS保护gRPC应用,抵御严重的DoS攻击
NGINX | 2022/02/10

使用NGINX App Protect DoS保护gRPC应用,抵御严重的DoS攻击

gRPC具备开发人员设计和部署现代应用所需的速度与灵活性,但其开放性也使其极易受到第7层DoS攻击。NGINX App Protect DoS可保护gRPC应用免受此类破坏性攻击。

Ingress Controller 选型指南(第 2 部分):风险与面向未来的规划
NGINX | 2021/09/13

Ingress Controller 选型指南(第 2 部分):风险与面向未来的规划

了解选择错误的Ingress控制器可能带来的风险,以及如何从关键方面着手,让您的选择更好地适应未来需求。

NGINX Plus R19 正式发布
NGINX | 2019/09/03

NGINX Plus R19 正式发布

NGINX Plus R19扩展了监控功能,不仅提供更多指标,还新增了指标分析方式;增加试运行模式,用于测试限速效果;增强键值存储,以支持IP地址范围;并使限速更加动态。

NGINX现已正式加入F5
NGINX | 2019/05/09

NGINX现已正式加入F5

NGINX现已正式成为F5的一部分。Gus Robertson现任F5 NGINX业务部门负责人。他阐述了两家公司在人才、文化和愿景方面融合的价值,以及双方将如何携手增强NGINX的开源产品和商业产品。

使用NGINX和NGINX Plus实现高性能缓存
NGINX | 2016/08/24

使用NGINX和NGINX Plus实现高性能缓存

我将介绍NGINX在内容缓存和性能方面的工作原理,并分享一些控制NGINX内容缓存方式的技巧。