博客 | NGINX

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

NGINX-F5-horiz-black-type-RGB 的一部分
阿卡什·阿南塔纳拉亚南 缩略图
阿卡什·阿南塔纳拉亚南
2022 年 12 月 20 日发布

多云部署将会持续存在。 根据 F5 2022 年应用战略状况报告,77% 的企业跨多云运营应用。 采用多云和混合架构可带来重要的好处,例如提高效率、降低停机风险以及避免供应商锁定。 但这些复杂的架构也带来了独特的挑战。

F5 调查的软件和 IT 领导者将以下列为他们面临的最大多云挑战:

  • 可见性(45% 的受访者)
  • 安全(44%)
  • 迁移应用程序(41%)
  • 优化性能(40%)

在多云环境中管理微服务的 API 尤其复杂。 如果没有整体的 API 策略,API 在公共云、本地和边缘环境中的激增速度将超过平台运营团队保护和管理它们的速度。 我们将这个问题称为API 蔓延,在之前的文章中我们解释了为什么它是一个如此严重的威胁。

您需要一个多云 API 策略,以便您可以实施一种周到的方法来统一您的微服务(现在分布在多个云中),以确保端到端的连接。 多云和混合部署的两种常见场景是:

  • 多云/混合环境中的不同服务——您需要在不同位置操作不同的应用和 API,可能是为了提高成本效益,或者因为不同的服务与不同的用户组相关。
  • 多云/混合环境中的相同服务- 您需要确保部署在不同位置的相同应用的高可用性

在下面的教程中,我们将逐步展示如何在第二种场景中使用API 连接管理器F5 NGINX 管理套件的一部分):在多个环境中部署相同的服务以实现高可用性。 这消除了多云或混合生产环境中的单点故障:如果一个网关实例发生故障,另一个网关实例将接管,即使一个云出现故障,您的客户也不会遇到中断。

API Connectivity Manager 是一种云原生、与运行时无关的解决方案,用于部署、管理和保护 API。 您可以通过单一窗口管理跨公共云、本地和边缘环境部署的 NGINX Plus API 网关和开发人员门户的所有 API 操作。 这使您的平台运营团队能够全面了解 API 流量,并可以轻松地为每个环境应用一致的治理和安全策略。

在多云部署中为 API 网关实现高可用性

正如介绍中所提到的,在本教程中,我们将配置 API 连接管理器,以实现在多个部署环境中运行的服务的高可用性。 具体来说,我们将 NGINX Plus 部署为 API 网关,将流量路由到两个服务(服务 A服务 B ),这两个服务在两个公共云(Google Cloud Platform (GCP) 和 Amazon Web Services (AWS))中运行。 (该设置同样适用于任何混合部署环境,包括 Microsoft Azure 和本地数据中心。)

图 1 描述了本教程中使用的拓扑。

客户端访问跨两个云部署的高可用性 API 网关的拓扑
图 1: API 连接管理器支持 API 网关和服务的多云 HA 部署

按照以下部分中的步骤完成本教程:

安装并配置 API 连接管理器

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

将 NGINX Plus 实例部署为 API 网关

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

  1. 支持的操作系统安装 NGINX Plus
  2. 安装 NGINX JavaScript 模块(njs)。
  3. /etc/nginx/nginx.conf中的主(顶层)上下文中添加以下指令:

    load_module 模块/ngx_http_js_module.so;load_module 模块/ngx_stream_js_module.so;
    
  4. 重新启动 NGINX Plus,例如运行以下命令:

    $ nginx -s 重新加载
    

设置基础设施工作区

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

在 API 连接管理器 GUI 中创建一个新的工作区:

  1. 单击左侧导航栏中的“基础设施”
  2. 点击+Create按钮,创建一个新的工作区,如图2所示。

    图 2: 创建新的基础设施工作区
  3. 在打开的创建工作区面板中,填写名称字段(图3中的演示)。 (可选)填写描述字段和工作区联系信息部分中的字段。 基础设施管理员(例如,您的平台运营团队)可以使用联系信息向工作区用户提供有关状态或问题的更新。

    图 3: 命名新的基础设施工作区并添加联系信息
  4. 单击创建按钮。

创建环境和 API 网关集群

在 API Connectivity Manager 中,环境是专用资源(例如 API 网关或 API 开发人员门户)的逻辑分组。 您可以为每个工作区创建多个环境(撰写本文时最多 25 个);它们通常对应于应用程序开发和部署的不同阶段,例如编码、测试和生产,但它们可以满足您想要的任何目的。

在环境中,API 网关集群是充当 API 网关的 NGINX Plus 实例的逻辑分组。 单个环境可以有多个共享相同主机名的 API 网关集群(例如,本教程中的api.nginx.com )。 API 网关集群中的 NGINX Plus 实例可以位于多种类型的基础设施中,例如在多个云中。

有两种方法可以在 API 连接管理器中配置环境,以实现 API 网关的主动主动高可用性:

部署多个 API 网关集群的主要原因是您可以对每个集群应用不同的安全策略集。

将 NGINX Plus 实例部署为 API 网关中,我们部署了两个 NGINX Plus 实例 – 一个在 AWS 中,另一个在 GCP 中。 本教程使用相同的实例来说明两种环境类型(具有单个 API 网关集群或多个 API 网关集群);如果您想在单个工作区中部署两种环境类型,则需要为第二个环境创建额外的 NGINX Plus 实例。

部署具有一个 API 网关集群的环境

对于具有一个 API 网关集群的环境,相同的安全策略适用于所有 NGINX Plus API 网关实例,如图 4 所示。

该图展示了如何将相同的安全策略应用于 API 连接管理器中一个 API 网关集群中部署的 API 网关
图 4: 相同的安全策略适用于部署在一个 API 网关集群中的 API 网关
创建环境和 API 网关集群
  1. 导航到您的工作区并单击创建环境按钮,如图 5 所示。

    图 5: 在基础设施工作区中创建新环境
  2. 在打开的创建环境面板中,填写名称字段(图 6 中的prod )和可选的描述字段,并选择环境类型(这里我们选择Prod )。

    图 6: 命名新环境并为其分配 API 网关集群
  3. API Gateway Clusters部分,填写NameHostname字段(图 6 中的api-clusterapi.nginx.com )。
  4. 单击创建按钮。

    打开“环境创建”面板,显示您需要在每个 NGINX Plus 实例上运行的命令,以将其分配给 API 网关集群。 为了方便起见,我们在下面的步骤 7中显示命令。

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

在每个 NGINX Plus 实例上重复

  1. 使用ssh连接并登录实例。
  2. 如果 NGINX 代理已在运行,请停止它:

    $ systemctl 停止 nginx 代理
    
  3. 运行你选择的命令( curlwget )来下载并安装 NGINX Agent 包:

    • 如果您没有在安装和配置 API 连接管理器中启用 mTLS,请添加:

      • curl命令的‑k标志
      • wget命令的--no-check-certificate标志
    • 为了 <NMS_FQDN>,替换您的 NGINX 管理套件服务器的 IP 地址或完全限定域名。
    • 为了 <集群名称>,替换 API 网关集群的名称(API 集群 在本教程中)。
    $ curl [-k] https://<NMS_FQDN>/安装/nginx-agent>安装.sh&&sudo sh-安装.sh-g <集群名称> && sudo systemctl 启动 nginx-agent
    

    或者

    $ wget [--no-check-certificate] https://<NMS_FQDN>/install/nginx-agent --no-check-certificate -O install.sh && sudo sh install.sh -g <集群名称> && sudo systemctl 启动 nginx-agent
    

    NGINX Plus 实例现在出现在api-clusterCluster窗口的Instances部分,如图 7 所示。

    图 7: 单个 API 网关集群将部署在多个云中的 NGINX Plus 实例组合在一起
  4. 继续应用全球政策

部署具有多个 API 网关集群的环境

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

该图展示了如何将不同的安全策略应用于 API 连接管理器中单独 API 网关集群中部署的 API 网关
图 8: 不同的安全策略可以应用于部署在
单独的 API 网关集群
创建环境和 API 网关集群
  1. 导航到您的工作区并单击创建环境按钮,如图 9 所示。

    图 9: 在基础设施工作区中创建新环境
  2. 在打开的创建环境面板中,填写名称字段(图 10 中的prod )和可选的描述字段,并选择环境类型(这里我们选择Prod )。

    图 10: 命名新环境并为其分配第一个 API 网关集群
  3. API Gateway Clusters部分中,填写NameHostname字段(在图 10 中,它们是aws-clusterapi.nginx.com )。
  4. 单击创建按钮。

    打开“环境创建”面板,显示您需要在每个 NGINX Plus 实例上运行的命令,以将其分配给 API 网关集群。 为了方便起见,我们在下面的第 10 步中显示命令。

  5. 导航回“环境”选项卡,然后单击“API 网关集群”部分右上角的“+ 添加”按钮,如图 11 所示。

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

    图 12: 将第二个 API 网关集群添加到环境中

两个 API 网关集群现在出现在生产环境的API 网关集群上,如图 13 所示。

图 13: 部署在多个云和单独的 API 网关集群中的 NGINX Plus 实例列表
将 API 网关实例分配给 API 网关集群

在每个 NGINX Plus 实例上重复

  1. 使用ssh连接并登录实例。
  2. 如果 NGINX 代理已在运行,请停止它:

    $ systemctl 停止 nginx 代理
    
  3. 运行你选择的命令( curlwget )来下载并安装 NGINX Agent 包:

    • 如果您没有在安装和配置 API 连接管理器中启用 mTLS,请添加:

      • curl命令的‑k标志
      • wget命令的--no-check-certificate标志
    • 为了 <NMS_FQDN>,替换您的 NGINX 管理套件服务器的 IP 地址或完全限定域名。
    • 为了 <集群名称>,替换相应的 API 网关集群的名称(在本教程中, aws 集群 对于部署在 AWS 中的实例,以及 gcp 集群 对于在 GCP 中部署的实例)。
    $ curl [-k] https://<NMS_FQDN>/安装/nginx-agent>安装.sh&&sudo sh-安装.sh-g <集群名称> && sudo systemctl 启动 nginx-agent
    

    或者

    $ wget [--no-check-certificate] https://<NMS_FQDN>/install/nginx-agent --no-check-certificate -O install.sh && sudo sh install.sh -g <集群名称> && sudo systemctl 启动 nginx-agent
    

    适当的 NGINX Plus 实例现在出现在aws‑cluster (图 14)和gcp‑cluster (图 15)的Cluster窗口的Instances部分中。

    图 14: 跨多云环境的两个 API 网关集群中的第一个
    图 15: 跨多个云环境的两个 API 网关集群中的第二个

    应用全局策略

    现在,您可以添加适用于 API 网关集群中所有 NGINX Plus 实例的全局策略。 例如,为了保护客户端对您的 API 的访问,您可以应用OpenID Connect 依赖方TLS 入站策略。 为了保护 API 网关和公开 API 的后端服务之间的连接,请应用TLS 后端策略。 有关 TLS 策略的更多信息,请参阅API 连接管理器文档

    1. 导航到要应用策略的 API 网关的“集群”选项卡(图 16 中的api-cluster )。 单击策略表右上角的“管理”按钮。

      图 16: 管理 API 网关集群的策略
    2. 单击左侧导航栏中的“全局策略” ,然后单击策略行最右侧列中的...图标(图 17 中的TLS 后端)。 从下拉菜单中选择+ 添加策略

      图 17: 向 API 网关集群添加全局策略

    结论

    管理多云和混合架构并非易事。 它们是复杂的环境,具有快速变化的应用,通常难以观察和保护。

    然而,使用正确的工具,您可以避免供应商锁定,同时保持更快地将新功能推向市场所需的敏捷性和灵活性。 作为云原生工具,NGINX 的 API 连接管理器为您提供在多云和混合环境中管理 API 所需的可扩展性、可见性、治理和安全性。

    开始30 天 NGINX 管理套件免费试用,其中包括访问API 连接管理器、作为 API 网关的NGINX Plus以及用于保护您的 API 的NGINX App Protect


“这篇博文可能引用了不再可用和/或不再支持的产品。 有关 F5 NGINX 产品和解决方案的最新信息,请探索我们的NGINX 产品系列。 NGINX 现在是 F5 的一部分。 所有之前的 NGINX.com 链接都将重定向至 F5.com 上的类似 NGINX 内容。”