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

引言

随着 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.rhkb.cn/news/414376.html

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

相关文章

Jupyter如何使用Anaconda的虚拟环境

Anaconda的虚拟环境大家应该都知道是什么,我们可以建立多个虚拟环境并在对应的环境中安装不同的python三方库从而运行不同的python项目,那么在jupyter中如何使用Anaconda的虚拟环境呢,今天就为大家分享一个这样的操作教程。 请参考图文进行以…

实用好软-----电脑端 开源的视频无损剪切与合并工具

这个是一个开源项目LosslessCut 无损剪切就是基于关键帧的剪切,不需要重编码,因此速度非常快, 缺点就是切割时间无法达到非常精确,可能前后会有几秒的差距, 要做到精确的剪切,只能重编码。 LosslessCut在切…

Junit单元测试入门

目录 一、单元测试 1.1 基本概念 1.2 以往测试存在的问题和不足 二、快速入门 2.1 基本步骤 2.2 基本使用示例(vscode为例) 2.2 断言机制(重要) 2.3 其它注解 一、单元测试 1.1 基本概念 针对最小单元的测试&#xff0c…

mysql创建数据库和表

​ 大家好,我是程序员小羊! 前言: 一、MySQL数据库和表的基础概念 在深入讲解如何在MySQL中创建数据库和表之前,先了解一些基础概念。 1.1 数据库和表的概念 数据库(Database):数据库是数据存…

4-6 使用bios 中断 显示字符

1 显示的逻辑 bios 首先通过中断,访问到 最前面的中断向量表,然后 通过中断向量表然后 访问到具体的 bios 的函数,这些函数是bios 自带的,具体的位置 , 我也不知道。只知道有这个函数。 3 显示的原理 ; 主要…

Unity中保存数据的方法

一、概述 Unity中可用于持久化的方式有: 1)通过ScriptableObject在可编辑模式下保存数据 2)通过excel、json等文件实现数据的可持久化 二、ScriptableObject的使用 1、使用背景 假如需要制作子弹预设体,每个子弹上有speed速…

【国考】特值法

特值法 题干中存在乘除关系,且对应量未知。 例3:甲、乙、丙三个工程队的效率比为6:5:4,现将A、B两项工作量相同的工程交给这三个工程队,甲队负责A工程,乙队负责B工程,丙队参与A工程若干天后转而参与B工程.两项工程同时开工,耗时16…

两个月冲刺软考——求解关系模式达到了第几范式题型(例题+讲解,一看就会)

目录 1.假设一对多联系不转换为一个独立的关系模式的话,那么生成的关系模式应该是将“一”的那一方的主键加入到“多”的一方的关系模式中。 2.求解关系模式达到了第几范式题型 1.假设一对多联系不转换为一个独立的关系模式的话,那么生成的关系模式应该…

利用session.upload_progress执行文件包含

1.session.upload_progress的作用: session.upload_progress最初是PHP为上传进度条设计的一个功能,在上传文件较大的情况下,PHP将进行流式上传,并将进度信息放在Session中(包含用户可控的值),即…

excel透视图、看板案例(超详细)

一、简介 Excel透视图(Pivot Table) 功能:透视图是一种强大的数据分析工具,用于汇总、分析和展示数据。它允许用户对数据进行重新排列和分类,从而更容易发现数据中的模式和趋势。用途:可以用来生成动态报表…

GIT 下载安装使用教程

目录 一. GIT 下载 二. GIT 安装 1. 许可声明 2. 选择安装路径 3. 组件选择 4. 开始菜单文件夹 5. Git使用的默认编辑器 6. 调整新存储库中初始分支的名称 7. 调整Path环境 8. 选择SSH可执行文件 9. 选择HTTPS传输后端 10. 配置行结束转换 11. 配置用于Git Bash的终端模…

Spring之配置类解析源码解析

解析配置类 解析配置类流程图:https://www.processon.com/view/link/5f9512d5e401fd06fda0b2dd 解析配置类思维脑图:https://www.processon.com/view/link/614c83cae0b34d7b342f6d14 在启动Spring时,需要传入一个AppConfig.class给Appli…

企业级使用docker实现负载均衡

利用Docker容器编排完成haproxy和nginx负载均衡架构实施 利用 Docker 编排实现 HAProxy 和 Nginx 负载均衡架构的介绍: 首先,使用 Docker Compose 进行容器编排。创建一个 haproxy.yml 文件,定义 HAProxy 和 Nginx 服务。HAProxy 容器作为前…

C语言 | Leetcode C语言题解之第387题字符串中的第一个唯一字符

题目&#xff1a; 题解&#xff1a; struct hashTable {int key;int val;UT_hash_handle hh; };int firstUniqChar(char* s) {struct hashTable* position NULL;int que[26][2], left 0, right 0;int n strlen(s);for (int i 0; i < n; i) {int ikey s[i];struct has…

基于django+vue+uniapp的摄影竞赛小程序

开发语言&#xff1a;Python框架&#xff1a;djangouniappPython版本&#xff1a;python3.7.7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;PyCharm 系统展示 管理员登录 管理员主界面 教师管理 学…

CSS\JS实现页面背景气泡logo上浮效果

效果图&#xff1a; 单容器显示气泡&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Bu…

测试 UDP 端口可达性的方法

前言&#xff1a; UDP (User Datagram Protocol) 是一种无连接的传输层协议&#xff0c;它不像 TCP 那样提供确认机制来保证数据包的可靠传输。因此&#xff0c;测试 UDP 端口的可达性通常需要一些特殊的方法&#xff0c;因为传统的端口扫描工具&#xff08;如 nmap&#xff0…

linux 上传文件报错 -bash: rz:command not found

linux 上传文件报错 -bash: rz:command not found 新创建的纯净虚拟机无法上传文件安装lrzsz 新创建的纯净虚拟机无法上传文件 这个错误表明系统中没有安装 rz&#xff08;上传文件工具&#xff09;命令。 如果是在 CentOS 或 Red Hat 等基于 RPM 的系统上&#xff0c;可以使用…

10款文档管理系统,助力降本增效

比较好用的 10 款文档管理系统推荐&#xff1a;PingCode、Worktile、语雀、联想Filez企业网盘、360亿方云、DocuPhase 、M-Files 、LogicalDOC、Revver、Box。 在现代企业环境中&#xff0c;管理大量文档和数据往往让人头疼。不仅需要维护信息的更新和可访问性&#xff0c;还要…

Truncated incorrect max_connections value: ‘999999‘

MySQL 的最大连接数&#xff08;max_connections&#xff09;可以设置的上限值在不同的资料中有所不同。以下是一些关键信息&#xff1a; 默认值和默认范围&#xff1a; MySQL 的默认最大连接数通常为 100 。一些资料提到默认值为 151 。 最大允许值&#xff1a; MySQL 的最大…