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

2024-09-01 05:04

本文主要是介绍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/

这篇关于Kubernetes 网关流量管理:Ingress 与 Gateway API的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1126019

相关文章

高效管理你的Linux系统: Debian操作系统常用命令指南

《高效管理你的Linux系统:Debian操作系统常用命令指南》在Debian操作系统中,了解和掌握常用命令对于提高工作效率和系统管理至关重要,本文将详细介绍Debian的常用命令,帮助读者更好地使... Debian是一个流行的linux发行版,它以其稳定性、强大的软件包管理和丰富的社区资源而闻名。在使用

使用zabbix进行监控网络设备流量

《使用zabbix进行监控网络设备流量》这篇文章主要为大家详细介绍了如何使用zabbix进行监控网络设备流量,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录安装zabbix配置ENSP环境配置zabbix实行监控交换机测试一台liunx服务器,这里使用的为Ubuntu22.04(

使用SpringBoot创建一个RESTful API的详细步骤

《使用SpringBoot创建一个RESTfulAPI的详细步骤》使用Java的SpringBoot创建RESTfulAPI可以满足多种开发场景,它提供了快速开发、易于配置、可扩展、可维护的优点,尤... 目录一、创建 Spring Boot 项目二、创建控制器类(Controller Class)三、运行

springboot整合gateway的详细过程

《springboot整合gateway的详细过程》本文介绍了如何配置和使用SpringCloudGateway构建一个API网关,通过实例代码介绍了springboot整合gateway的过程,需要... 目录1. 添加依赖2. 配置网关路由3. 启用Eureka客户端(可选)4. 创建主应用类5. 自定

SpringBoot使用minio进行文件管理的流程步骤

《SpringBoot使用minio进行文件管理的流程步骤》MinIO是一个高性能的对象存储系统,兼容AmazonS3API,该软件设计用于处理非结构化数据,如图片、视频、日志文件以及备份数据等,本文... 目录一、拉取minio镜像二、创建配置文件和上传文件的目录三、启动容器四、浏览器登录 minio五、

IDEA中的Kafka管理神器详解

《IDEA中的Kafka管理神器详解》这款基于IDEA插件实现的Kafka管理工具,能够在本地IDE环境中直接运行,简化了设置流程,为开发者提供了更加紧密集成、高效且直观的Kafka操作体验... 目录免安装:IDEA中的Kafka管理神器!简介安装必要的插件创建 Kafka 连接第一步:创建连接第二步:选

综合安防管理平台LntonAIServer视频监控汇聚抖动检测算法优势

LntonAIServer视频质量诊断功能中的抖动检测是一个专门针对视频稳定性进行分析的功能。抖动通常是指视频帧之间的不必要运动,这种运动可能是由于摄像机的移动、传输中的错误或编解码问题导致的。抖动检测对于确保视频内容的平滑性和观看体验至关重要。 优势 1. 提高图像质量 - 清晰度提升:减少抖动,提高图像的清晰度和细节表现力,使得监控画面更加真实可信。 - 细节增强:在低光条件下,抖

Kubernetes PodSecurityPolicy:PSP能实现的5种主要安全策略

Kubernetes PodSecurityPolicy:PSP能实现的5种主要安全策略 1. 特权模式限制2. 宿主机资源隔离3. 用户和组管理4. 权限提升控制5. SELinux配置 💖The Begin💖点点关注,收藏不迷路💖 Kubernetes的PodSecurityPolicy(PSP)是一个关键的安全特性,它在Pod创建之前实施安全策略,确保P

软考系统规划与管理师考试证书含金量高吗?

2024年软考系统规划与管理师考试报名时间节点: 报名时间:2024年上半年软考将于3月中旬陆续开始报名 考试时间:上半年5月25日到28日,下半年11月9日到12日 分数线:所有科目成绩均须达到45分以上(包括45分)方可通过考试 成绩查询:可在“中国计算机技术职业资格网”上查询软考成绩 出成绩时间:预计在11月左右 证书领取时间:一般在考试成绩公布后3~4个月,各地领取时间有所不同

安全管理体系化的智慧油站开源了。

AI视频监控平台简介 AI视频监控平台是一款功能强大且简单易用的实时算法视频监控系统。它的愿景是最底层打通各大芯片厂商相互间的壁垒,省去繁琐重复的适配流程,实现芯片、算法、应用的全流程组合,从而大大减少企业级应用约95%的开发成本。用户只需在界面上进行简单的操作,就可以实现全视频的接入及布控。摄像头管理模块用于多种终端设备、智能设备的接入及管理。平台支持包括摄像头等终端感知设备接入,为整个平台提