Kubernetes Gateway API 介绍

news/2024/4/27 23:01:18

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.mrgr.cn/p/34442033

相关文章

前后端分离开发【Yapi平台】【Swagger注解自动生成接口文档平台】

前后端分离开发 介绍开发流程Yapi(api接口文档编写平台)介绍 Swagger使用方式1). 导入knife4j的maven坐标2). 导入knife4j相关配置类3). 设置静态资源映射4). 在LoginCheckFilter中设置不需要处理的请求路径 查看接口文档常用注解注解介绍 当前项目中&am…

笔记本电脑死机了怎么办?

笔记本死机是常有的事,尤其是在玩游戏、看电影或者是使用办公软件的时候,电脑卡住了,无论你怎么按鼠标或键盘,显示屏始终没有反应。那么笔记本电脑死机了怎么办呢?接下来跟大家分享几个小技巧来快速解决这类死机问题,…

uniapp对接萤石云 实现监控播放、云台控制、截图、录像、历史映像等功能

萤石云开发平台地址:文档概述 萤石开放平台API文档 (ys7.com) 萤石云监控播放 首先引入萤石云js js地址:GitHub - Ezviz-OpenBiz/EZUIKit-JavaScript-npm: 轻应用npm版本,降低接入难度,适配自定义UI,适配主流框架 vi…

Ansible-1

Ansible是一款自动化运维、批量管理服务器的工具,批量系统配置、程序部署、运行命令等功能。基于Python开发,基于ssh进行管理,不需要在被管理端安装任何软件。Ansible在管理远程主机的时候,只有是通过各种模块进行操作的。 需要关…

|行业洞察·趋势报告|《2024旅游度假市场简析报告-17页》

报告的主要内容解读: 居民收入提高推动旅游业发展:报告指出,随着人均GDP的提升,居民的消费能力增强,旅游需求从传统的观光游向休闲、度假游转变,国内人均旅游消费持续增加。 政府政策促进旅游市场复苏&…

iOS - Runtime-API

文章目录 iOS - Runtime-API1. Runtime应用1.1 字典转模型1.2 替换方法实现1.3 利用关联对象给分类添加属性1.4 利用消息转发机制,解决方法找不到的异常问题 2. Runtime-API2.1 Runtime API01 – 类2.1.1 动态创建一个类(参数:父类&#xff0…

分类任务中的评估指标:Accuracy、Precision、Recall、F1

概念理解 T P TP TP、 T N TN TN、 F P FP FP、 F N FN FN精度/正确率( A c c u r a c y Accuracy Accuracy) 二分类查准率 P r e c i s i o n Precision Precision,查全率 R e c a l l Recall Recall 和 F 1 − s c o r e F1-score F1−s…

关于使用vscode搭建c/c++编程环境

目录 关于使用vscode搭建c/c编程环境一、前言二、安装 IDE 二、安装TDM-GCC安装三、安装C/C环境四、编写代码并进行编译 关于使用vscode搭建c/c编程环境 一、前言 一直觉得vscode是生产强有力的生产工具,基于此,做一篇学习笔记进行记录。 二、安装 ID…

怎样去保证 Redis 缓存与数据库双写一致性?

解决方案 那么我们这里列出来所有策略,并且讨论他们优劣性。 先更新数据库,后更新缓存先更新数据库,后删除缓存先更新缓存,后更新数据库先删除缓存,后更新数据库 先更新数据库,后更新缓存 这种方法是不推…

神策数据参与制定首份 SDK 网络安全国家标准

国家市场监督管理总局、国家标准化管理委员会发布中华人民共和国国家标准公告(2023 年第 13 号),全国信息安全标准化技术委员会归口的 3 项国家标准正式发布。其中,首份 SDK 国家标准《信息安全技术 移动互联网应用程序&#xff0…

Ubuntu20.04更换镜像源------最简单的教程

本教程适用于:Ubuntu22.04 操作流程 打开终端,运行以下命令: sudo sed -i "shttp://.*archive.ubuntu.comhttps://mirrors.tuna.tsinghua.edu.cng" /etc/apt/sources.list 运行后即完成更改。 如果找不到22.04的镜像&#xff…

uniapp h5 touch事件踩坑记录

场景:悬浮球功能 当我给悬浮球设置了 position: fixed; 然后监听悬浮球的touch事件,从事件对象中拿到clientY和clientX赋值给悬浮球的left和top属性。当直接赋值后效果应该是这样子: 注意鼠标相对悬浮球的位置,应该就是左上角&a…

【氮化镓】位错对氮化镓(GaN)电子能量损失谱(EEL)的影响

本文献《Influence of dislocations on electron energy-loss spectra in gallium nitride》由C. J. Fall等人撰写,发表于2002年。研究团队通过第一性原理计算,探讨了位错对氮化镓(GaN)电子能量损失谱(EEL)…

CSS(二)---【常见属性、复合属性使用】

零.前言 本篇文章主要阐述CSS常见属性、复合属性,更多前置知识请见作者其它文章: CSS(一)---【CSS简介、导入方式、八种选择器、优先级】-CSDN博客 1.CSS属性 CSS的属性有上百个,但是我们并不需要全部学习,只要我们学习一部分…

分布式处理

前言 大家好,我是jiantaoyab,这是我作为学习笔记原理篇的最后一章,一台计算机在数据中心里是不够的。因为如果只有一台计算机,我们会遇到三个核心问题。第一个核心问题,叫作垂直扩展和水平扩展的选择问题,…

数据库中的约束纯干货——主键约束

目录 (一)特点: (二)添加主键约束 2.1格式: 2.2举例: 2.3建立表级约束: 2.4建立表后增加主键约束 (三)复合主键 3.1格式: 3.2举例&#…

蓝桥杯真题Day40 倒计时19天 纯练题!

蓝桥杯第十三届省赛真题-统计子矩阵 题目描述 给定一个 N M 的矩阵 A,请你统计有多少个子矩阵 (最小 1 1,最大 N M) 满足子矩阵中所有数的和不超过给定的整数 K? 输入格式 第一行包含三个整数 N, M 和 K. 之后 N 行每行包含 M 个整数&#xf…

利用python搭建临时文件传输服务

场景 如果想从一台服务器上传输文件又多种方法,其中常见的是利用scp进行传输,但是需要知道服务器的账号密码才能进行传输,但有时候我们并不知道账号密码,这个时候我们就可以通过python -m SimpleHTTPServer 命令进行传输文件 启…

[ Linux ] git工具的基本使用(仓库的构建,提交)

1.安装git yum install -y git 2.打开Gitee,创建你的远程仓库,根据提示初始化本地仓库(这里以我的仓库为例) 新建好仓库之后跟着网页的提示初始化便可以了 3.add、commit、push三板斧 git add . //add仓库新增(变…

前端Web移动端学习day05

移动 Web 第五天 响应式布局方案 媒体查询Bootstrap框架 响应式网页指的是一套代码适配多端,一套代码适配各种大小的屏幕。 共有两种方案可以实现响应式网页,一种是媒体查询,另一种是使用bootstrap框架。 01-媒体查询 基本写法 max-wid…