Kubernetes 网关流量管理:Ingress 与 Gateway API

news/2024/9/19 2:04:10/ 标签: kubernetes, gateway, 容器, 后端, 云原生

引言

随着 Kubernetes 在云原生领域的广泛使用,流量管理成为了至关重要的一环。为了有效地管理从外部流入集群的流量,Kubernetes 提供了多种解决方案,其中最常见的是 Ingress 和新兴的 Gateway API

Ingress

随着微服务架构的发展,服务的数量和复杂性不断增加,如何高效、安全地管理进入集群的外部流量成为了一个亟待解决的问题。Kubernetes 的 Ingress 资源应运而生,它旨在提供一种简单的方式来配置 HTTP 或 HTTPS 流量的路由,并且可以通过反向代理将外部流量分发到集群内部的服务。

例如,将不同的 host 分发到不同的服务:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:name: name-virtual-host-ingress
spec:rules:- host: foo.bar.comhttp:paths:- pathType: Prefixpath: "/"backend:service:name: service1port:number: 80- host: bar.foo.comhttp:paths:- pathType: Prefixpath: "/"backend:service:name: service2port:number: 80

尽管 Ingress 为流量管理提供了方便的入口配置,但它也存在一些致命缺陷:

  • 缺乏灵活性:Ingress 往往只支持 L7 HTTP(S) 协议,缺乏对其他协议(如 L4 TCP/UDP)的支持。
  • 供应商依赖:不同的 Ingress 控制器具有不同的实现,功能差异较大,容易导致锁定某个特定供应商的实现(比如在不同的网关里配置不同的 annotations)。
  • 扩展性有限:随着集群规模的扩大和复杂化,单一的 Ingress 资源可能难以满足大规模集群的需求。

Gateway API

为了弥补 Ingress 的局限性,社区引入了 Gateway API。它不仅提供了更强大的流量路由功能,还提升了对多种协议、跨团队协作、以及多供应商兼容性的支持。Gateway API 的目标是将流量管理从服务网格、Ingress 控制器等解耦出来,提供一个标准化的 API 用于控制流量。

Gateway API 的优点有:

  • 统一化标准化:由于定义了一套标准化的 API,即使替换了底层使用的网关,上层仍然可以保持无感的,这也避免了网关的供应商依赖。
  • 更多协议支持:Gateway API 支持 L4 ~ L7 多种协议,包括 HTTP、gRPC、TCP、UDP 等。
  • 分层设计与职责分离:Gateway API 引入了 GatewayClassGatewayRoute 等资源,不同的角色管理不同的资源。

GatewayClass

GatewayClass 由基础设施人员管理,用来描述底层的网关实现(例如,你可以有不同的 GatewayClass 来分别代表使用 Nginx、Istio、或者其他负载均衡器的网关)。

例如,以下定义了一个 Nginx 的网关实现:

apiVersion: gateway.networking.k8s.io/v1
kind: GatewayClass
metadata:labels:app.kubernetes.io/instance: nginx-gatewayapp.kubernetes.io/name: nginx-gatewayapp.kubernetes.io/version: 1.4.0name: nginx
spec:controllerName: gateway.nginx.org/nginx-gateway-controller

Gateway

Gateway 由集群管理员负责,是流量入口的具体定义,用来代表一个物理或虚拟的流量入口点。Gateway 资源会引用一个 GatewayClass 来确定网关的实现方式,并包含一组监听器(listeners),这些监听器定义了网关监听的端口和协议。

例如,以下定义了一个网关,监听 80 端口的 HTTP 入站流量,底层使用 nginx 网关实现:

apiVersion: gateway.networking.k8s.io/v1
kind: Gateway
metadata:name: prod-web
spec:gatewayClassName: nginxlisteners:- protocol: HTTPport: 80name: prod-web-gw

Route

Route 定义路由规则,针对不同的协议类型使用不同的资源,如 HTTPRouteTLSRouteTCPRouteUDPRouteGRPCRoute 等。

例如,使用 HTTPRoute 根据 HTTP 请求头分发到不同的服务:

apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:name: foo-routelabels:gateway: prod-web-gw
spec:hostnames:- foo.example.comrules:- backendRefs:- name: foo-v1port: 8080- matches:- headers:- name: trafficvalue: testbackendRefs:- name: foo-v2port: 8080

合理配置 Route 便可以轻松实现金丝雀发布、蓝绿部署、流量镜像、重定向与请求改写等各种复杂的路由功能。

GAMMA

我们把集群内外方向的流量称为“南北向流量”,把集群内部服务之间的流量称为“东西向流量”。

虽然 Gateway API 最开始的关注点集中在南北向流量上,但是随着 service mesh 服务网格的兴起,人们也希望能将东西向流量一并统一化与标准化。因此 Gateway API 自 v1.1.0 版本起,已将 GAMMAGateway API for Mesh Management and Administration)倡议的工作纳入标准渠道,并且有一个专门的子项目来做这件事。

简而言之,Gateway API 正在实现集群内外流量管理的大一统。

总结

Ingress 是否会被 Gateway API 替代?不会,Ingress 自 1.19 版本 GA 后并没有计划弃用。

IngressGateway API 都是声明性资源(可以简单理解为配置文件),两者都需要由具体的网关支持工作。

Ingress 提供了较为简单的流量管理,适用于小规模和简单的流量需求,其实现依赖于具体的控制器,因此存在一定的供应商绑定问题。

Gateway API 的标准化设计提供了跨平台的兼容性和一致性,并且支持多协议、多团队协作和更复杂的流量管理需求。


参考资料:

  • https://kubernetes.io/docs/concepts/services-networking/ingress/
  • https://gateway-api.sigs.k8s.io/

http://www.ppmy.cn/news/1520158.html

相关文章

QT教程-十六,QT中如何解析JSON

一,对json的初步认识 (这里我们主要说明最常用的,以一个宏观的概念来说一下),json是一种数据格式,作用就是便于传递信息,我们可以按其结构和对应关系,拿到我们想要的数据。其主要结构…

FFmpeg源码:append_packet_chunked、av_get_packet函数分析

AVPacket结构体和其相关的函数分析: FFmpeg存放压缩后的音视频数据的结构体:AVPacket简介 FFmpeg源码:av_init_packet、get_packet_defaults、av_packet_alloc函数分析 FFmpeg源码:av_packet_free_side_data、av_packet_unref、…

【LeetCode】温度转换 最小偶倍数 二叉树判断根节点

温度转换题目: 给你一个四舍五入到两位小数的非负浮点数 celsius 来表示温度,以 摄氏度(Celsius)为单位。 你需要将摄氏度转换为 开氏度(Kelvin)和 华氏度(Fahrenheit)&#xff0c…

Spring Cloud全解析:网关之GateWay简介

GateWay简介 由于zuul升级为zuul2时,netflix公司内部出现了分歧,所以springcloud自己研发了一套网关gateway,提供一种简单有效的方式来对API进行路由,以及提供一些强大的过滤器功能,如:熔断、限流、重试等…

从零开始实现一个简单的 Git 操作实例

本文通过创建一个简化版的版本控制系统,展示 Git 的核心操作,如初始化仓库、提交更改、查看历史记录等。为了更好地理解这些操作,我们会结合图示来说明。 1. 初始化仓库 在 Git 中,初始化仓库的命令是 git init。这个命令会在当前目录创建一个新的 Git 仓库,生成一个 .g…

Spring之整合Mybatis底层源码解析

整合核心思路 由很多框架都需要和Spring进行整合,而整合的核心思想就是把其他框架所产生的对象放到Spring容器中,让其成为Bean。 ​ 比如Mybatis,Mybatis框架可以单独使用,而单独使用Mybatis框架就需要用到Mybatis所提供的一些类…

Hive的存储格式

文章目录 Hive的存储格式1.存储格式简介2.行存储与列存储行式存储列式存储混合的 PAX 存储结构 TextFileSequenceFile Hive的存储格式 1.存储格式简介 Hive支持的存储数的格式主要有:TEXTFILE(默认格式) 、SEQUENCEFILE、RCFILE、ORCFILE、PARQUET。 textfile为默…

【go-zero】goctl笔记

goctl笔记 通过api文件生成go-zero项目 goctl api go --api .\greet.api --dir . --style goZero 快速生成一个api文件 goctl api -o zd.api 校验api文件 goctl api validate --api zd.api 格式化api文件 goctl api format --dir zd.api 快速生成一个http服务 goctl api n…

零基础入门转录组数据分析——预后模型之随机生存森林模型

零基础入门转录组数据分析——预后模型之随机生存森林模型 目录 零基础入门转录组数据分析——预后模型之随机生存森林模型1. 预后模型和随机生存森林模型基础知识2. 随机生存森林模型(Rstudio)——代码实操2. 1 数据处理2. 2 构建随机生存森林模型&…

应用层(Web与HTTP)

目录 常见术语 1.HTTP概况 2.HTTP连接 非持久HTTP流程 响应时间模型 持久HTTP 3.HTTP报文 3.1HTTP请求报文 3.2HTTP响应报文 HTTP响应状态码 4.Cookies(用户-服务器状态) cookies:维护状态 Cookies的作用 5.Web缓冲(…

AOP和注解的配合使用(封装通用日志处理类)

自定义注解 Inherited Documented Target(ElementType.METHOD) Retention(RetentionPolicy.RUNTIME) public interface MyLog {String value() default ""; } 定义切面 Aspect Component Slf4j public class LogAop {// 定义识别自定义注解的切点Pointcut("a…

点餐收银小程序

一、项目概述 Hi,大家好,今天分享的项目是《点餐收银小程序》。 系统含管理员/商家/用户三种角色,商家能维护菜式类别、维护菜品信息,用户在小程序能够选择门店,查看门店下各个分类的菜式信息,并进行加购…

HarmonyOS开发实战( Beta5版)延迟加载lazy-import实践使用指导

随着应用功能持续增加,应用规模不断扩大,依赖的模块文件逐渐变多,应用冷启动加载模块的时间也越来越长。而在实际冷启动过程中执行了很多应用整体依赖但当前未使用的文件,此时可以通过延迟加载 lazy-import 的方法延缓对这些冗余文…

关于解决输入法自动切换无法正常输入文字,此时鼠标旁边出现蓝色圆圈频闪的问题解决

输入法切换时鼠标旁边出现蓝色圆圈频闪,通常表明有某个后台进程正在频繁运行或某个服务在不断启动或崩溃。这可能是导致输入法频繁切换的根本原因。 第一步:检查和终止异常的后台进程 任务管理器: 打开任务管理器 (Ctrl Shift Esc)。在“…

jenv 一款macos下的开源JAVA多版本环境安装管理切换工具

一个用于macos/linux下的多版本JAVA环境管理工具 -- jenv, 这款工具和 pyenv 类似,都是基于shell脚本开发的. 可以方便的管理 多个java环境版本. jenv安装 git clone https://gitee.com/tekintian/jenv.git ~/.jenv jenv环境配置 将下面的代码加入都你的 ~/.bash_profil…

新手网络爬虫利器介绍 之 移动蜂窝网络代理

移动蜂窝代理对接说明 在爬虫与反爬虫斗争愈演愈烈的情况下,各大网站和 App 的风控检测越来越强,其中一项就是 IP 封禁。 为了解决 IP 封禁的困扰,一个有效的方式就是设置代理,设置代理之后,爬虫可以借助代理的 IP 来…

zlib压缩解压文件

zlib_utils.h #pragma once#include <Windows.h> #include <tchar.h>// 压缩文件 BOOL CompressFile(LPCTSTR lpSrcFileName, // 输入文件LPCTSTR lpDestFileName // 输出文件 );// 解压缩文件 BOOL UncompressFile(LPCTSTR lp…

Kafka消息积压的典型场景及解决方案

Kafka消息积压的典型场景&#xff1a; 1.实时/消费任务挂掉 比如&#xff0c;我们写的实时应用因为某种原因挂掉了&#xff0c;并且这个任务没有被监控程序监控发现通知相关负责人&#xff0c;负责人又没有写自动拉起任务的脚本进行重启。 那么在我们重新启动这个实时应用进行…

SolarMarker 正在使用水坑攻击与伪造的 Chrome 浏览器更新进行攻击

在过去的三个月里&#xff0c;eSentire 的安全研究团队发现信息窃密恶意软件 SolarMarker 都没有发动攻击&#xff0c;却在最近忽然重返舞台。此前&#xff0c;SolarMarker 的运营者使用 SEO 投毒或者垃圾邮件来引诱受害者&#xff0c;受害者试图下载一些文档的免费模板&#x…

数据结构---顺序表---单链表

目录 一、什么是程序&#xff1f; 程序 数据结构 算法 二、一个程序是否优秀的两个标准 2.1.时间复杂度 2.2.空间复杂度 三、数据结构 3.1.数据结构间的关系 1.逻辑结构 1&#xff09;线性关系 2&#xff09;非线性关系 2.存储结构 1&#xff09;顺序存储结构 …