多云部署模式将持续存在。F5 的《2022 年应用策略现状》报告显示,77% 的企业跨多云环境运行应用。通过采用多云和混合架构,企业可获得诸多重要优势,例如提高效率、降低停机风险和避免厂商锁定。但这些复杂架构还是带来了独特的挑战。
接受 F5 调查的软件和 IT 领导者将以下几点列为其所面临的主要多云挑战:
在多云环境中管理微服务的 API 尤为复杂。如果不实施整体 API 策略,平台运维团队保护和管理 API 的速度将跟不上 API 在公有云、本地和边缘环境激增的速度。我们把这个问题称为 API 蔓延,在之前的一篇博文中,我们解释了为何它会构成重大威胁。
您需要采用多云 API 策略,以周全的方法来统一分布在多云环境中的微服务,从而确保端到端连通性。两种常见的多云和混合部署场景包括:
在接下来的教程中,我们将 分步演示如何在第二种部署场景中使用 API Connectivity Manager(F5 NGINX Management Suite 的一部分),即在多个环境中部署相同的服务以确保高可用性。这有助于消除多云或混合生产环境中出现的单点故障:如果一个网关实例发生故障,另一个网关实例将快速接管,这样即使一个云平台出现故障,您的客户也不会遭遇服务中断问题。
API Connectivity Manager 是一个不受运行时限制的云原生解决方案,用于部署、管理和保护 API。通过单一管理平面,您可以管理跨公有云、本地及边缘环境部署的 NGINX Plus API 网关以及开发者门户的所有 API 操作。这有助于您的平台运维团队全面了解 API 流量情况,并轻松地对每个环境实施一致的治理和安全策略。
正如引言所述,在本教程中,我们将配置 API Connectivity Manager,以确保在多个部署环境中运行的服务的高可用性。具体来说,我们将部署 NGINX Plus 作为 API 网关,以便将流量路由到服务 A 和服务 B——这两个服务在 Google Cloud Platform (GCP) 和 Amazon Web Services (AWS) 这两个公有云中运行。(该设置同样适用于任何部署环境的组合,包括 Microsoft Azure 和本地数据中心。)
图 1 描述了本教程使用的拓扑结构。
请按照下列部分中的步骤来完成本教程的学习:
选择用来构成您的多云或混合基础架构的环境。在本教程中,我们选择使用 AWS 和 GCP,并将在每个云中都安装一个 NGINX Plus 实例。无论何种环境,在每个将充当 API 网关的数据平面主机上执行下列步骤:
在 /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 中操作,新建一个工作区:
点击 + Create(+ 创建)按钮,新建一个工作区,如图 2 所示。
在打开的 Create Workspace(创建工作区)面板中,填写 Name(名称)字段(如图 3 所示)。可以选择填写 Description(描述)字段和 Workspace Contact Information(工作区联系人信息)部分中的字段。基础架构管理员(例如您的平台运维团队)可使用联系人信息向工作区的用户提供有关状态或问题的最新动态。
在 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 网关集群的环境,相同的安全防护策略可应用于所有 NGINX Plus API 网关实例,如图 4 所示。
导航到您的工作区,并点击 Create Environment (创建环境)按钮,如图 5 所示。
在打开的 Create Environment(创建环境)面板中,填写 Name(名称)字段(图 6 中的 prod)和可选 Description(描述)字段,并选择环境类型(此处我们选择 Prod)。
点击 Create(创建)按钮。
Environment Created(环境已创建)面板打开,显示为将其分配给 API 网关集群,您需要在每个 NGINX Plus 实例上运行的命令。为了方便起见,我们在下面的第七步中显示这些命令。
在每个 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 网关集群的环境,不同的安全防护策略可应用于不同的 NGINX Plus API 网关实例,如图 8 所示。
导航到您的工作区,并点击 Create Environment(创建环境)按钮,如图 9 所示。
在打开的 Create Environment(创建环境)面板中,填写 Name(名称)字段(图 10 中的 prod)和可选 Description(描述)字段,并选择环境类型(此处我们选择 Prod)。
点击 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 所示。
在每个 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)。
"This blog post may reference products that are no longer available and/or no longer supported. For the most current information about available F5 NGINX products and solutions, explore our NGINX product family. NGINX is now part of F5. All previous NGINX.com links will redirect to similar NGINX content on F5.com."