Kubernetes Gateway API V1.0:您应该切换吗?

自Kubernetes Gateway API 发布 v1.0以来已经过去两个多月了,这标志着其一些关键 API 已经进入普遍可用状态。

去年,当网关 API升级为测试版时,我曾写过有关该 API的文章,但一年后,问题仍然存在。您是否应该从 Ingress API 切换到 Gateway API?

我去年的回答是你不应该。我有充分的理由。

Gateway API 及其实现仍处于起步阶段。另一方面,Ingress API 很稳定,涵盖了一些可能适合大多数用户的主要用例。

对于需要更多功能的用户,我建议通过权衡可移植性(在不同 Ingress 实现之间切换)来使用 Ingress 控制器提供的自定义资源。

随着 v1.0 版本的发布,这种情况可能会改变。Gateway API 现在功能更加强大,其20 多个实现正在迅速赶上。

因此,如果您重新开始并在 Ingress 和 Gateway API 之间进行选择,如果您选择的 API 和实现支持您想要的所有功能,我建议您选择 Gateway API。

Ingress API 出了什么问题?

Ingress API工作得很好,但仅适用于一小部分常见用例。为了扩展其功能,Ingress 实现开始使用自定义注释。

例如,如果您选择 Nginx Ingress,那么如果您决定切换到Apache APISIX等其他 Ingress 实现,您将使用其数十个不可移植的注释中的一些注释。

这些特定于实现的注释管理起来也很麻烦,并且违背了以 Kubernetes 原生方式管理 Ingress 的目的。

最终,Ingress 控制器实现开始开发其 CRD,以向 Kubernetes 用户公开更多功能。这些 CRD 特定于 Ingress 控制器。但如果您可以牺牲便携性并坚持使用一个 Ingress 控制器,那么 CRD 会更易于使用并提供更多功能。

Gateway API 旨在通过提供 Ingress API 的供应商不可知性和 CRD 的灵活性来一劳永逸地解决这个问题。它处于非常有利的位置来实现这一目标。

从长远来看,Ingress API预计不会获得任何新功能,并且将尽一切努力与Gateway API融合。因此,当您无意中触及 Ingress API 的功能限制时,采用 Ingress API 可能会导致问题。

明显的好处

富有表现力、可扩展和面向角色是塑造 Gateway API 开发的关键思想。

与 Ingress API 不同,Gateway API 是多个 API(HTTPRoute、Gateway、GatewayClass 等)的集合,每个 API 满足不同的组织角色。

例如,应用程序开发人员只需要关心 HTTPRoute 资源,他们可以在其中定义路由流量的规则。他们可以将集群级别的详细信息委托给管理集群的操作员,并确保它使用网关资源满足开发人员的需求。

网关API

这种面向角色的API 设计允许不同的人在保持控制的同时使用集群。

Gateway API 的功能也比 Ingress API 强大得多。Gateway API 开箱即用地支持 Ingress API 中需要注释的功能。

官方扩展

尽管 Gateway API 是官方的 Kubernetes API,但它是作为一组 CRD 实现的。

这与使用默认的 Kubernetes 资源没有什么不同。但你只需像安装官方扩展一样安装这些 CRD即可。

APISIX 的网关 API 支持


Ingress 控制器将 Kubernetes 资源转换为 API 网关实现的 APISIX 配置。

与缓慢走向长期稳定的 Kubernetes 相比,这允许快速迭代。

它会扩散吗?

正如这位著名的 XKCD 漫画经常提醒我们的那样,标准往往会激增。

在 Ingress 和 Gateway API 中可以看到这样的一个版本。通常是这样的:

  1. 出现了一个标准来统一不同的项目/它们的标准(Kubernetes Ingress API)。
  2. 统一标准存在实施者想要克服的局限性(Ingress API 受到限制)。
  3. 由于这些限制(自定义 CRD、注释),实现与标准有所不同。
  4. 现在每个实现都有其标准(不可移植的 CRD、注释)。
  5. 一个新标准的出现来统一这些不同的标准(Kubernetes Gateway API)。

有理由认为 Gateway API 可能不是这里的最终游戏。但我相信它完全有可能成为 Kubernetes 中路由的标准。

再说一次,我有我强有力的理由。

广泛采用对于防止标准扩散至关重要,因为实施不同标准的动力较少。Gateway API 已经有超过 25 个实现。

实现可以在不同级别上符合网关 API:

  1. 核心:所有实现都应符合这些要求。
  2. 扩展:这些可能仅在某些实现中可用,但它们是标准 API。
  3. 特定于实现:特定于实现,但通过标准扩展点添加。

随着越来越多的实现支持这些功能,利基功能可以从特定于实现转移到扩展至核心。即,API 为自定义扩展留有空间,同时确保其遵循标准。

服务网格接口 (SMI)项目是一个类似的尝试,旨在标准化 Kubernetes 中的服务网格配置。然而,在服务网格项目最初参与之后,该项目几乎没有受到关注,并慢慢消亡。

SMI 不支持用户期望在服务网格中使用的许多共同特性。它的发展速度也不够快,无法支持这些功能。最终,服务网格实现在遵守 SMI 方面落后了(我曾经在CNCF TAG 网络下与 SMI 密切合作,从事一个报告 SMI 一致性的项目)。

这些都是普遍原因,但该项目现在正在通过 Gateway API 复活。用于网格管理和管理的网关 API (GAMMA) 计划旨在扩展网关 API 以与服务网格配合使用。

SMI 项目最近与 GAMMA 计划合并,这对于网关 API 来说非常好。Istio 无疑是最受欢迎的服务网格,它也宣布 Gateway API 将成为未来管理 Istio 的默认 API。这种收养可以防止扩散。

迁移指南

网关API 文档提供了有关将 Ingress 资源迁移到网关资源的全面指南。我们不再重述,而是尝试使用ingress2gateway工具将我们的 Ingress 资源转换为相应的 Gateway API 资源。

您可以直接从发布页面下载并安装适用于您的操作系统的二进制文件。

我们来看一个简单的 Ingress 资源:​

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:name: httpbin-route
spec:ingressClassName: apisixrules:- host: local.httpbin.orghttp:paths:- backend:service:name: httpbinport:number: 80path: /pathType: Prefix
这会将具有提供的主机地址的所有流量路由到该httpbin服务。

要将其转换为网关 API 资源,我们可以运行:

ingress2gateway print --input_file=ingress.yaml
该网关 API 资源如下所示:
apiVersion: gateway.networking.k8s.io/v1alpha2
kind: HTTPRoute
metadata:name: httpbin-route
spec:hostnames:- local.httpbin.orgrules:- matches:- path:type: PathPrefixvalue: /backendRefs:- name: httpbinport: 80

可行的替代方案

在 Kubernetes 中配置网关还有其他可行的替代方案。

在 Apache APISIX 中,您可以以独立模式部署它并在 YAML 文件中定义路由配置。您可以通过传统工作流程更新此 YAML 文件,在不需要通过 Kubernetes API 管理网关配置的场景中,它非常有用。

如果您不打算切换到不同的解决方案或者您的配置足够小以便可以轻松迁移,则特定于实现的自定义 CRD 也是可行的替代方案。

无论如何,网关 API 将继续存在。


作者:Navendu Pottekkat ​

更多技术干货请关注公号【云原生数据库

squids.cn,云数据库RDS,迁移工具DBMotion,云备份DBTwin等数据库生态工具。

irds.cn,多数据库管理平台(私有云)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/233343.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

多功能号卡推广分销管理系统 流量卡推广分销网站源码-目前市面上最优雅的号卡系统

一套完善,多功能,的号卡分销系统,多接口,包括运营商接口,无限三级代理,最简单易用的PHP~ 目前市面上最优雅的号卡系统!没有之一 软件架构说明 环境要求php7.3以上(建议低于8.0),MySQL5.6以上,Nginx1.16(无要求) 产品特性 自动安装向导 易于安装使用部署 多个第…

安全与认证Week4

目录 目录 Web Security (TLS/SSL) 各层安全协议 Transport Layer Security (TLS)传输层安全性(TLS) SSL和TLS的联系与区别 TLS connection&session 连接与会话 题目2答案点 TLS ArchitectureTLS架构(5个协议) 题目1答案点 Handshake Proto…

云原生技术专题 | 解密2023年云原生的安全优化升级,告别高危漏洞、与数据泄露说“再见”(安全管控篇)

背景介绍 2023年,我们见证了科技领域的蓬勃发展,每一次技术革新都为我们带来了广阔的发展前景。作为后端开发者,我们深受其影响,不断迈向未来。 随着数字化浪潮的席卷,各种架构设计理念相互交汇,共同塑造了…

SpringCloud系列篇:核心组件之负载均衡组件

🥳🥳Welcome Huihuis Code World ! !🥳🥳 接下来看看由辉辉所写的关于SpringCloud的相关操作吧 目录 🥳🥳Welcome Huihuis Code World ! !🥳🥳 一.负载均衡组件是什么 二.负载均衡…

小程序实现绘制图片 保存到手机

HTML <template><view><canvas canvas-id"myCanvas" :style"{height:380px,width:wWidthpx,background:#FFFFFF}"></canvas><view class"textCenter"><button click"saveCanvas">保存图片</b…

OpenHarmony沙箱文件

一.前言 1.前景提要 DevEcoStudio版本&#xff1a;DevEco Studio 3.1 Release SDK版本&#xff1a;3.2.2.5 API版本&#xff1a;9 2.概念 在openharmony文件管理模块中&#xff0c;按文件所有者分类分为应用文件和用户文件和系统文件。 1&#xff09;沙箱文件。也叫做应…

学习Redis缓存

学习Redis缓存 NoSQL和SQL的区别缓存缓存作用缓存成本添加Redis缓存 Redis特征Redis中数据结构Redis通用命令String类型Key的层级格式Hash类型Redis的Java客户端 NoSQL和SQL的区别 缓存 缓存就是数据交换的缓冲区&#xff0c;是存储数据的临时地方&#xff0c;一般读写性比较高…

Weblogic安全漫谈(三)

本篇介绍coherence.jar中的漏洞利用链及后续绕过。 经历2015到2018的3年迭代后&#xff0c;Weblogic的黑名单逐渐完善&#xff0c;废掉CC反序列化更是釜底抽薪。另一方面也促使研究员去挖掘新组件新利用链&#xff0c;这篇介绍的就是testbnull在发现Spring写文件链后[1]&#…

【leetcode】力扣热门之反转链表【简单难度】

题目描述 给你单链表的头节点 head &#xff0c;请你反转链表&#xff0c;并返回反转后的链表。 用例 输入&#xff1a;head [1,2,3,4,5] 输出&#xff1a;[5,4,3,2,1] 输入&#xff1a;head [1,2] 输出&#xff1a;[2,1] 输入&#xff1a;head [] 输出&#xff1a;[…

21. Mysql 事件或定时任务,解放双手,轻松实现自动化

文章目录 概念常见操作事件调度器操作查看事件创建事件删除事件启动与关闭事件 精选示例构造实时数据定时统计数据 总结参考资料 概念 Mysql 事件是一种在特定时间点自动执行的数据库操作&#xff0c;也可以称呼为定时任务&#xff0c;它可以自动执行更新数据、插入数据、删除…

C#,数值计算,求平方根之巴比伦算法(Babylonian algorithm)的源代码

平方根的巴比伦算法。 1 巴比伦算法介绍一 巴比伦算法可能算是最早的用于计算$sqrt{S}$的算法之一&#xff0c;因为其可以用牛顿法导出&#xff0c;因此在很多地方也被成为牛顿法。其核心思想在于为了计算x的平方根&#xff0c;可以从某个任意的猜测值g开始计算。在真实的运算…

linux cpu、memory 、io、网络、文件系统多种类型负荷模拟调测方法工具

目录 一、概述 二、stress介绍和使用 2.1 介绍 2.2 使用 三、stress-ng介绍和使用 3.1 介绍 3.2 使用 3.3 实例 四、sysbench 4.1 介绍 4.2 使用 五、lmbench 5.1 介绍 5.2 使用 一、概述 今天介绍两款cpu负荷调试工具&#xff0c;用来模拟多种类型的负载。主要用…

逆向一个Go程序

前奏 事先声明&#xff0c;自导自演&#xff0c;纯属为了演示基本的逆向思维 用Go写一段模拟登录的代码&#xff1a; package mainimport ("fmt" )func main() {pass : ""fmt.Print("input password:")fmt.Scan(&pass)if pass "hel…

type-c接口PD诱骗

小家电Type-C接口PD诱骗&#xff1a;未来充电的便捷与安全 随着科技的不断发展&#xff0c;Type-C接口已经成为了许多小家电产品的标配。而PD&#xff08;Power Delivery&#xff09;诱骗技术&#xff0c;作为一种新兴的充电技术&#xff0c;更是为小家电产品的充电带来了前所…

Python从入门到网络爬虫(面向对象详解)

前言 Python从设计之初就已经是一门面向对象的语言&#xff0c;正因为如此&#xff0c;在Python中创建一个类和对象是很容易的。本章节我们将详细介绍Python的面向对象编程。如果你以前没有接触过面向对象的编程语言&#xff0c;那你可能需要先了解一些面向对象语言的一些基本…

MYSQL 索引使用规则

索引失效 最左前缀法则 where之后写的顺序不重要&#xff0c;存在就可以 范围查询后面的索引查询失效&#xff08;比如>&#xff09;,但是>或者<是不会失效的 不要在索引列上进行运算操作&#xff0c;否则索引失效。 字符串类型字段不加引号索引会失效 尾部模糊匹配…

nodejs 不用 electron 实现打开文件资源管理器并选择文件

前言 最近在开发一些小脚本&#xff0c;用 nodejs 实现。其中很多功能需要选择一个/多个文件&#xff0c;或者是选择一个文件夹。 最初的实现是手动输入一个目录&#xff08;这个只是一个普通的终端文本输入&#xff0c;所以按下 tab 没有路径提示&#xff09;&#xff0c;非…

Python组装jmx并调用JMeter执行压测

JMeter可以通过os命令调用Python脚本&#xff0c;Python同样可以通过系统命令调用JMeter执行压测 Python调用JMeter 首先要安装JMeter&#xff0c;官方下载地址 解压并配置配置环境路径或建立软连&#xff0c;使得在命令输入jmeter便可以执行&#xff0c;如 Copyunzip apach…

卫星互联网与MEC融合方案研究

卫星互联网与MEC融合方案研究 作者&#xff1a;温特、王立中、司鹏、颜明明、马恬、郭伊蒙 中国卫通集团股份有限公司 本文首发&#xff1a;第十九届卫星通信学术年会 摘 要&#xff1a;在卫星互联网中引入移动边缘计算(MEC)技术可有效提高用户体验质量&#xff0c;降低运营成…

Speech | 人工智能中语音质量评估方法详解及代码

本文主要讲解人工智能中语音合成&#xff0c;语音转换&#xff0c;语音克隆等生成语音的一些质量评估方法~ 目录 1.语音质量评测方法 主观评价方法 1.1.MOS 1.2.CMOS 1.3.ABX Test 1.4.MUSHRA&#xff08;MUltiple Stimuli with Hidden Reference and Anchor&#xff0…