应用编程接口 (API) 是现代 IT 环境中最常见的用户、应用和 service 互联的方式。API 网关是应用交付基础架构的一个组件,它位于客户端和 service 之间,负责集中处理两者之间的 API 通信,并能够跨本地、多云和混合环境提供安全防护、策略执行、监控和可视化。
什么是 API 网关?
API 网关可接受来自客户端的 API 请求,根据定义的策略对其进行处理,将其定向到相应的 service,并整合响应来简化用户体验。通常情况下,它通过调用多个微服务并汇总反馈结果来处理请求,而且还能够在传统部署中进行协议转换。
举例来说,电子商务网站可能使用 API 网关为移动客户端提供一个端点,以通过单个请求检索全部产品详情。该网关从各种 service 中请求信息,例如产品是否支持购买及其价格,并汇总结果。
API 网关的功能
API 网关通常实施以下功能:
- 安全防护策略 —— 身份验证、授权、访问控制和加密
- 路由策略 —— 路由、速率限制、请求/响应操作、断路器、蓝绿和灰度部署、A/B 测试、负载均衡、健康检查和自定义错误处理
- 可观测性策略 —— 实时和历史指标、日志记录和追踪
对于额外的应用级和 API 级安全防护,API 网关可通过 Web 应用防火墙 (WAF) 和拒绝服务攻击 (DoS) 防御来增强防护。
API 网关的优势
为应用交付部署 API 网关具有以下好处:
- 通过封装内部应用架构并提供专为每种客户端类型量身定制的 API,降低复杂性并加快应用发布速度
- 集中控制点并将非功能需求卸载到基础架构层,从而精简请求处理和策略执行
- 通过细粒度的实时和历史指标与仪表盘简化故障排除
API 网关和微服务架构
对于基于微服务的应用,API 网关是进入系统的单一入口点。它位于微服务的前面,可降低客户端的应用复杂性,从而简化客户端实现和微服务应用。
在微服务架构中,API 网关负责请求的路由、组合和策略执行。它通过简单地将请求路由到相应的后端服务,或者调用多个后端服务并汇总结果来处理请求。
API 网关可为微服务提供其他功能,例如进行身份验证、授权、监控、负载均衡和响应处理,将非功能需求的实施卸载到基础架构层,帮助开发人员专注于核心业务逻辑,从而加速应用发布。
详情请参阅我们的博文《使用 API 网关构建微服务》。
面向 Kubernetes 的 API 网关
容器是运行微服务最高效的方式,而 Kubernetes 则是容器化应用与工作负载的部署和管理领域的事实标准。
根据系统架构和应用交付要求,API 网关可以作为负载均衡器部署在 Kubernetes 集群的前面(多集群级),作为 Ingress controller(Ingress 控制器)部署在其边缘(集群级),或者作为 service mesh(服务网格)部署在其内部(service 级)。
对于边缘和 Kubernetes 集群内部的 API 网关部署,最好使用 Kubernetes 原生工具作为 API 网关。这些工具与 Kubernetes API 紧密集成,支持 YAML,并可通过标准 Kubernetes CLI 进行配置;这些工具包括 NGINX Ingress Controller 和 NGINX Service Mesh。
有关 API 网关和 Kubernetes 的更多内容,请阅读我们的博文《API 网关 vs. Ingress Controller vs. Service Mesh,该怎么选?》。
API 网关和 Ingress 网关或 Ingress Controller
Ingress 网关和 Ingress controller(Ingress 控制器)是实施 Ingress 对象(Kubernetes Ingress API 的一部分)的工具,可将在 Kubernetes 中运行的应用暴露给外部客户端。它们管理用户和应用之间的通信(用户与 service 间或南北向的互联)。然而,Ingress 对象本身的能力非常有限。例如,它不支持定义附加的安全防护策略。因此,许多厂商都创建了自定义资源定义 (CRD),以扩展其 Ingress controller 的功能,并满足不断变化的客户需求和要求,包括将 Ingress controller 用作 API 网关。
例如,NGINX Ingress Controller 可借助其 VirtualServer 和 VirtualServerRoute、TransportServer 和策略自定义资源,在 Kubernetes 集群的边缘用作功能齐全的 API 网关。
API Gateway 与 Gateway API 不同
尽管名称相似,但 API Gateway(API 网关)与 Kubernetes Gateway API 不同。Kubernetes Gateway API 是由 Kubernetes 社区管理的开源项目,旨在改善和规范 Kubernetes 中的服务网络。Gateway API 规范从 Kubernetes Ingress API 演变而来,用于解决有关在生产环境中部署 Ingress 资源以暴露 Kubernetes 应用的各种挑战,包括为请求处理定义细粒度策略并跨多个团队和角色委派配置控制权。
NGINX Kubernetes Gateway 等基于 Gateway API 规范构建的工具可用作许多用例的 API 网关,包括将请求路由到特定的微服务、实施流量策略及支持灰度部署和蓝绿部署。
请观看这段简短的视频,其中来自 NGINX 的 Jenn Gile 解释了 API Gateway 和 Kubernetes Gateway API 之间的差异。
Service Mesh 与 API 网关
Service mesh(服务网格)是一个基础架构层,可控制 Kubernetes 集群中各 service 之间的通信(service 到 service 或东西向互联)。Service mesh 为在 Kubernetes 中运行的 service 提供核心功能,包括负载均衡、身份验证、授权、访问控制、加密、可观测性及高级互联管理模式(断路器、A/B 测试以及蓝绿和灰度部署),以确保通信快速、可靠和安全。
Service mesh 紧邻应用和 service 部署,可用作轻量而全面的分布式 API 网关以支持 Kubernetes 中的 service 到 service 通信。
如欲了解有关 service mesh 的更多内容,请参阅我们的博文《如何选择 Service Mesh》。
API 网关和 API 管理
术语“API 网关 ”和“API 管理 ”经常被误用来描述同一功能。
API 网关是 API 调用(代表客户端对目标应用和 service 的请求)的数据平面入口点。它通常根据定义的策略执行请求处理,包括身份验证、授权、访问控制、SSL/TLS 卸载、路由和负载均衡。
API 管理是指部署、记录、操作和监控各个 API 的过程。它通常通过管理平面软件(例如 API 管理器)来完成,管理平面软件定义了策略并将其应用于 API 网关和开发人员门户。
根据业务和功能要求,API 网关可以作为独立组件部署在数据平面上,也可用作集成 API 管理解决方案的一部分,例如 F5 NGINX Management Suite API Connectivity Manager。
选择 API 网关时的考虑因素
在确定 API 网关的需求时,需要考虑以下几个关键因素:
- 架构 —— API 网关的部署位置会影响您对工具的选择,正如有关使用云提供商内置选项的决策一样。您是否需要不受平台和运行时限制的 API 网关灵活性?
- 性能 —— 性能对于高流量网站和应用至关重要。您的 API 网关能否满足您的高吞吐量和低延迟需求?
- 可扩展性 —— 您的 API 网关需要轻松扩展以满足不断增长的流量需求。您的 API 网关是否支持纵向(高吞吐量)和横向(高可用性)扩展,以确保您的 API 始终快速且可用?
- 安全防护 —— API 网关是零信任架构的重要组成部分。您的 API 网关是否提供访问控制 (AuthN/AuthZ)、mTLS 及其他高级安全防护功能(例如集成式 WAF 和 OpenAPI 模式验证),以提供主动安全防护?
- 成本 —— 了解 API 网关的总体拥有成本 (TCO)。构建和维护定制解决方案与购买企业级 API 网关的成本是多少,以及需要做出哪些取舍?
NGINX 如何助您一臂之力
NGINX 为部署和操作 API 网关提供了多个选项,支持您根据自己的用例和部署模式进行选择。
Kubernetes 原生工具:
- NGINX Ingress Controller——利用 API 网关、身份控制和可观测性功能来管理 Kubernetes 集群边缘的应用互联
- NGINX Service Mesh——一款开发人员友好型解决方案,可确保 service 到 service 互联、安全防护、可观测性和灵活编排
立即申请 NGINX Ingress Controller 30 天免费试用版(带有 NGINX App Protect WAF 和 DoS),并下载始终免费的 NGINX Service Mesh。
通用工具:
- NGINX Plus(作为 API 网关)——高性能的轻量级 API 网关,可部署在云端、本地和边缘环境中
- F5 NGINX Management Suite API Connectivity Manager——利用开发人员友好型 API 管理、治理和保护工具,部署及运维 API 网关
如欲详细了解如何将 NGINX Plus 用作 API 网关,请申请 30 天免费试用版,并参阅我们的博文《将 NGINX 部署为 API 网关》。如欲试用 NGINX Management Suite,请申请 30 天免费试用版。