NGINX.COM
Web Server Load Balancing with NGINX Plus

多云部署模式将持续存在。F5 的《2022 年应用策略现状》报告显示,77% 的企业跨多云环境运行应用。通过采用多云和混合架构,企业可获得诸多重要优势,例如提高效率、降低停机风险和避免厂商锁定。但这些复杂架构还是带来了独特的挑战。

接受 F5 调查的软件和 IT 领导者将以下几点列为其所面临的主要多云挑战:

  • 可视性(45% 的受访者)
  • 安全防护 (44%)
  • 应用迁移 (41%)
  • 性能优化 (40%)

在多云环境中管理微服务的 API 尤为复杂。如果不实施整体 API 策略,平台运维团队保护和管理 API 的速度将跟不上 API 在公有云、本地和边缘环境激增的速度。我们把这个问题称为 API 蔓延,在之前的一篇博文中,我们解释了为何它会构成重大威胁。

您需要采用多云 API 策略,以周全的方法来统一分布在多云环境中的微服务,从而确保端到端连通性。两种常见的多云和混合部署场景包括:

  • 在多云/混合环境中部署不同的服务 —— 或出于成本效益考虑或由于不同的服务与不同的用户群密切相关,您需要在不同的位置运行不同的应用和 API。
  • 在多云/混合环境中部署相同的服务 —— 您需要确保部署在不同位置的相同应用的高可用性

在接下来的教程中,我们将 分步演示如何在第二种部署场景中使用 API Connectivity ManagerF5 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 描述了本教程使用的拓扑结构。

图 1:API Connectivity Manager 支持 API 网关和 Service 的多云高可用性部署

请按照下列部分中的步骤来完成本教程的学习:

安装和配置 API Connectivity Manager

  1. 获取 NGINX Management Suite 试用版或付费订阅 NGINX Management Suite,其中包括 Instance Manager、API Connectivity Manager、NGINX Plus(作为 API 网关)及 NGINX App Protect(可保护 API)。立即开始 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;
  4. 重启 NGINX Plus,例如通过运行这个命令:

    $ nginx -s reload

设置基础架构工作区

您可以在 API Connectivity Manager 中创建多个基础架构工作区(截至本文撰写时最多可创建 10 个)。借助隔离的工作区,您可以针对不同的业务线、开发人员团队、外部合作伙伴和云等对象应用不同的策略和身份验证/授权要求。

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

  1. 点击左侧导航栏中的 Infrastructure(基础架构)。
  2. 点击 + Create(+ 创建)按钮,新建一个工作区,如图 2 所示。

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

    图 3:命名新的基础设施工作区并添加联系人信息
  4. 点击 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 所示。

图 4:相同的安全防护策略可应用于部署在一个 API 网关集群中的所有 API 网关
创建环境和 API 网关集群
  1. 导航到您的工作区,并点击  Create Environment (创建环境)按钮,如图 5 所示。

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

    图 6:为新环境命名并为其分配一个 API 网关集群
  3. API Gateway Clusters(API 网关集群)部分,填写 Name(名称)和 Hostname(主机名)字段(图 6 中的 api-clusterapi.nginx.com)。
  4. 点击 Create(创建)按钮。

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

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

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

  1. 使用 ssh 连接并登录到实例。
  2. 如果 NGINX Agent 已经在运行,则将其停止:

    $ systemctl stop nginx-agent
  3. 运行您选择的命令(curlwget)下载和安装 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-clusterCluster(集群)窗口中的 Instances(实例)部分,如图 7 所示。

    图 7:使用一个 API 网关集群对部署在多个云中的 NGINX Plus 实例进行统一管理。
  4. 继续应用全局策略

部署使用多个 API 网关集群的环境

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

图 8:不同的安全防护策略可应用于部署在不同的 API 网关集群中的 API 网关
创建环境和 API 网关集群
  1. 导航到您的工作区,并点击 Create Environment(创建环境)按钮,如图 9 所示。

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

    图 10:为新环境命名并为其分配第一个 API 网关集群
  3. API Gateway Clusters(API 网关集群)部分,填写 Name(名称)和 Hostname(主机名)字段(图 10 中的 aws-clusterapi.nginx.com)。
  4. 点击 Create(创建)按钮。

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

  5. 返回 Environment(环境)选项卡,点击 API Gateway Clusters(API 网关集群)部分右上角的 + Add(+ 添加)按钮,如图 11 所示。

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

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

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

图 13:部署在多云环境和不同 API 网关集群中的 NGINX Plus 实例列表
将 API 网关实例分配给 API 网关集群

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

  1. 使用 ssh 连接并登录到实例。
  2. 如果 NGINX Agent 已经在运行,则将其停止:

    $ systemctl stop nginx-agent
  3. 运行您选择的命令(curlwget)以下载和安装 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(实例)部分。

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

    应用全局策略

    现在您可以添加全局策略以应用于 API 网关集群中的所有 NGINX Plus 实例。例如,为了保护客户端对您的 API 的访问,您可以应用 OpenID Connect Relying PartyTLS Inbound 策略。为了确保 API 网关和暴露 API 的后端 service 之间的连接,您可应用 TLS backend 策略。有关 TLS 策略的更多信息,请参阅 API Connectivity Manager 文档

    1. 导航到您想要应用策略的 API 网关的 Cluster(集群)标签(图 16 中的 api-cluster)。点击位于“策略”表右上角的 Manage(管理)按钮。

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

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

     

    结语

    管理多云和混合架构并非易事。这些环境错综复杂,其中应用频繁更新,往往很难观测和保护。

    但借助正确的工具,您能够避免厂商锁定问题,同时保持所需的敏捷性和灵活性,从而加速将新功能推向市场。作为一款云原生工具,NGINX API Connectivity Manager 可为您提供在多云和混合环境中管理 API 所需的可扩展性、可见性、安全防护及高效治理能力。

    立即开启 NGINX Management Suite 30 天免费试用,包括 API Connectivity ManagerNGINX Plus(作为 API 网关)及 NGINX App Protect(可保护 API)。

Hero image
将 NGINX 部署为 API 网关

这本免费电子书更新于 2022 年,您将通过这本书了解到如何将 NGINX 部署为 API 网关

关于作者

Akash Ananthanarayanan

技术营销经理

关于 F5 NGINX

F5, Inc. 是备受欢迎的开源软件 NGINX 背后的商业公司。我们为现代应用的开发和交付提供一整套技术。我们的联合解决方案弥合了 NetOps 和 DevOps 之间的横沟,提供从代码到用户的多云应用服务。访问 nginx-cn.net 了解更多相关信息。