Kubernetes Gateway API 介绍

news2024/12/22 0:22:03

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://www.coloradmin.cn/o/1551694.html

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

相关文章

20231911马星 2022-2023-2 《网络攻防实践》实验四

1.实践内容 在网络攻防实验环境中完成TCP/IP协议栈重点协议的攻击实验,包括ARP缓存欺骗攻击、ICMP重定向攻击、SYN Flood攻击、TCP RST攻击、TCP会话劫持攻击。 1.1 ARP欺骗攻击: (1)ARP欺骗(ARP spoofing&#xff09…

【算法-PID】

算法-PID ■ PID■ 闭环原理■ PID 控制流程■ PID 比例环节( Proportion)■ PID 积分环节(Integral)■ PID 微分环节(Differential) ■ PID PID 分别是 Proportion(比例)、 Integr…

如何购买小程序模板开发企业小程序

在当今数字化时代,小程序已成为企业展示与营销的重要工具。购买一个小程序模板,来快速上线自己的企业小程序,已成为当前最流行且性价比最高的开发方式。 乔拓云网站提供了丰富的小程序模板资源,无论你需要哪种风格或功能的小程序&…

WOT全球技术创新大会2024北京站:技术派与市场派共话AIGC新未来

WOT全球技术创新大会2024将在北京盛大开幕,聚焦AIGC时代的软件工程新范式、AI Agent探索与应用、多模态AIGC前沿探索以及大模型部署与应用等核心议题。此次大会将促进技术信仰派与市场信仰派间的深度对话与交流,共同探讨AIGC技术的未来发展方向。 在过去…

【Java程序设计】【C00351】基于Springboot的疫情居家办公系统(有论文)

基于Springboot的疫情居家办公系统(有论文) 项目简介项目获取开发环境项目技术运行截图 项目简介 项目获取 🍅文末点击卡片获取源码🍅 开发环境 运行环境:推荐jdk1.8; 开发工具:eclipse以及i…

Flask python 开发篇:上传文件(在指定目录下创建文件夹)

flask上传文件以及常见问题 一、flask文档上传文件的介绍二、上传文件的实现2.1、生成一个from表单,用来提交图片2.2、编写上传的逻辑 三、运行代码、以及常见异常四、写在最后 一、flask文档上传文件的介绍 Flask上传文件的文档介绍,文件上传的基本思想…

快递鸟物流轨迹地图API接口,包裹行程尽在掌握!

在快节奏的现代生活中,物流行业作为连接生产者与消费者的桥梁,其重要性不言而喻。随着电子商务的飞速发展,人们对物流信息的实时性和准确性要求越来越高。为了满足这一需求,快递鸟物流轨迹地图API应运而生,为广大用户提…

WIFI驱动移植实验: wireless tools 工具测试

一. 简介 前面一篇文章交叉编译了 wireless tools 工具,并移植到开发板文件系统上。文章如下: WIFI驱动移植实验: wireless tools 工具移植-CSDN博客 本文对 所移植的操作 WIFI设备的工具 wireless tools进行测试。确认是否可以使用。 二…

【浅尝C++】使用模板实现泛型编程第一弹=>函数模板/类模板/模板匹配原则/函数模板原理

🏠专栏介绍:浅尝C专栏是用于记录C语法基础、STL及内存剖析等。 🚩一些备注:之前的文章有点杂乱,这里将前面的知识点重新组织了,避免了过多冗余的废话。 🎯每日努力一点点,技术变化看…

如何删除Excel中的空白行?这里提供详细步骤

要从数据集中删除所有空白行吗?如果是这样,Microsoft Excel提供自动和手动方法来清除空白行并向上移动数据。下面是如何使用这些方法。 删除空白行时,Excel会删除整行并上移数据,以便数据集中不再有空行。记住,你也可…

linux下使用迅雷的完美办法(网络版免费),其他下载工具

迅雷有自家服务器的支持,因此,其他下载器,可能难以匹敌 ? linux下使用迅雷的完美办法(免费) https://blog.csdn.net/lqrensn/article/details/8853949 网络版 Linux下安装并使用迅雷 https://www.lxlin…

【微服务】Nacos(注册中心)

文章目录 1.基本介绍1.概述2.Nacos下载和运行(java8/maven3.2.x)1.解压到没有中文路径的2.双击startup3.浏览器输入http://192.168.242.124:8848/nacos4.用户名和密码为nacos5.cmd输入netstat -anb | more查看监听端口 2.创建Nacos服务提供者 100041.项目…

人工智能在产业中应用--生成智能

二、生成式人工智能 前面介绍了很多人工智能的应用,接下来部分我们会介绍当前正在进行的生成智能。生成智能和以往的人工智能有什么区别,个人觉得主要区别就在于“度”。在表现上就是以前的人工智能更多是利用既有的数据集分布挖掘和解决在这个数据集下…

WPF 命名空间解释

在C#中有命名空间的概念,我们可以使用using引入,就可以使用其中的类,在xaml中,也同样有命名空间,在window标签中用xmlns声明的这几行,这就是本页面引入的命名空间。 一般的情况下,我们引入命名空…

计算机网络:传输控制协议(Transmission Control Protocol-TCP协议

计算机网络:传输控制协议(Transmission Control Protocol-TCP协议) 本文目的前置知识点TCP协议简介主要特性通信流程1. 建立连接的过程(三次握手,243)1.1 为什么要三次握手,两次不行吗? 2. 释放连接的过程(…

在Linux上使用nginx反向代理部署Docker网站

在政务云上部署Web环境,为了保证服务器安全,甲方只开放一个端口且只允许使用https协议进行访问,经过思考,决定使用docker部署网站,使用nginx反向代理,通过不同的二级域名访问不同的端口。 1 使用docker部署…

每日一题系列 —— 说一下JS的数据类型。/ JavaScript的数据类型有哪些?

面试官:说一下JS的数据类型。/ JavaScript的数据类型有哪些? 答:JavaScript的数据类型分为两种:①基本数据类型;②引用数据类型 其中基本数据类型包括: (1)数值(Number…

ubuntu的常用操作

一、用户 1.1 创建新用户 1.1.1 添加、修改、删除 1.2 超级用户root 切换到root用户,有全部权限,可以直接使用任何命令。 我们在什么时候才会切换到root用户进行操作呢?当我们使用某些命令,不想前面一直加sudo的话,…

大型DMP系统

前言 大家好,我是jiantaoyab,这是我作为学习笔记总结应用篇第一篇,本章大量的参考了别的博主的文章。 我们今天就先从搭建一个大型的 DMP 系统开始,利用组成原理里面学到的存储器知识,来做选型判断,从而更…

jenkins权限分配

1.安装权限插件 Role-Based Strategy 2.创建用户 3.修改全局安全配置中的授权策略为Role-Based Strategy 4.进入Manage and Assign Roles创建Global roles和Item roles 4.进入Assign Roles给用户分配role