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.hqwc.cn/news/319715.html

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

相关文章

商业综合体能源管理系统功能有哪些?能够为企业带来哪些价值?

随着IT行业的迅猛发展,仅仅实现智能控制已无法满足当前绿色低碳发展的要求,随着智能设备的增多,同时也产生了越来越多的信息孤岛。通过信息技术构建能源管理系统,可以实现先进、智能、经济、可行的商业综合体能源管理解决方案。 …

AI实景无人直播创业项目:开启自动直播新时代,一部手机即可实现财富增长

在当今社会,直播已经成为了人们日常生活中不可或缺的一部分。无论是商家推广产品、明星互动粉丝还是普通人分享生活,直播已经渗透到了各行各业。然而,传统直播方式存在着一些不足之处,如需现场主持人操作、高昂的费用等。近年来&a…

公司图纸该怎么管理? 公司图纸管理的方案

公司图纸管理是一个重要的环节,涉及到图纸的存储、分类、检索和使用等方面。以下是一些建议,帮助你有效地管理公司图纸: 建立图纸管理制度:制定明确的图纸管理制度,包括图纸的存储、分类、检索和使用等方面的规定。确保…

网络安全—部署CA证书服务器

文章目录 网络拓扑安装步骤安装证书系统安装从属证书服务器 申请与颁发申请证书CA颁发证书 使用windows Server 2003环境 网络拓扑 两台服务器在同一网段即可,即能够互相ping通。 安装步骤 安装证书系统 首先我们对计算机名进行确认,安装了证书系统后我…

海外服务器2核2G/4G/8G和4核8G配置16M公网带宽优惠价格表

腾讯云海外服务器租用优惠价格表,2核2G10M带宽、2核4G12M、2核8G14M、4核8G16M配置可选,可以选择Linux操作系统或Linux系统,相比较Linux服务器价格要更优惠一些,腾讯云服务器网txyfwq.com分享腾讯云国外服务器租用配置报价&#x…

利用GitHub开源项目ChatGPTNextWeb构建属于自己的ChatGPT - Docker

Docker部署ChatGPTNextWeb ChatGPTNextWeb项目github开源地址:https://github.com/ChatGPTNextWeb/ChatGPT-Next-Web 根据文档部署ChatGPTNextWeb 文档地址:https://github.com/ChatGPTNextWeb/ChatGPT-Next-Web/blob/main/README_CN.md 步骤一&#…

YogaPro 16s 安装Ubuntu23.04 教程

一、 制作启动盘 官网下载Ubuntu23.04镜像,安装rufus软件,按照下图设置相应格式,然后点击开始即可 二、 磁盘空间分配 流程: 此电脑右键管理 -> 选择磁盘管理 -> 选中D盘 -> 压缩卷 -> 选择需压缩的内存即可 三、…

提供电商Api接口-100种接口,淘宝,1688,抖音商品详情数据安全,稳定,支持高并发

Java是一种高级编程语言,由Sun Microsystems公司于1995年推出,现在属于Oracle公司开发和维护。Java以平台无关性、面向对象、安全性、可移植性和高性能著称,广泛用于桌面应用程序、嵌入式系统、企业级服务、Android移动应用程序等。 接口是Ja…

论文阅读:通过时空生成卷积网络合成动态模式(重点论文)

原文链接 github code 介绍视频 视频序列包含丰富的动态模式,例如在时域中表现出平稳性的动态纹理模式,以及在空间或时域中表现出非平稳的动作模式。 我们证明了时空生成卷积网络可用于建模和合成动态模式。 该模型定义了视频序列上的概率分布&#xff0…

快速打通 Vue 3(二):响应式对象基础

很激动进入了 Vue 3 的学习,作为一个已经上线了三年多的框架,很多项目都开始使用 Vue 3 来编写了 这一组文章主要聚焦于 Vue 3 的新技术和新特性 如果想要学习基础的 Vue 语法可以看我专栏中的其他博客 Vue(一):Vue 入…

计算机网络期末知识点总结

计算机网络概述考点 计算机网络的组成 从组成部分看:一个完整的计算机网络主要由硬件、软件、协议三大部分组成,缺一不可。硬件主要指:主机、通信链路、交换设备和通信设备等;软件主要指:用户使用的各种软件&#xf…

LinkedList与ArrayList的比较

1.LinkedList 基于双向链表,无需连续内存 随机访问慢(要沿着链表遍历) 头尾插入删除性能高 占用内存多 2.ArrayList 基于数组,需要连续内存 随机访问快(指根据下标访问) 尾部插入、删除性能可以&…