Kubernetes Gateway API 介绍

Kubernetes Gateway API

诞生背景

在 kubernetes 中,流量的治理主要分为两个部分:

  1. 南北向流量
  2. 东西向流量

南北向流量(NORTH-SOUTH traffic)

在计算机网络中,南北向流量通常指数据流量从一个**内部网络(局域网)流向外部网络(公网)**的流量。

在 kubernetes 场景中,南北向流量为:主要指从集群外到集群内的流量。

kubernetes 南北向流量

客户端想要访问部署在 Kubernetes 集群中的服务时, 需要将集群内的服务暴露出来,最常用的方式就是通过 NodePort 或 LoadBalancer 类型的 Service。这两种方式相对来说都比较简单,但是如果用户有很多服务需要暴露到集群外,通过使用这些方式就会浪费很多的端口(NodePort)或者浪费很多 IP(Loadbalancer), 而且由于 Service 的 API 在设计时定位相对清晰,并不包含一些 LB 或者 gateway 的能力,比如根据域名进行代理,认证和鉴权等能力,仅仅只通过 Service 来将集群内服务暴露出去,非常不合理。

基于如上分析,kubernetes 社区新增了一种资源配置:Ingress。资源定义非常之简单,仅仅只能指定 Host、Path 和应用的 Service、Port 和 使用的协议。对于许多场景,Ingress 只是达到了基本可用的状态,没有包含其他场景的功能。例如:

  • 根据 Request Header/Method 进行匹配
  • Path Rewrite
  • ……
Ingress 的工作原理

用户在 Kubernetes 集群中创建 Ingress 资源之后,并没有像 Deployment、Pod 等资源那样,一并实现其对应的 Controller。所以需要一个 ingress controller 这样的组件存在,将 ingress 资源定义翻译成为数据面可以执行的配置,并在数据面生效。当前仅列出的 Ingress controller 就有 30 种:

https://kubernetes.io/docs/concepts/services-networking/ingress-controllers/

同时,由于 Ingress API 只定义了有限的内容,它的表现力不够,为了满足不同场景下的需求,各个 Ingress controller 实现的时候,只好通过创建自己的 CRD(Custom Resource Definition)或者通过为 Ingress 资源增加 annotations 的方式来实现对应的需求。

这里的角色定位是:

Ingress 资源 ==> 反向代理的规则,用于规定 HTTP 或 HTTPS 请求应该被转发到哪个 Service 上,例如可以根据请求中配置的不同 Host 和 Url 路径让请求负载到不同的 Service 上。

Ingress Controlle ==> 反向代理程序,它负责解析 Ingress 的反向代理规则,如果 Ingress 有增删改的变动,所有的 Ingress Controller 都会及时更新自己相应的转发规则,当 Ingress Controller 收到请求后就会根据这些规则将请求转发到对应的 Service 。

东西向流量(EAST-WEST traffic)

东西向流量则是指数据在内部网络中的流动,从一个区域流向另一个区域的流量。

在 kubernetes 场景中,东西向流量指:集群内服务内彼此之间的流量,主要是服务之间的 RPC 流量。

通常是通过 service 来完成,集群内的应用,都通过 Service 将请求流量发送到目标 Pod 中。

但是通常情况下集群内的 Service 使用的是 Overlay 网络(【又叫叠加网络、覆盖网络】简单理解就是把一个逻辑网络建立在一个实体网络之上),存在一定的性能损耗。所以某些场景下,我们并不希望通过 Service 来访问其他的 Pod,而是希望能直接拿到对应的 Pod IP 进行直连。

这种场景下,Service 作用可以认为只是一个 DNS name, 或者自动化管理 endpoint/endpointslices 等资源/信息的组件。这时通常很容易想到 istio/Kuma 等 Service Mesh 项目,他们都通过自己的自定义 CRD 来完成东西向流量管理。当然,因为 kubernetes 未制定任何规范,所以各个实现之间的 CRDs 互不兼容。

Gateway API 出现的背景

2018 年 Kubernetes 社区做的一项统计,调查用户的 Ingress 资源中包含多少为了实现特定需求而增加的 annotations。从结果上可以看到只有 8% 的用户没有额外添加 annotations。同时,将近 85% 的用户期望 Ingress 可以具备良好的移植性。这样用户在不同的环境、集群中就可以更容易的采用相同配置进行处理了。而且相比于更具备表达能力而言,用户更希望的还是可以具备移植性。

所以在 2019 年圣地亚哥 KubeCon 大会上,来自 Kubernetes Networking Special Interest Group (SIG Network) 的很多人共同商量讨论了 Ingress 的现状,用户需求等相关内容,并达成一致要启动 Gateway API 规范的制定。

Gateway API 的现状

由于在设计 Gateway API 的时候,Ingress 资源已经存在了 4 年时间,并且收到了很多用户真实环境的反馈。基于这些经验,设计出的 Gateway API 有如下特点:

img

1. 面向角色

运维只需要关注 GatewayGatewayClass,而开发只需要关注各种 Route

  • GatewayClass: 这是由基础设施供应商提供/配置的,可用于定义一些和基础设施相关的能力;
  • Gateway: 这个是由集群运维来管理的,可以定义一些 Gateway 自身相关的能力,例如监听哪些端口,支持哪些协议等;
  • HTTPRoute/TCPRoute/*Route : 路由规则可以由应用开发者进行管理和发布,因为应用开发知道应用需要暴露出哪些端口,访问路径,以及需要 Gateway 配合哪些功能等。
2. 更丰富的表现力

Gateway API 相比于 Ingress 具有更强的表现力,也就是说通过它原生在 spec 中定义的内容,就可以达到预期的效果,而不需要像 Ingress 资源那样添加 annotations 进行辅助。

3. 可扩展

GatewayAPI 在设计的时候,预留了一些可以进行扩展的点,例如以下的配置,可以在 spec.parametersRef 中关联到任意的自定义资源,从而实现更为复杂的需求。

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

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

相关文章

鸿蒙--DevEco Studio安装步骤及配置

1.华为开发者联盟文档网站:文档中心 2.打开网页后,找到工具准备 (1). (2). (3). (4). (5).压缩包下载完成后解压 3.双击打开应用程序,进行如下操作: 以上步骤完成后,桌面上显示应用,双击打开:…

STM32G071 从 standby 模式退出后的 SRAM 数据保留

1.问题的描述 某客户使用 STM32G071 芯片从 standby 模式下唤醒,想要 SRAM 的数据在退出 standby模式后得以保持。根据手册的描述,配置了相应的比特位,但是发现数据仍然保持不了。 2.问题的复现 根据客户的描述,以及 STM32G071…

Excel:使用VLOOKUP函数,抓取指定数据,后一个列

Excel:使用VLOOKUP函数,抓取指定数据,后一个列 我们有这样一个数据源 要是实现这个页面的赋值 就是对应关系映射 使用 VLOOKUP(A2,Sheet2!$A$2:$B$9,2,FALSE)第一个参数是需要匹配的单元格。 第二个参数是数据源,我这里数据源用的是shee…

基于微信小程序的民宿短租系统设计与实现(论文+源码)_kaic

摘 要 随着社会的发展,出差、旅游成为常态,也就造成民宿短租市场的兴起。人们新到陌生的环境里找民宿一般都是通过中介。中介虽然可以快速找到合适的民宿但会收取大量的中介费用,这对刚到新环境里的人们来说是一笔大的资金支出。也有一些人通…

CMOS逻辑门电路

按照制造门电路的三极管不同,分为MOS型、双极性和混合型。MOS型集成逻辑门有CMOS、NMOS、PMOS;双极型逻辑门有TTL;混合型有BiCMOS。 CMOS门电路是目前使用最为广泛、占主导地位的集成电路。早期CMOS电路速度慢、功耗低,后来随着制…

小程序利用WebService跟asp.net交互过程发现的问题并处理

最近在研究一个项目,用到asp.net跟小程序交互,简单的说就是小程序端利用wx.request发起请求。获取asp.net 响应回来的数据。但经常会报错。点击下图的测试按钮 出现如下错误: 百思不得其解,试了若干方法,都不行。 因为…

Golang-Gin光速入门

安装 go get -u github.com/gin-gonic/gin初始化项目并启动服务 go mod init gin-project package mainimport "github.com/gin-gonic/gin"func main() {r : gin.Default()r.GET("/ping", func(c *gin.Context) {c.JSON(200, gin.H{"message"…

成都市酷客焕学新媒体科技有限公司:实现品牌的更大价值!

成都市酷客焕学新媒体科技有限公司专注于短视频营销,深知短视频在社交媒体中的巨大影响力。该公司巧妙地将品牌信息融入富有创意和趣味性的内容中,使观众在轻松愉悦的氛围中接受并传播这些信息。凭借独特的创意和精准的营销策略,成都市酷客焕…

常用植被物候提取方法 (TIMESATE/R语言/Python)-3.0

文章内容仅用于自己知识学习和分享,如有侵权,还请联系并删除 :) 常用植被物候提取方法 (TIMESATE/R语言/Python)-1.0见 link常用植被物候提取方法 (TIMESATE/R语言/Python)-2.0见 link 这里主要介绍一下自己读到的论文&#xff…

element-ui 自定义点击图标/文本/按钮触发el-date-picker时间组件,不使用插槽

天梦星服务平台 (tmxkj.top)https://tmxkj.top/#/ 1. 图片预览 2.上代码 2.1html <el-button class"hide_input" size"small"><svg t"1711608996149" class"icon" viewBox"0 0 1024 1024" version"1.1"…

专题:一个自制代码生成器(嵌入式脚本语言)之应用实例

初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github&#xff1a;codetoys&#xff0c;所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C的&#xff0c;可以在任何平台上使用。 专题&#xff1a;一个自制代码…

Day29 集合的常用类

Day29 集合的常用类 文章目录 Day29 集合的常用类一、Collections二、 ConcurrentHashMap三、HashMap vs LinkedHashMap vs Hashtable vs ConcurrentHashMap四、LinkedHashMap五、Properties 一、Collections 1、概念&#xff1a; java.util.Collections是Java集合框架中的一…

使用C++ 20协程实现Raft共识算法

本文描述了如何在不使用任何额外库的情况下在c 20中实现Raft Server共识模块。文章分为三个主要部分: Raft算法的全面概述关于Raft服务器开发的详细说明对基于协程的自定义网络库的描述 该实现利用了C 20的强大功能&#xff0c;特别是协同程序&#xff0c;为构建分布式系统的…

RecyclerView 调用 notifyItemInserted 自动滚动到底部的问题

项目中发现一个奇怪的现象 RecyclerView 加载完数据以后&#xff0c;调用 notifyItemInserted 方法&#xff0c;RecyclerView 会滑动到底部。 简化后的效果图&#xff1a; 因为这个 RecyclerView 的适配器有一个 FootViewHolder&#xff0c;所以怀疑是 FootViewHolder 的问题…

车载以太网AVB交换机 gptp透明时钟 5口 全千兆 SW1500

全千兆车载以太网交换机 一、产品简要分析 5端口千兆车载以太网交换机&#xff0c;包含4个通道的1000BASE-T1接口使用罗森博格H-MTD和泰科MATEnet双接口&#xff0c;1个通道1000BASE-T标准以太网(RJ45接口)&#xff0c;可以实现车载以太网多通道交换&#xff0c;千兆和百兆车载…

GPT-1原理-Improving Language Understanding by Generative Pre-Training

文章目录 前言提出动机模型猜想模型提出模型结构模型参数 模型预训练训练的目标训练方式训练参数预训练数据集预训练疑问点 模型微调模型输入范式模型训练微调建议微调疑问点 实验结果分析 前言 首先想感慨一波 这是当下最流行的大模型的的开篇之作&#xff0c;由OpenAI提出。…

蓝桥杯-卡片换位

solution 有一个测试点没有空格&#xff0c;要特别处理&#xff0c;否则会有一个测试点运行错误&#xff01; 还有输入数据的规模在变&#xff0c;小心顺手敲错了边界条件 #include<iostream> #include<string> #include<queue> #include<map> #incl…

持续集成流程主要系统构成介绍(CI)

目录 一、概述 二、版本控制系统 2.1 概述 2.2 版本控制系统使用流程示意图 2.3 版本控制软件划分 2.3.1 集中式版本控制软件 2.3.2 分布式版本控制软件 2.3.3 总结 2.4 常用版本控制软件介绍 三、编译构建系统 3.1 概述 3.2 编译构建流程示意图 3.3 列举Java 源码…

Kafka重要配置参数全面解读(重要)

欢迎来到我的博客&#xff0c;代码的世界里&#xff0c;每一行都是一个故事 Kafka重要配置参数全面解读(重要 前言auto.create.topics.enableauto.leader.rebalance.enablelog.retention.{hour|minutes|ms}offsets.topic.num.partitions 和 offsets.topic.replication.factorlo…

回文数个数-第12届蓝桥杯选拔赛Python真题精选

[导读]&#xff1a;超平老师的Scratch蓝桥杯真题解读系列在推出之后&#xff0c;受到了广大老师和家长的好评&#xff0c;非常感谢各位的认可和厚爱。作为回馈&#xff0c;超平老师计划推出《Python蓝桥杯真题解析100讲》&#xff0c;这是解读系列的第43讲。 回文数个数&#…