Kong api网关实战教程

news2024/11/18 18:55:10

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.coloradmin.cn/o/1707917.html

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

相关文章

HDU 2196 Computer(树形dp)

H D U 2196 C o m p u t e r (树形 d p ) \Huge{HDU 2196 Computer(树形dp)} HDU2196Computer(树形dp) 文章目录 题意思路标程 题目链接:Problem - 2196 (hdu.edu.cn) 题意 给出一个n个节点的无…

go webview/wails学习记录

文章目录 webview安装基础代码错误情况wails安装初始化一个项目错误信息使用arco-design(在初始化项目上修改代码)修改窗口图标多页面展示添加自定义图标-iconfont制作伸缩侧边栏侧边栏菜单在form中使用select且select联动选择使用go读取本地excel文件在转json_str使用go将json…

怎么把电脑上的文件传到手机上?可保存文档的云笔记

在职场中,我们经常需要将电脑上的重要文件、资料传到手机上,以便随时查阅和使用。比如,当你在公司完成了一份关键报告,但即将外出与客户沟通,这时如果能将报告传到手机上,就能在移动中随时准备应对客户的咨…

5.22-wjn

使用select实现的TCP并发服务器端 #define SER_PORT 8888 #define SER_IP "192.168.125.158" int main(int argc, const char *argv[]) {//1、为通信创建一个端点int sfd socket(AF_INET, SOCK_STREAM, 0);//参数1:说明使用的是ipv4通信域//参数2&#…

Oracle的安装以及一些相关问题

系列文章目录 Oracle的安装以及一些相关问题 文章目录 系列文章目录前言一、Oracle的安装二、常用命令三、误删dbf四、PLSQL乱码五、oracle更换数据库字符集总结 前言 一段时间没更新,主要最近一直在找工作,最终还是顺着春招找到工作了,现在…

【基础篇-Day8:JAVA字符串的学习】

目录 1、常用API2、String类2.1 String类的特点2.2 String类的常见构造方法2.3 String类的常见面试题:2.3.1 面试题一:2.3.2 面试题二:2.3.3 面试题三:2.3.4 面试题四: 2.4 String类字符串用于比较的方法2.5 String类字…

文生图模型演进:AE、VAE、VQ-VAE、VQ-GAN、DALL-E 等 8 模型

节前,我们星球组织了一场算法岗技术&面试讨论会,邀请了一些互联网大厂朋友、参加社招和校招面试的同学。 针对算法岗技术趋势、大模型落地项目经验分享、新手如何入门算法岗、该如何准备、面试常考点分享等热门话题进行了深入的讨论。 合集&#x…

【idea】IDEA 设置自动导入类 / 包等信息(import)

如果大家正在使用一个未曾导入(import)过的类,或者它的静态方法或者静态字段,IDEA 会给出对应的建议。需要手动操作导入类。 以下设置可以自动导入

磁珠笔记汇总

磁珠笔记汇总 磁珠是和电感很相似的器件。 电感磁珠单位亨(H)欧姆(Ω)是否储能存储能量消耗高频能量应用场景通常用于开关电源吸收高频,EMC保护如何看待损耗使用电感时希望损耗越小越好使用磁珠时是利用其损耗来消耗不需要的高频分量 一、磁珠的工作原理 磁珠与…

第十三届蓝桥杯国赛大学B组填空题(c++)

A.2022 动态规划 AC; #include<iostream> #define int long long using namespace std; int dp[2050][15]; //dp[i][j]:把数字i分解为j个不同的数的方法数 signed main(){dp[0][0]1;for(int i1;i<2022;i){for(int j1;j<10;j){//一种是已经分成j个数,这时只需每一个…

unbantu安装ollama,maxkb

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 背景一、Ollama安装1.安装2.安装后检验3.运行模型4.常用命令 二、安装maxkb1.说明2.docker安装maxkb2.添加模型3.创建应用4.api域名无效 三、总结 背景 最近在学习…

zabbix监控mysql

一、mysql数据库监控的内容有 mysql的吞吐量 mysql的常规操作&#xff08;增删改查&#xff09; QPS&#xff08;Questions Per second:&#xff09;每秒能处理多少次请求数 TPS&#xff08;Transactions Per Second&#xff09;每秒查询处理的事务数 mysql库大小和表大小 监控…

2024年新算法-红嘴蓝鹊优化器(RBMO)优化BP神经网络回归预测

2024年新算法-红嘴蓝鹊优化器(RBMO)优化BP神经网络回归预测 亮点&#xff1a; 输出多个评价指标&#xff1a;R2&#xff0c;RMSE&#xff0c;MSE&#xff0c;MAPE和MAE 满足需求&#xff0c;分开运行和对比的都有对应的主函数&#xff1a;main_BP, main_RBMO, main_BPvsBP_R…

Mysql 单行转多行,把逗号分隔的字段拆分成多行

一、拆分前后的数据 二、执行SQL select substring_index(substring_index(a.gzlx,,,b.help_topic_id1),,,-1) gzlxname, a.gzlx,a.* from dt_task_zxgz_info a join mysql.help_topic b on b.help_topic_id < (length(a.gzlx) - length(replace(a.gzlx,,,))1) 三、解释说…

爷爷看了都会,打工人必备的摸鱼AI神器!免费!

去年&#xff0c;AI技术无疑成为了最为引人注目的焦点&#xff0c;层出不穷的创新应用令人目不暇接。尽管许多人对这股AI热潮的持久性持怀疑态度&#xff0c;但现实却用事实给予了最有力的反驳。AI所展现出的强大生产力&#xff0c;足以令人刮目相看。 而今年以来&#xff0c;…

【实用的 IDEA 配置和操作技巧总结】

前置知识 IDEA的设置快捷键为ctrlalts键&#xff0c;后文介绍IDEA常见的配置就不再赘述这一点了。 基础配置 取消默认打开上次项目 日常开发都会打开不同的项目&#xff0c;初次安装IDEA之后&#xff0c;每次打开IDEA都会开启上一次启动的项目&#xff0c;所以我们需要进入设…

Android studio sdk 虚拟机无法打开运行

1.确认是否在BIOS开启硬件虚拟化支持,选择Enable 2.win8/win10 Hyper-V冲突。控制面板-》程序与功能-》windows功能-》关闭 Hyper-V 3.sdk 路径非默认路径 复制avd C:\Users\Administrator\.android\avd 到 sdk的安装路径下 D:\Android\sdk 。重启软件重新启动即可

Spring:事务

1. 简介 spring对jdbc进行封装&#xff0c;简化对数据库的操作 2. HelloWorld 1. 搭建模块 2.加入依赖 <dependencies><!--spring jdbc Spring 持久化层支持jar包--><dependency><groupId>org.springframework</groupId><artifactId>s…

香橙派 AIpro开发板初上手

一、香橙派 AIpro开箱 最近拿到了香橙派 AIpro&#xff08;OrangePi AIpro&#xff09;&#xff0c;下面就是里面的板子和相关的配件。包含主板、散热组件、电源适配器、双C口电源线、32GB SD卡。我手上的这个是8G LPDDR4X运存的版本。 OrangePi AIpro开发板是一款由香橙派与华…

MySQL详细安装、配置过程,多图,详解

本文适合centos7环境下安装mysql&#xff0c;在安装和卸载过程中&#xff0c;都在root用户下完成。文章目录 清理环境获取mysql官方yum源安装mysql yum源安装mysql服务安装报错解决办法验证是否安装完成启动mysql服务登录服务方法一&#xff1a;方法二&#xff1a;方法三&#…