在使用Kong API Gateway(API网关)时,理解其核心概念是掌握其工作原理的基础。这些概念既体现了Kong的设计哲学,也决定了它如何适配复杂的API管理场景(如微服务、多团队协作等)。本文将系统梳理Kong的核心概念,解析它们的定义、作用及相互关系。

一、基础实体:API流量的“基本单元”

Kong通过几个核心实体(entity)抽象API管理的关键要素,这些实体是配置和管理的基础。

1. Service(服务)

Gateway Service entities are abstractions of each of your own upstream services

定义:Service是对后端业务服务(如用户服务、订单服务)的抽象,代表一个需要被Kong代理的上游(upstream)服务。

作用:Service存储了后端服务的核心信息,例如服务的协议(HTTP、gRPC、TCP等)、主机地址(域名或IP)、端口等,是Kong转发请求的“目标地址”。

举例:假设后端有一个用户服务,地址为http://user-service:8080,则在Kong中创建一个Service,配置protocol: httphost: user-serviceport: 8080,即可代表该服务。

2. Route(路由)

A Route defines rules to match client requests, and is associated with a Service.

定义:Route是客户端访问Service的“入口规则”,用于将客户端请求(通过URL、方法、头部等条件)匹配到对应的Service。

作用:Route定义了“如何访问Service”,通过匹配规则将外部请求路由到正确的后端Service。一个Service可以关联多个Route(多入口),一个Route只能关联一个Service。

核心配置

  • paths:匹配请求的URL路径(如/api/v1/users);
  • methods:匹配请求的HTTP方法(如GET、POST);
  • hosts:匹配请求的Host头部(如api.example.com);
  • headers:匹配请求的特定头部(如X-API-Version: v1)。

举例:为用户Service配置两个Route:

  • Route1:paths: /users,匹配http://api.example.com/users的请求;
  • Route2:paths: /v1/users,匹配http://api.example.com/v1/users的请求;
    两者最终都会转发到用户Service。

3. Consumer(消费者)

Consumers are the end users of a service.

定义:Consumer是对API调用方(如客户端应用、用户)的抽象,用于标识请求的来源身份。

作用:通过Consumer可以实现精细化的权限控制、流量限制、计费等功能(结合插件)。例如,为不同Consumer配置不同的限流阈值,或仅允许特定Consumer访问某Route。

关联方式:客户端请求需通过某种方式(如API密钥、JWT令牌)与Consumer关联,Kong通过验证令牌中的身份信息,识别对应的Consumer。

二、流量处理:从请求到转发的“中间层”

Kong作为网关,核心功能是处理客户端到后端服务的流量,以下概念描述了流量处理的关键环节。

4. Upstream(上游)

An Upstream represents a virtual hostname and can be used to load balance incoming requests over multiple Services.

定义:Upstream是对一组后端服务实例(如多个用户服务节点)的抽象,用于实现负载均衡(load balancing)和故障转移(failover)。

作用:当后端服务有多个实例(如微服务架构下的集群部署)时,Upstream通过负载均衡策略将请求分发到不同实例,避免单节点过载。

与Service的关系:Service可以直接关联单个后端地址(简单场景),也可以关联Upstream(集群场景)。例如,用户Service的host配置为Upstream名称,而非具体IP,即可启用负载均衡。

5. Target(目标)

A target is an IP address/hostname with a port that identifies an instance of a backend service.

定义:Target是Upstream下的具体后端服务实例(如192.168.1.100:8080),代表一个可接收请求的节点。

作用:Target是Upstream的“组成单元”,Upstream通过管理Target的状态(在线/离线)实现流量分发。例如,当某个Target故障时,Kong会自动将流量转发到其他健康Target。

健康检查:Kong支持对Target进行主动/被动健康检查(如HTTP状态码、响应时间),自动剔除故障节点。

6. Plugin(插件)

Plugins allow you to extend Kong’s capabilities with features like rate limiting, authentication, and logging.

定义:Plugin是Kong的“功能扩展模块”,通过嵌入请求处理生命周期,为API添加额外功能(如认证、限流、监控等)。

作用:插件无需修改网关核心代码,即可扩展Kong的能力,是Kong灵活性的核心。

生效范围:插件可以绑定到Service、Route、Consumer或全局(Global),实现不同粒度的功能生效。例如:

  • 绑定到Route:仅对该Route的请求生效;
  • 绑定到Consumer:仅对该Consumer的请求生效。

常见类型:JWT(认证)、Rate Limiting(限流)、Prometheus(监控)等(前文已详细介绍)。

三、架构组件:Kong的“运行骨架”

Kong采用“控制平面+数据平面”的分离架构,以下概念描述其运行时的核心组件。

7. Data Plane(数据平面)

定义:Data Plane是处理实际API流量的节点(Kong Gateway实例),负责请求转发、插件执行、负载均衡等实时操作。

作用:直接与客户端和后端服务交互,是流量的“处理中枢”。数据平面节点可横向扩展(部署多个实例),通过负载均衡器分担流量压力。

8. Control Plane(控制平面)

定义:Control Plane是管理全局配置的中枢,负责接收和存储配置(如Service、Route、插件规则),并将配置同步到所有Data Plane节点。

作用:实现“配置一次,全局生效”,避免逐个节点修改配置的繁琐。控制平面不处理业务流量,仅负责配置管理。

9. Admin API

定义:Admin API是Kong的管理接口,用于通过HTTP请求创建、修改、删除各类实体(Service、Route、插件等)。

作用:是用户与Kong交互的主要方式(除图形化界面Kong Manager外)。例如,通过POST /services创建Service,通过PUT /routes/{id}修改Route规则。

安全性:Admin API默认仅监听本地地址,生产环境需配置认证(如密钥)和网络隔离,防止未授权访问。

四、概念关系:一张图看懂Kong的工作流

这些概念的协作流程可简化为:

  1. 客户端发送请求(如GET http://api.example.com/users);
  2. 请求到达Data Plane节点,Kong通过Route的匹配规则(paths: /users)找到对应的Service;
  3. Service关联到Upstream,Kong根据负载均衡策略将请求转发到某个健康的Target(后端实例);
  4. 转发过程中,绑定到Route/Service的插件(如JWT认证、限流)在请求生命周期的特定阶段执行(如access阶段验证令牌);
  5. 后端服务处理请求并返回响应,经Kong返回给客户端;
  6. 所有配置(Route、Service、插件等)通过Control Plane同步到Data Plane,确保集群一致性。

结语

Kong的核心概念围绕“抽象实体”和“分层架构”设计:

  • 通过Service/Route抽象API的“目标”与“入口”
  • 通过Upstream/Target实现集群流量分发
  • 通过Plugin扩展功能
  • 通过控制平面/数据平面分离实现高效管理

理解这些概念,是灵活配置Kong、应对复杂API管理场景的基础。无论是简单的单服务代理,还是大规模微服务架构,这些概念都是构建Kong配置的“积木”。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/91174.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/91174.shtml
英文地址,请注明出处:http://en.pswp.cn/pingmian/91174.shtml

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

相关文章

如何解决pip安装报错ModuleNotFoundError: No module named ‘jupyterlab’问题

【Python系列Bug修复PyCharm控制台pip install报错】如何解决pip安装报错ModuleNotFoundError: No module named ‘jupyterlab’问题 摘要 在开发过程中,我们经常会遇到各种模块安装的问题,尤其是在使用PyCharm时,经常会遇到pip install时的…

3 运算符与表达式

运算符:对字面量或者变量进行操作的符号 表达式:用运算符把字面量或者变量连接起来符合java语法的式子就可以称作表达式不同运算符连接的表达式体现的是不同类型的表达式int a 10; int b 20; int c a b;:运算符,并且是算术运算…

MySQL的单行函数:

目录 函数的理解: MySQL的内置函数及分类: 单行函数: 数值函数: 基本函数: 角度与弧度互换函数: 三角函数: 指数与对数: 进制转换: 字符串函数: 日…

设计模式(二十一)行为型:状态模式详解

设计模式(二十一)行为型:状态模式详解状态模式(State Pattern)是 GoF 23 种设计模式中的行为型模式之一,其核心价值在于允许一个对象在其内部状态改变时改变其行为,使得对象看起来像是修改了它的…

深入理解 Doris Compaction:提升查询性能的幕后功臣

在 Doris 的数据存储与查询体系里,Compaction 是保障查询效率、优化存储结构的关键机制。如果你好奇 Doris 如何在高频写入后仍能高效响应查询,或是想解决数据版本膨胀带来的性能问题,这篇关于 Compaction 的深度解析值得收藏 👇 …

css 实现虚线效果的多种方式

使用边框实现虚线 通过设置元素的边框样式来实现虚线效果。以下为示例代码: .dashed {border: 1px dashed black; }使用 CSS 伪元素实现虚线 使用伪元素来模拟虚线的效果。以下为示例代码: .dashed::before {content: "";display: block;height: 1px;border-bo…

深入剖析 RocketMQ 分布式事务:原理、流程与实践

Apache RocketMQ 是一种分布式消息队列系统,支持分布式事务消息,以确保在分布式系统中数据的一致性。它通过一种基于两阶段提交(2PC)的机制结合补偿逻辑来实现分布式事务的最终一致性。以下是对 RocketMQ 分布式事务的详细讲解,包括其核心概念…

具身智能 自动驾驶相关岗位的技术栈与能力地图

一、硬技能技术栈(优先级排序) 1. 核心领域技术(★★★★★)技术方向具体技能学习建议大模型实战- VLA架构(RT-2、PaLM-E)开发/微调- 多模态对齐(CLIP、Flamingo)- 生成式策略&#…

实现了加载 正向 碰撞 雅可比 仿真

""" # 此示例从 URDF 文件中加载一个 UR10 机械臂的模型 # 随后演示 Pinocchio 库的基本功能,如正向运动学计算 # 雅可比矩阵计算、碰撞检测以及动力学仿真 """ # 导入 meshcat 的几何模块,用于创建和管理可视化的几何对象 import meshcat.geo…

【0基础PS】PS工具详解--画笔工具

目录前言一、画笔工具的位置与快捷键​二、画笔工具选项栏设置​三、画笔工具的进阶应用​四、常见问题及解决方法​总结前言 在 Photoshop 的众多工具中,画笔工具无疑是极具创造力和实用性的工具之一。无论是进行图像绘制、照片修饰,还是特效制作&…

window10和ubuntu22.04双系统之卸载ubuntu系统

window10和ubuntu22.04双系统之卸载ubuntu系统)1. 删除Ubuntu系统占用的磁盘分区(在Windows下操作)2. 删除ubuntu开机引导项1. winr出来终端提示框后输入2. 然后会在命令行中显示电脑的硬盘列表,输入命令选择安装Windows的那个硬盘…

(C++)C++类和类的方法(基础教程)(与Python类的区别)

前言&#xff1a; 本篇博客建议搭配&#xff1a;&#xff08;Python&#xff09;类和类的方法&#xff08;基础教程介绍&#xff09;&#xff08;Python基础教程&#xff09;-CSDN博客 一起学习使用&#xff1b; 源代码&#xff1a; #include <iostream> #include &…

【NLP舆情分析】基于python微博舆情分析可视化系统(flask+pandas+echarts) 视频教程 - 微博文章数据可视化分析-文章分类下拉框实现

大家好&#xff0c;我是java1234_小锋老师&#xff0c;最近写了一套【NLP舆情分析】基于python微博舆情分析可视化系统(flaskpandasecharts)视频教程&#xff0c;持续更新中&#xff0c;计划月底更新完&#xff0c;感谢支持。今天讲解微博文章数据可视化分析-文章分类下拉框实现…

Git命令保姆级教程

Git 入门网站 https://learngitbranching.js.org/?localezh_CN Git 命令 git init // 在本地目录内部会生成.git文件夹 git initgit clone // 从git服务器拉取代码 // 代码下载完成后在当前文件夹中会有一个 shop 的目录&#xff0c;通过 cd shop 命令进入目录。 git clone ht…

Java Ai For循环 (day07)

循环结构 for&#xff1a;循环语句的作用&#xff1a;可以将一段代码重复的执行很多次for 循环语句格式&#xff1a;执行流程&#xff1a; 初始化语句执行条件判断语句&#xff0c;看结果是 true&#xff0c;还是 false false结束&#xff0c;true继续执行循环体语句执行条件控…

Directory Opus 使用优化

自定义快捷键 Directory Opus 移动标签到另一栏 设置快捷键&#xff1a;ctrl←/→ 设置步骤&#xff1a; 打开【设置】—>选择【自定义工具栏和快捷键】 选择【新建】—>【新建窗口快捷键】 输入快捷键命令 Go TABMOVEother此时可以点击运行进行测试&#xff0c;…

Qt知识点2『Ubuntu24.04.2安装Qt5.12.9各种报错』

问题1&#xff1a;Qt安装完毕后&#xff0c;新建一个最简单的测试程序&#xff0c;但是QtCreator左侧构建的三个按钮呈现灰色&#xff0c;无法进行构建操作答&#xff1a;进入QtCreator的Kits界面&#xff08;工具-选项&#xff09;&#xff0c;点击"自动检测"下的De…

TS面试题

1.TS有哪些类型&#xff08;对比与js&#xff09;&#xff1f;关键字/语法用途示例any关闭类型检查let a: any 4unknown类型安全的 anylet u: unknown 4; if (typeof u number) …never永不存在的值function err(): never { throw 0; }void无返回值function f(): void {}enu…

借助Early Hints和HarperDB改善网页性能

对电商网站来说&#xff0c;糟糕的页面性能可能会增加交易放弃率。一直以来&#xff0c;人们会使用CDN进行缓存从而缩短页面加载时间&#xff0c;但即便实施了强大的缓存&#xff0c;消费者在通过移动网络访问这些网站时可能仍然会需要频繁等待。最近诞生了一种名为“早期提示”…

MEMS陀螺如何成为无人机稳定飞行的核心?

在无人机自主翱翔、灵活机动并适应多变环境的背后&#xff0c;对其运动状态——尤其是姿态——的精确感知是基石。作为飞行控制系统&#xff08;飞控&#xff09;的“内耳”&#xff0c;陀螺仪实时捕捉机体绕X、Y、Z三轴的旋转角速度。这一核心数据是飞控进行姿态解算和维持飞行…