什么是 API 网关?

API 网关接受来自客户端的 API 请求,根据定义的策略处理它们,将它们定向到适当的服务,并组合响应以简化用户体验。 通常,它通过调用多个微服务并聚合结果来处理请求。 它还可以在旧部署中进行协议之间的转换。

API 网关接受来自客户端的 API 请求,根据定义的策略处理它们,将它们定向到适当的服务,并组合响应以简化用户体验。 通常,它通过调用多个微服务并聚合结果来处理请求。 它还可以在旧部署中进行协议之间的转换。

此处添加图片替代文字

API 网关功能

API 网关通常实现的功能包括:

  • 安全政策——身份验证、授权、访问控制和加密
  • 路由策略——路由、速率限制、请求/响应操作、断路器、蓝绿和金丝雀部署、A/B 测试、负载平衡、健康检查和自定义错误处理
  • 可观察性政策——实时和历史指标、日志记录和跟踪

为了获得额外的应用程序和 API 级别的安全性,API 网关可以通过 Web应用防火墙 (WAF) 和拒绝服务 (DoS) 保护进行增强。

API 网关优势

部署用于应用程序交付的 API 网关可以帮助:

  • 通过封装内部应用架构并提供针对每种客户端类型量身定制的 API,降低复杂性并加快应用程序发布
  • 通过集中控制点并将非功能性需求转移到基础设施层,精简和简化请求处理和政策执行
  • 通过精细的实时和历史指标及信息中心简化问题排查

API 网关和微服务架构

对于基于微服务的applications,API 网关充当系统的单一入口点。 它位于微服务的前端,通过将应用程序的复杂性与客户端的复杂性分离,简化了客户端实现和微服务应用程序。

在微服务架构中,API网关负责请求路由、组合和策略实施。 它通过简单地将某些请求路由到适当的后端服务来处理它们,并通过调用多个后端服务并聚合结果来处理其他请求。

API 网关可能为微服务提供其他功能,例如身份验证、授权、监控、负载平衡和响应处理,将非功能性需求的实现卸载到基础设施层,并帮助开发人员专注于核心业务逻辑,从而加快应用程序的发布速度。

在我们的博客上了解有关使用 API 网关构建微服务的更多信息。

Kubernetes 的 API 网关

容器是运行微服务的最有效方式,而 Kubernetes 是部署和管理容器化applications和工作负载的事实标准。

根据系统架构和应用交付要求,API 网关可以部署在 Kubernetes 集群前面作为负载均衡器(多集群级别),在其边缘作为 Ingress 控制器(集群级别),或者在其内部作为服务网格(服务级别)。

此处添加图片替代文字

对于位于边缘和 Kubernetes 集群内的 API 网关部署,最佳做法是使用 Kubernetes 原生工具作为 API 网关。 此类工具与 Kubernetes API 紧密集成,支持 YAML,并可通过标准 Kubernetes CLI 进行配置;示例包括NGINX Ingress ControllerNGINX Service Mesh

在 API 网关与API 中了解有关 API 网关和 Kubernetes 的更多信息。 入口控制器与 服务网格 在我们的博客上。

API 网关和入口网关或入口控制器

Ingress 网关和Ingress 控制器是实现Ingress 对象的工具,它是 Kubernetes Ingress API 的一部分,用于将 Kubernetes 中运行的applications暴露给外部客户端。 它们管理用户和applications之间的通信(用户到服务或南北连接)。 然而,Ingress 对象本身的功能非常有限。 例如,它不支持定义附加在其上的安全策略。 因此,许多供应商创建自定义资源定义 (CRD) 来扩展其 Ingress 控制器的功能并满足不断变化的客户需求和要求,包括使用 Ingress 控制器作为 API 网关。

例如, NGINX Ingress Controller可以与其VirtualServer 和 VirtualServerRouteTransportServerPolicy自定义资源一起用作 Kubernetes 集群边缘的全功能 API 网关。

API 网关与网关 API 不同

虽然名称相似,但 API 网关与Kubernetes 网关 API并不相同。Kubernetes网关 API是由 Kubernetes 社区管理的一个开源项目,旨在改进和标准化 Kubernetes 中的服务网络。 Gateway API 规范由Kubernetes Ingress API发展而来,旨在解决在生产中部署 Ingress 资源以公开 Kubernetes 应用程序的各种挑战,包括定义请求处理的细粒度策略以及在多个团队和角色之间委托配置控制的能力。

基于 Gateway API 规范构建的工具(例如NGINX Kubernetes Gateway )可用作 API 网关,用于将请求路由到特定微服务、实施流量策略以及启用金丝雀和蓝绿部署等用例。

观看此简短视频,其中 NGINX 的 Jenn Gile 解释了API 网关和 Kubernetes Gateway API 之间的区别

服务网格与 API 网关

服务网格是一个基础设施层,用于控制 Kubernetes 集群中服务之间的通信(服务到服务或东西向连接)。 服务网格为 Kubernetes 中运行的服务提供核心功能,包括负载平衡、身份验证、授权、访问控制、加密、可观察性以及用于管理连接的高级模式(断路器、A/B 测试以及蓝绿和金丝雀部署),以确保通信快速、可靠和安全。

服务网格部署在更靠近应用程序和服务的位置,可以用作 Kubernetes 中服务到服务通信的轻量级但全面的分布式 API 网关。

在我们的博客上了解有关如何选择服务网格的更多信息。

API 网关和 API 管理

术语“API 网关”“API 管理”经常(但不正确)被用来描述相同的功能。

API 网关是 API 调用的数据平面入口点,代表客户端对目标applications和服务的请求。 它通常根据定义的策略执行请求处理,包括身份验证、授权、访问控制、SSL/TLS 卸载、路由和负载平衡。

API 管理是部署、记录、操作和监控各个 API 的过程。 它通常通过管理平面软件(例如 API 管理器)来实现,该软件定义并将策略应用于 API 网关和开发人员门户。

根据业务和功能需求,API 网关可以作为数据平面的独立组件部署,也可以作为集成 API 管理解决方案的一部分部署,例如F5 NGINX 管理套件 API 连接管理器

选择 API 网关的注意事项

在确定 API 网关的要求时,需要考虑几个关键因素:

  • 架构——部署 API 网关的位置会影响您对工具的选择,使用云提供商的内置选项的决定也会影响您的选择。 您是否需要平台和运行时无关的 API 网关的灵活性?
  • 性能——性能对于高流量网站和applications至关重要。 您的 API 网关是否提供您所需的高吞吐量和低延迟?
  • 可扩展性——您的 API 网关需要轻松扩展以满足不断增长的流量需求。 您的 API 网关是否支持垂直扩展(高吞吐量)和水平扩展(高可用性)以确保您的 API 始终快速可用?
  • 安全性——API 网关是零信任架构的重要组成部分。 您的 API 网关是否提供访问控制(AuthN/AuthZ)、mTLS 和其他高级安全功能(如集成 WAF 和 OpenAPI 架构验证)以实现积极的安全性?
  • 成本——了解 API 网关的总拥有成本 (TCO)。 与购买企业级 API 网关相比,构建和维护自定义解决方案的成本和权衡是什么?

NGINX 如何提供帮助

根据您的用例和部署模式,NGINX 提供了多种部署和操作 API 网关的选项。
Kubernetes 原生工具:

  • NGINX Ingress Controller – 使用 API 网关、身份和可观察性功能管理 Kubernetes 集群边缘的应用程序连接
  • NGINX 服务网格– 面向服务到服务连接、安全性、编排和可观察性的开发人员友好型解决方案

首先申请 NGINX Ingress Controller 与 NGINX App Protect WAF 和 DoS 的30 天免费试用版,然后下载始终免费的 NGINX Service Mesh。

通用工具:

  • NGINX Plus作为 API 网关 – 轻量级、高性能 API 网关,可部署在云、本地和边缘环境中
  • F5 NGINX 管理套件 API 连接管理器– 使用开发人员友好的工具部署和操作 API 网关,以实现 API 管理、治理和安全

要了解有关使用 NGINX Plus 作为 API 网关的更多信息,请申请30 天免费试用,并参阅我们博客上的将 NGINX 部署为 API 网关。 要试用 NGINX 管理套件,请申请30 天免费试用版