试用 Kubernetes Gateway API 的五大理由
原文作者:Michael Pleshakov - F5 平台集成工程师
原文链接:试用 Kubernetes Gateway API 的五大理由
转载来源:NGINX 中文官网
NGINX 唯一中文官方社区 ,尽在 nginx.org.cn
Kubernetes 从早期阶段就包含一个 API — 内置 Ingress 资源,用于配置外部 HTTP 流量到 Service 的请求路由。虽然已被用户广泛采用并得到许多实现(如 Ingress controller)的支持,但 Ingress 资源在以下三大方面限制了其用户:
- 功能不足 – 减少了支持的用例数量。
- 可扩展性模型不佳 – 限制了对 NGINX 等许多数据平面中已有的高级功能的访问。
- 缺少不同的用户角色 – 阻碍了集群内多个团队之间安全共享数据平面基础设施。
为了应对这些限制,Kubernetes 社区设计了 Gateway API,这个新项目可更有效地替代 Ingress 资源。本文阐释了试用 Gateway API 的五大理由,并将其与 Ingress 资源进行了比较,另外还介绍了我们的开源项目 NGINX Gateway Fabric。该项目支持您在 Kubernetes 集群中启用 Gateway API,同时将 NGINX 用作数据平面。
注:Gateway API 支持与 Service 网络相关的多种用例,包括实验性 service mesh(服务网格)。不过,本文将重点介绍 Gateway API 的主要用例:将外部流量路由到集群中的 Service。此外,虽然 API 支持多个协议,但我们的探讨仅限于最常用的 HTTP 协议。
Gateway API 概述
Gateway API 是自定义资源的集合,可部署和配置数据平面,从而对集群内 Service 的 Service 网络流量进行建模。
以下是主要的 Gateway API 资源:
- GatewayClass – 定义尚未部署的数据平面模板。
- Gateway – 从模板(GatewayClass)部署数据平面,并在其上配置入口点(端口)以接受外部流量。
- HTTPRoute – 配置外部流量到集群内 Service 的 HTTP 请求路由规则,并将这些规则附加到 Gateway 定义的入口点。
Gateway API 的另一重要组成部分是网关实现,它是一个 Kubernetes 控制器,可根据 Gateway API 资源实际部署和配置数据平面。
如欲了解有关 API 的更多信息,请访问 Gateway API 项目网站或观看视频介绍。
试用 Gateway API 的理由有哪些?
以下为试用全新 Gateway API 的五大理由:
- 丰富的功能
- 强大的可扩展性模型
- 角色分离
- 可移植性
- 社区
下面我们来详细了解一下每个理由。
理由 1:丰富的功能
Gateway API 提供了大量功能,有助于解锁许多新用例,其中一些用例可能还未获得 Ingress 资源的全面支持。
这些用例包括:
- 灰度发布
- A/B 测试
- 请求和响应操作
- 请求重定向
- 流量镜像
- 跨命名空间的流量路由
例如,下面是来自 HTTPRoute 的一个请求路由规则,它使用权重在两个 Kubernetes service 之间精分流量,以支持灰度发布用例。
- matches: - path: type: PathPrefix value: / backendRefs: - name: my-app-old port: 80 weight: 95 - name: my-app-new port: 80 weight: 5
这样一来,数据平面将 95% 的请求路由到 Service my-app-old
,将其余 5% 的请求路由到 my-app-new。
接下来的示例包含两个规则。其中一个规则利用了 Gateway API 高级路由功能,使用请求头和查询参数进行路由。
- matches: # 规则 1 - path: type: PathPrefix value: /coffee backendRefs: - name: coffee-v1-svc port: 80 - matches: # 规则 2 - path: type: PathPrefix value: /coffee headers: - name: version value: v2 - path: type: PathPrefix value: /coffee queryParams: - name: TEST value: v2 backendRefs: - name: coffee-v2-svc port: 80
因此,在以下两种情况下,数据平面会将以 /coffee
开头的 URI 请求路由到 Service coffee-v2-svc
:请求头版本为 v2
,或者查询参数 TEST
为 v2
(例如规则 2 中的 /coffee?TEST=v2
)。同时,数据平面将所有对 /coffee
的请求路由到 coffee-v1-svc
(如规则 1 所示)。
请参阅 HTTPRoute 文档,了解所有支持的功能。
理由 2:强大的可扩展性模型
Gateway API 采用强大的可扩展性模型,支持实现暴露 API 本身不支持的高级数据平面功能。尽管 Ingress controller 可通过应用注解(annotations)支持自定义扩展,从而绕过 Ingress 资源的一些限制,但 Gateway API 可扩展性模型还是优于 Ingress 可扩展性模型。
例如,在下面的示例中,使用 NGINX Ingress Controller 的注解扩展的资源可启用一些高级 NGINX 功能(对每项功能的说明已作为注释添加到注解旁边):
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: webapp annotations: nginx.org/lb-method: "ip_hash" # 选择 ip_hash 负载均衡方法 nginx.org/ssl-services: "webapp" # 向后端开启 TLS nginx.org/proxy-connect-timeout: "10s" # 向后端配置超时 nginx.org/proxy-read-timeout: "10s" nginx.org/proxy-send-timeout: "10s" nginx.org/rewrites: "serviceName=webapp rewrite=/v1" # 重写请求 URI nginx.com/jwt-key: "webapp-jwk" # 启用对请求的 JWT 身份验证 nginx.com/jwt-realm: "Webb App" nginx.com/jwt-token: "$cookie_auth_token" nginx.com/jwt-login-url: "https://login.example.com" spec: rules: - host: webapp.example.com . . .
注解(annotations)本不适合用于表达如此大量配置,它只是简单的键值字符串对,缺乏结构、验证和细粒度。(我们所说的“缺乏细粒度”是指注解应用于整个资源,而不是像 Ingress 资源中的单个路由规则那样应用于资源的某些部分。)
Gateway API 包括一个功能强大的无注解可扩展性模型。该模型具有多个扩展点、自定义过滤器、策略附加及目的地,可支持 Gateway API 实现通过能够提供结构和验证的自定义资源来提供高级数据平面功能。此外,用户还可对资源的每个部分(如路由规则)应用扩展,从而进一步增加细粒度。
例如,以下是一个假想的 Gateway API 实现的自定义过滤器,它通过对 /coffee 规则精细应用速率限制来增强 HTTPRoute 中的路由规则:
rules: - matches: - path: type: PathPrefix value: /coffee filters: - type: ExtensionRef extensionRef: group: someproxy.example.com kind: RateLimit name: coffee-limit backendRefs: - name: coffee port: 80
这样,Gateway API 实现将 coffee-limit
自定义资源中配置的过滤器应用于 /coffee
规则,其中速率限制规范如下所示:
rateLimit: rate: 10r/s key: ${binary_remote_addr}
注:本例只是一个可能的扩展,而非具体实例,因为 NGINX Gateway Fabric 项目尚未利用 Gateway API 可扩展性模型。不过,未来这种情况将会改变,因为该项目将支持许多扩展,可让用户获得 Gateway API 无法提供的高级 NGINX 功能。
理由 3:角色分离
Ingress 资源仅支持单个用户角色(应用开发人员),该角色全权控制流量到达 Kubernetes 集群中应用的方式。但这种控制级别往往没有必要,甚至可能会妨碍多个开发人员团队安全地共享数据平面基础设施。
Gateway API 将部署和配置基础设施的职责分给三个角色:基础设施提供商、集群运维人员及应用开发人员。下表汇总了这些角色。
角色 | Gateway API 资源的所有者 | 职责 |
---|---|---|
基础设施提供商 | GatewayClass | 管理集群相关基础设施** |
集群运维人员 | Gateway, GatewayClass* | 为应用开发人员管理集群 |
应用开发人员 | HTTPRoute | 管理应用 |
*如果集群运维人员安装并管理 Gateway API 实现,而非使用基础设施提供商提供的实现,那么他们将管理 GatewayClass 资源。
**类似于提供托管 Kubernetes 集群的云提供商。
上述角色实现了 RBAC 执行的职责分工。这种分工适用于企业的一种常见情况,即平台团队(集群运维人员)管理数据平面基础设施,并希望在集群中的多个开发人员团队(应用开发人员)之间对其进行安全共享。
理由 4:可移植性
Gateway API 的两个方面提高了其可移植性:
- 功能 – 如理由 1 所述,大量功能减少了对特定 Gateway API 实现扩展 API 的需求,这意味着用户将不太依赖于这些 API。相比之下,Ingress 用户高度依赖其 Ingress controller 的特定扩展。
- 一致性测试 – Gateway API 具有测试功能,可确保不同实现以一致的方式支持 API 功能。若要确保实现一致性,就必须通过一致性测试,如 NGINX Gateway Fabric 的测试结果所示。
得益于这种可移植性,用户可以轻松地从一个 Gateway API 实现切换到另一个 Gateway API 实现,这远比切换 Ingress controller 简单得多。
理由 5:社区
Gateway API 是一个社区驱动型项目,而且还是处于起步阶段的新项目。如果您希望为该项目贡献一己之力 — 无论是通过提出新功能还是提供反馈意见,请访问该项目的贡献页面。
如何试用 Gateway API
试用 Gateway API 只需简单两步:
- 将 Gateway API 安装到 Kubernetes 集群中。
- 安装一个 Gateway API 实现。
NGINX 创建了一个 Gateway API 实现 — NGINX Gateway Fabric。该实现将 NGINX 用作数据平面。若要试用,请按照其最新版本的安装说明进行操作。如要提出问题或参与项目,请查看我们的贡献指南。
我们的文档提供了若干指南和示例,展示了 Gateway API 支持的不同用例。如需更多支持,请查看 Kubernetes Gateway API 项目页面上的指南。
注:NGINX Gateway Fabric 是一个新项目,与我们类似的 NGINX Ingress Controller 项目相比,它尚未达到成熟的水平。此外,尽管 NGINX Gateway Fabric 支持 Gateway API 的所有核心功能(参见理由 1),但尚未为 NGINX 常用功能提供 Gateway API 扩展(参见理由 2),而 NGINX Ingress Controller 具备这些功能。
总结
Kubernetes Gateway API 是一个新的社区项目,旨在消除 Ingress 资源的限制。我们阐述了试用这一全新 API 的五大理由,并简要介绍了基于 NGINX 的 Gateway API 实现 — NGINX Gateway Fabric。
NGINX Gateway Fabric 将是我们全力打造的一款 Gateway API 的原生 NGINX 实现。我们诚邀您一起加入,共同塑造 Kubernetes 应用互联的未来!
您可通过以下方式加入 NGINX Gateway Fabric 项目:
- 以贡献者的身份加入项目
- 在实验室中试用实现
- 执行测试并提供反馈
如欲加入该项目,请访问 GitHub 上的 NGINX Gateway Fabric。
NGINX 唯一中文官方社区 ,尽在 nginx.org.cn

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
批量图像识别的快速遍历技巧
👆对私有云感兴趣可以进入公众号回复“私有云”哦。 一、前言 最近,不少同学在Q群中频繁提出疑问:在日常UI测试过程中,如何快速准确地识别页面上的多个元素,或在日常测试中,如何高效地遍历目标图片列表,以确认画面中是否包含特定元素?在官方交流Q群2群的lincoln同学给出了不错的方法思路,我们也获得了他的授权,现在我们一起来学习一下这个小技巧吧~ 二、方法详解 lincoln同学提供了两个方法函数,其中一个是局部查找,一个是多重查找,我们就来看看他的一个函数逻辑是怎么样的吧。 代码逻辑的核心在于快速地识别目标图像。首先,将目标图像(最好是特征鲜明、尺寸小一些)列表输入 Multiple_exists() 函数。该函数通过循环执行截图操作,每0.2秒进行一次,以最小化循环识别时间。接着将设备屏幕截图和目标图像传递给 match_in_predict_area() 函数,进行裁剪和搜索。一旦找到匹配的图像,立即将坐标信息反馈给 Multiple_exists() 函数,并最终将图像编号和位置信息返回至主函数,供进一步使用。 可以看到当日常在跑游戏ui回归或APP回归的时候可以利用起来,当一...
- 下一篇
BMC解决方案丨服务器故障诊断与预测平台方案设计与实现
近日,OurBMC社区理事成员单位浪潮计算机科技有限公司基于开放原子开源大赛的成果梳理了一份成熟的可落地方案——《基于BMC技术的服务器故障诊断与预测平台方案设计与实现》。该方案为开放原子开源大赛的冠军之作,极大推动了社区产业化落地的发展和工作。 产业化落地SIG包括软硬件及系统解决方案,重点对产业化落地中遇到的困难点进行分析,并贡献解决方案,为产业化做贡献。 《基于BMC技术的服务器故障诊断与预测平台方案设计与实现》针对 “故障预测” 提出了DTF(Dynamic Threshold Funnel 动态阈值漏斗)算法和CPU高温降频算法。DTF算法解决了用户频繁收到CE(Correctable Error 可纠正错误)告警的问题,并利用CE告警对固定位置部件进行故障预测,提前预知服务器部件的健康状态。CPU高温降频算法可辅助CPU降温,一方面缓解了整机散热的压力,另一方面也降低了CPU因高温带来的一系列损耗和负面影响。 服务器故障诊断与预测平台整体方案 本方案系统架构如下图所示,以飞腾服务器芯片搭配浪潮自研主板为基础硬件,从BMC软件应用角度,设计出集故障数据收集、故障诊断、故障预测...
相关文章
文章评论
共有0条评论来说两句吧...