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

news2024/9/20 5:44:31

自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: apisix
  rules:
    - host: local.httpbin.org
      http:
        paths:
          - backend:
              service:
                name: httpbin
                port:
                  number: 80
            path: /
            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.org
  rules:
  - matches:
    - path:
        type: PathPrefix
        value: /
    backendRefs:
    - name: httpbin
      port: 80

可行的替代方案

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

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

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

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


作者:Navendu Pottekkat ​

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

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SV-DJS-I13 深圳锐科达电梯 IP 五方对讲规格书

SV-DJS-I13 深圳锐科达电梯 IP 五方对讲规格书 DJS-I13 是专门对行业用户需求研发的一款 SIP 电梯五方对讲。它不仅有稳定性 好、电信级音质的优点,且完美兼容当下所有基于 SIP 的主流 IPPBX/软交换/IMS 平台, 如 Asterisk, Broadsoft, 3CX, Elastix 等。它集…

【MySQL用户管理】

目录: 前言用户管理创建用户删除用户修改用户密码修改用户密码安全检测设置 用户权限添加权限回收权限 总结 前言 剑指offer:一年又13天 用户管理 mysql> show databases; -------------------- | Database | -------------------- | inf…

[Python进阶] Python处理txt文件:open

7.1 Python处理txt文件:open 在Python中,通过open函数可以打开一个文件,创建一个file对象,然后对该对象进行读写。 函数语法: open(name[, mode[, buffering]…]) 参数说明: name:文件名 mode&…

你真的知道2024程序员搞钱新姿势吗?

2023年已经过去,2024的序曲已经奏响!回顾2023,我们经历了降薪裁员的大趋势,身为程序员也有点惶惶不可终日,害怕会失去工作,害怕面对家人无奈的模样,害怕跟不上时代的步伐,沦为被大环…

Minitab 各版本安装指南

Minitab下载链接 https://pan.baidu.com/s/1PLqocknkoRGGI9lbV3e45A?pwd0531 1.鼠标右击【Minitab 21(64bit)】压缩包(win11及以上系统需先点击“显示更多选项”)选择【解压到 Minitab 21(64bit)】。 2.打开解压后的文件夹,鼠标右击【setu…

众和策略安全可靠:如何区分大盘股和小盘股?大盘股指数有哪些?

股票根据流转盘能够划分为大盘股、中盘股、小盘股这三大类,那么,怎么区别大盘股和小盘股?大盘股指数有哪些?下面众和策略为我们准备了相关内容,以供参考。 怎么区别大盘股和小盘股? 根据个股的市值来区别…

使用异构图学习破解推荐系统 - 第 1 部分

Lokesh Sharma – Medium 一、说明 所以,这是独家新闻:异质图拥有一个充满潜力的世界,而常规图却无法做到这一点。传统的同构图很难处理不同关系和边类型的复杂性。现在是大炮的时候了——先进的架构可以解决具有多种边缘和关系类型的数据集的…

Go后端开发 -- Go Modules

Go后端开发 – Go Modules 文章目录 Go后端开发 -- Go Modules一、什么是Go Modules?二、GOPATH的工作模式1.GOPATH模式2.GOPATH模式的弊端 三、Go Modules模式创建项目1.go mod命令2.go mod环境变量3.使用Go Modules初始化项目4.修改模块的版本依赖关系 四、Go Modules下impo…

快速实现前后端表单交互(minui)

(1)使用minui快速生成表单 (2)修改样式,将生成的html文件发送给后端 (3)前后端交互(后端如何处理不太清楚) 表单初始化:新增修改(包括查看&…

如何远程修改plc程序?

​在工业自动化领域中,PLC(可编程逻辑控制器)是不可或缺的一部分。然而,传统方式下修改PLC程序需要亲临现场,这不仅耗时,还增加了成本。那么有没有一种更加高效、便捷的方法呢?答案是肯定的&…

【REST2SQL】03 GO读取JSON文件

REST2SQL需要一些配置信息,用JSON文件保存,比如config.json 1 创建config.json配置文件 {"hostPort":"localhost:5217","connString":"oracle://blma:5217127.0.0.1:1521/CQYH","_oracle":"ora…

6591A便携式光伏组串测试仪

01 6591A便携式光伏组串测试仪 产品综述: 6591A主要用于1500V光伏组串的测试,能够方便、快速的测试1500V光伏组串在自然光照下的工作特性,可为太阳能电站设计、验收、维护提供测试保障,是电站建设单位、质检部门、生产厂家、科研…

Navicat 技术干货 | 聚合查询的介绍

基础 SQL 查询可以检索、插入、更新和删除记录,而聚合查询可通过提供求和、平均值或最大/最小值等的大型结果集,将数据库交互提升到一个新的水平。本文中,我们将探索聚合 SQL 查询的基础知识,并研究如何有效的利用他们来分析和汇总…

边坡安全监测预警系统——高效率

安装边坡安全监测预警系统的原因是多方面的,涉及到社会效益、经济效益和环境效益。随着国家基础设施建设的快速发展,边坡安全监测预警系统的需求越来越迫切。 边坡安全监测预警系统对于保障人民生命财产安全具有重要意义。在山区、丘陵地带,边…

牛客网面试题知识点记录-03

1.题目讲解重写后子类调用父类的方法总结:当子类重写了父类方法A,父类方法直接调用被重写的父类方法后,调用的是子类的重写的父类方法A。 class Test {public static void main(String[] args) {System.out.println(new B().getValue());}st…

安科瑞电化学储能电能管理系统解决方案——安科瑞 顾烊宇

1 概述 在我国新型电力系统中,新能源装机容量逐年提高,但是新能源比如光伏发电、风力发电是不稳定的能源,所以要维持电网稳定,促进新能源发电的消纳,储能将成为至关重要的一环,是分布式光伏、风电等新能源消…

Java中的异常如何处理?

在Java编程中,异常是一种在程序执行期间发生的意外情况。学会处理异常是编写健壮、可靠程序的关键之一。 为什么需要异常处理? 异常处理允许程序在发生错误时进行优雅而有序的处理,而不是导致程序崩溃。这有助于提高程序的可维护性和用户体…

Alibaba Cloud Linux镜像操作系统超详细测评!兼容CentOS

Alibaba Cloud Linux是基于龙蜥社区OpenAnolis龙蜥操作系统Anolis OS的阿里云发行版,针对阿里云服务器ECS做了大量深度优化,Alibaba Cloud Linux由阿里云官方免费提供长期支持和维护LTS,Alibaba Cloud Linux完全兼容CentOS/RHEL生态和操作方式…

Vue: 多个el-select不能重复选择相同属性

一、场景 1.需求&#xff1a; 用户可自由选择需要修改的对象并同时修改多个属性&#xff0c;需要校验修改对象不能重复选择&#xff0c;但是可供修改属性是固定的 2.目标效果&#xff1a; 二、实现 1.主要代码&#xff1a; <template><el-selectv-model"se…

k8s pod基础 1

发布和yaml文件的初步了解。 pod&#xff1a;是k8s中最小的资源管理组件。 pod也是最小化运行容器化的应用的资源管理对象。 pod是一个抽象的概念&#xff0c;可以理解为一个或者多个容器化应用的集合。 在一个pod当中运行一个容器是最常用的方式。 在一个pod当中可以同时…