API网关之Kong

Kong 是一个高性能的开源 API 网关和微服务管理平台,用于管理、保护和扩展 API 和微服务。它最初由 Mashape 公司开发,并于 2015 年作为开源项目发布。Kong 能够处理 API 的路由、认证、负载均衡、缓存、监控、限流等多种功能,是微服务架构中不可或缺的一部分。

Kong 的核心功能

  1. API 路由

    • Kong 通过定义路由将客户端的请求转发到适当的微服务。它支持基于路径、主机名、方法、请求头等多种路由规则,提供灵活的流量管理能力。
  2. 身份验证

    • Kong 提供了多种身份验证方式,包括 API Key、JWT、OAuth2、LDAP 等,确保只有经过认证的用户才能访问受保护的 API。
  3. 负载均衡

    • Kong 内置负载均衡功能,支持多种负载均衡算法(如轮询、权重等),能够将请求均匀地分发到后端的微服务实例中,提升系统的可靠性和可用性。
  4. 限流和速率限制

    • 通过限流插件,Kong 可以限制用户在一定时间内的请求数量,从而保护后端服务免受流量激增或恶意请求的影响。
  5. 日志记录与监控

    • Kong 能够集成各种监控和日志工具,如 Prometheus、Datadog、ELK 等,实时监控 API 的性能和使用情况,帮助运营团队及时发现问题并进行优化。
  6. 缓存

    • 通过缓存插件,Kong 可以缓存 API 的响应数据,减少后端服务的负载并提升响应速度。
  7. 请求和响应修改

    • Kong 提供了丰富的插件,用于在请求到达后端服务前或在响应返回客户端前对其进行修改,如添加或删除头信息、重写 URL、注入认证信息等。
  8. 安全性增强

    • Kong 支持 IP 白名单和黑名单、防火墙、请求速率限制等功能,增强了 API 和微服务的安全性。
  9. 服务发现与动态配置

    • Kong 可以与服务发现工具(如 Consul、etcd)集成,自动更新后端服务的配置,实现动态扩展和配置的自动化管理。
  10. 插件架构

    • Kong 的插件架构非常灵活,允许用户根据需要添加或移除功能插件。官方提供了许多插件,社区也有丰富的第三方插件可供选择。此外,用户还可以根据需求开发自定义插件。

Kong 的架构

Kong 的架构设计简单且高效,主要包括以下组件:

  1. Kong 网关

    • 核心组件,负责处理所有进入的 API 请求。它基于 OpenResty 和 Nginx 构建,具备高性能和可扩展性。
  2. Kong 数据库

    • 用于存储 Kong 的配置信息、插件数据和运行时状态。Kong 支持使用 PostgreSQL 或 Cassandra 作为后台数据库。
  3. Kong 管理 API

    • 提供了一套 RESTful API,允许管理员动态管理 Kong 的路由、服务、插件等配置。
  4. Kong Manager

    • 一种可视化的管理界面,帮助用户更方便地管理 Kong 集群和配置。
  5. Kong Dev Portal

    • 一个开发者门户,帮助 API 使用者浏览、测试和集成 API,增强了开发者的体验和合作。

Kong 的部署模式

Kong 支持多种部署模式,适应不同的架构和需求:

  1. 单节点部署

    • 适用于小规模应用或开发测试环境,Kong 和数据库部署在同一台机器上。
  2. 集群部署

    • 适用于生产环境,Kong 可以部署在多台服务器上,通过数据库共享配置,实现高可用性和负载均衡。
  3. 无数据库模式(DB-less)

    • 在无数据库模式下,Kong 的所有配置通过静态文件或环境变量加载,适用于需要快速启动且不依赖数据库的场景。
  4. 混合部署模式

    • 支持分布式部署,其中控制平面(负责管理配置)和数据平面(处理 API 请求)分离,适用于跨地域的大规模分布式系统。

Kong 的应用场景

  1. 微服务架构管理

    • 在微服务架构中,Kong 作为 API 网关,集中管理和保护所有微服务的 API 接口,简化了微服务间的通信与协作。
  2. API 管理

    • Kong 提供全面的 API 管理功能,包括认证、限流、日志记录、监控等,适合需要公开 API 的企业或平台。
  3. 安全增强

    • 通过插件,Kong 可以为微服务和 API 提供多层次的安全防护,如身份认证、IP 过滤、防火墙等。
  4. 流量控制

    • Kong 的限流和负载均衡功能帮助企业在流量高峰时平衡请求负载,避免系统过载。
  5. 服务发现与负载均衡

    • Kong 与服务发现工具的集成,自动实现后端服务的动态配置与负载均衡,提升系统的灵活性和可靠性。

Kong使用示例

        使用 Kong 的基本配置示例,涵盖了服务、路由、插件等配置的完整流程。

1. 启动 Kong 和数据库

首先,确保 Kong 和数据库(如 PostgreSQL 或 Cassandra)已经启动并连接。你可以使用 Docker 快速启动 Kong 和 PostgreSQL:

# 启动 PostgreSQL
docker run -d --name kong-database \-p 5432:5432 \-e "POSTGRES_USER=kong" \-e "POSTGRES_DB=kong" \-e "POSTGRES_PASSWORD=kong" \postgres:11# 启动 Kong
docker run -d --name kong \--link kong-database:kong-database \-e "KONG_DATABASE=postgres" \-e "KONG_PG_HOST=kong-database" \-e "KONG_PG_PASSWORD=kong" \-e "KONG_CASSANDRA_CONTACT_POINTS=kong-database" \-e "KONG_PROXY_ACCESS_LOG=/dev/stdout" \-e "KONG_ADMIN_ACCESS_LOG=/dev/stdout" \-e "KONG_PROXY_ERROR_LOG=/dev/stderr" \-e "KONG_ADMIN_ERROR_LOG=/dev/stderr" \-e "KONG_ADMIN_LISTEN=0.0.0.0:8001" \-p 8000:8000 \-p 8443:8443 \-p 8001:8001 \-p 8444:8444 \kong:latest

2. 配置服务和路由

添加服务

首先,添加一个服务(即你想要代理的后端服务):

curl -i -X POST http://localhost:8001/services/ \--data name=my-service \--data url='http://httpbin.org'

此命令将 httpbin.org 添加为一个名为 my-service 的服务。Kong 将代理到该服务。

添加路由

接下来,配置一个路由,使得客户端请求能通过 Kong 转发到该服务:

curl -i -X POST http://localhost:8001/services/my-service/routes \--data 'hosts[]=example.com'

该路由配置表示,当请求的 Host 头为 example.com 时,Kong 会将请求路由到 my-service 服务。

3. 添加插件

添加身份验证插件

假设你想为此服务添加一个简单的 API 密钥认证,可以添加如下插件:

curl -i -X POST http://localhost:8001/services/my-service/plugins \--data "name=key-auth"

添加完插件后,你需要为客户端生成并分发 API 密钥:

curl -i -X POST http://localhost:8001/consumers/ \--data "username=my-consumer"curl -i -X POST http://localhost:8001/consumers/my-consumer/key-auth/ \--data "key=my-secret-key"

现在,客户端必须在请求头中带上 apikey: my-secret-key 才能访问 my-service

添加限流插件

为了防止服务被过多的请求压垮,你可以为 my-service 添加限流插件:

curl -i -X POST http://localhost:8001/services/my-service/plugins \--data "name=rate-limiting" \--data "config.minute=5"

这个配置将请求限制为每分钟最多 5 个请求。

4. 测试配置

在配置完成后,你可以通过以下方式测试你的 Kong 配置:

curl -i -X GET --url http://localhost:8000/anything \--header "Host: example.com" \--header "apikey: my-secret-key"

这个请求会被转发到 httpbin.org/anything,同时由于携带了正确的 Hostapikey,请求将成功通过 Kong 的路由和插件验证。

5. 管理和监控

你可以通过 Kong 的管理 API 访问和管理所有配置。访问 http://localhost:8001 可以查看所有服务、路由、插件、消费者等配置。

Kong 的优缺点

优点
  • 高性能:基于 Nginx 和 OpenResty 构建,Kong 具有极高的性能和并发处理能力。
  • 插件丰富:Kong 提供了大量的官方插件,并支持用户自定义插件,功能扩展性强。
  • 易于集成:Kong 可以与现有的监控、日志和认证系统无缝集成,简化了 API 和微服务的管理。
  • 灵活的部署方式:支持多种部署模式,包括无数据库模式,适应不同规模的应用场景。
  • 强大的社区支持:Kong 拥有一个活跃的社区,提供了丰富的文档、插件和第三方工具支持。
缺点
  • 学习曲线:对于新手来说,Kong 的配置和管理可能需要一定的学习成本,特别是在复杂的部署场景下。
  • 依赖性:某些功能和插件可能依赖于特定的数据库或第三方服务,这可能增加系统的复杂性。

总结

Kong 是一个功能强大且灵活的 API 网关,适合在微服务架构和大型 API 管理平台中使用。它不仅提供了丰富的功能,还通过插件系统实现了极高的扩展性。无论是为了提升 API 的安全性、可用性,还是简化微服务间的通信与管理,Kong 都是一个值得考虑的解决方案。

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

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

相关文章

网络应用层之(2)DNS协议

网络应用层之(2)DNS协议 Author: Once Day Date: 2024年8月12日 一位热衷于Linux学习和开发的菜鸟,试图谱写一场冒险之旅,也许终点只是一场白日梦… 漫漫长路,有人对你微笑过嘛… 全系列文章可参考专栏: 通信网络技术_Once-Day的博客-CSDN…

PyTorch深度学习网络(二:CNN)

卷积神经网络(CNN)是一种专门用于处理具有类似网格结构数据的深度学习模型,例如图像(2D网格的像素)和时间序列数据(1D网格的信号强度)。CNN在图像识别、图像分类、物体检测、语音识别等领域有着…

R语言绘制可用于论文发表的生存曲线图|科研绘图·24-08-25

小罗碎碎念 有关于生存曲线的基本概念(例如删失事件的定义)和绘图的详细教程我已经在5月的推文中介绍过了,有需求的同学欢迎前去考古。 R语言绘制生存分析曲线从概念到实战的保姆级教程|2024-05-12 https://mp.weixin.qq.com/s/Z…

SQL进阶技巧:如何按任意时段分析时间区间问题? | 分区间讨论【左、中、右】

目录 0 场景描述 1 数据准备 2 问题分析 方法1:分情况讨论,找出重叠区间 方法2:暴力美学法。按区间展开成日期明细表 3 拓展案例 4小结 0 场景描述 现有用户还款计划表 user_repayment ,该表内的一条数据,表示用户在指定日期区间内 [date_start, date_end] ,每天…

秋招突击——8/21——知识补充——计算机网络——cookie、session和token

文章目录 引言正文Cookie——客户端存储和管理Session——服务端存储和管理Token补充签名和加密的区别常见的加密算法和签名算法 面试题1、HTTP用户后续的操作,服务端如何知道属于同一个用户?如果服务端是一个集群机器怎么办?2、如果禁用了Co…

【Python 千题 —— 基础篇】简易图书管理系统

Python 千题持续更新中 …… 脑图地址 👉:⭐https://twilight-fanyi.gitee.io/mind-map/Python千题.html⭐ 题目描述 题目描述 编写一个面向对象的程序,模拟一个图书管理系统。要求定义一个 Book 类,具有基本的书籍信息功能;然后,创建一个 Library 类,用于管理多个 B…

Vue3搜索框(InputSearch)

效果如下图:在线预览 APIs InputSearch 参数说明类型默认值width搜索框宽度,单位 pxstring | number‘100%’icon搜索图标boolean | slottruesearch搜索按钮,默认时为搜索图标string | slotundefinedsearchProps设置搜索按钮的属性&#xf…

【Qt】容器类控件GroupBox

容器类控件GroupBox 使用QGroupBox实现一个带有标题的分组框,可以把其他的控件放在里面里面作为一组,这些内部的控件的父元素也就不是this了。 其目的只是为了让界面看起来更加好看,例如当一个界面比较复杂的时候,包含了很多的控…

APP封装安装配置参考说明

APP封装安装配置参考说明 一, 环境准备 宝塔环境 nginx php5.6 mysql5.6 java-openjdk1.8 apktool 1,安装 nginx,php,mysql自行安装 java-openjdk1.8 安装 推荐使用命令行安装 1.1 yum install java-1.8.0-openjdk1.2 yum install -y java-1.8.0-openjdk-devel1.3 设置…

Unity | 性能标准分析工具图形API简介

目录 一、相关术语 1.物理页 2.PSS内存 3.Reserved Total 二、耗时推荐值 三、内存推荐值 四、分析工具 1.Profiler (1)Profiler各平台对比 (2)构建到目标平台 (3)Frame数量修改 (4…

天宝TBCTrimble Business Center中文版本下载安装使用介绍

天宝TBC:测绘之道,尽在其中 引言 昔日杜甫,忧国忧民,今朝我辈,测绘天下。天宝TBC,乃测绘之利器,助我等行走于山川河流之间,绘制天地之图。此文将以杜甫之笔,述说TBC之妙…

【数据结构】栈(stack)

目录 栈的概念 栈的方法 栈的实现 数组实现 push方法 压栈 pop方法 出栈 peek方法 获取栈顶元素 size方法 获取有效元素个数 链表实现 结尾 完整代码 数组实现栈代码 双向链表实现栈代码 栈的概念 栈是一种特殊的线性表,只允许在 固定的一段 进行插入…

kafka发送消息-生产者发送消息的分区策略(消息发送到哪个分区中?是什么策略)

生产者发送消息的分区策略(消息发送到哪个分区中?是什么策略) 1、默认策略,程序自动计算并指定分区1.1、指定key,不指定分区1.2、不指定key,不指定分区 2、轮询分配策略RoundRobinPartitioner2.1、创建配置…

使用idea快速创建springbootWeb项目(springboot+springWeb+mybatis-Plus)

idea快速创建springbootWeb项目 详细步骤如下 1)创建项目 2)选择springboot版本 3)添加web依赖 4)添加Thymeleaf 5)添加lombok依赖 然后点击create进入下一步 双击pom.xml文件 6)添加mybatis-plus依赖 …

【系统分析师】-案例篇-数据库

1、分布式数据库 1)请用300字以内的文字简述分布式数据库跟集中式数据库相比的优点。 (1)坚固性好。由于分布式数据库系统在个别结点或个别通信链路发生故障的情况下,它仍然可以降低级别继续工作,系统的坚固性好&…

Ubuntu搭建FTP服务器

目录 1.ftp简介 2.vsftpd 2.1.介绍 2.2.安装与卸载 2.3.综合案例 - 本地用户模式 2.4.1.创建FTP用户 2.4.2.配置vsftpd 2.4.3.配置防火墙 1.ftp简介 一般来讲,人们将计算机联网的首要目的就是获取资料,而文件传输是一种非常重要的获取资料的方…

Docker 修改镜像源

由于docker hub 被禁,导致 docker 拉取镜像失败,解决办法就是使用国内的镜像源,目前国内的镜像源还是很多的,例如阿里云、腾讯云、华为云等等,下面演示一个更换成阿里云的步骤。 1. 阿里云获取加速地址 1.1 首先登录阿…

Git —— 1、Windows下安装配置git

Git简介 Git 是一个免费的开源分布式版本控制系统,旨在处理从小型到 快速高效的超大型项目。 Git 易于学习,占用空间小,性能快如闪电。 它超越了 Subversion、CVS、Perforce 和 ClearCase 等 SCM 工具 具有 cheap local branching、 方便的暂…

HIVE 数据仓库工具之第一部分(讲解部署)

HIVE 数据仓库工具 一、Hive 概述1.1 Hive 是什么1.2 Hive 产生的背景1.3 Hive 优缺点1.3.1 Hive的优点1.3.2 Hive 的缺点 1.4 Hive在Hadoop生态系统中的位置1.5 Hive 和 Hadoop的关心 二、Hive 原理及架构2.1 Hive 的设计原理2.2 Hive 特点2.3 Hive的体现结构2.4 Hive的运行机…

Linux 配置wireshark 分析thread 使用nRF-Sniffer dongle

Linux 配置wireshark nRF-Sniffer-for-802.15.4 1.下载固件和配置文件 https://github.com/NordicSemiconductor/nRF-Sniffer-for-802.15.4 2.烧写固件 使用nRF Connect for Desktop 中的 programmer 4.3烧写 https://www.nordicsemi.com/Products/Development-tools/nrf-conne…