【API网关】Kong安装和基本操作

news2024/9/22 21:23:08

文章目录

  • 前言
  • 一、API网关选型和Kong的安装
    • 1. 什么是API网关
    • 2. API网关技术选型
    • 3. 安装postgresql和migrations
    • 4. 安装kong
    • 5. 安装konga
  • 二、基本的路由转发配置
    • 1. kong的8001、8000和1337端口号的关系
    • 2. 基本的路由转发配置
    • 3. kong集成consul实现服务发现和负载均衡
    • 4. kong配置jwt实现登录校验
    • 5. kong配置反爬和ip黑名单


前言

Kong是一个开源的API网关和微服务管理平台,它提供了一系列的工具和技术来管理和监控分布式应用程序中的API。Kong被设计为一个高度可扩展的平台,它提供了一系列的核心功能,例如API路由、认证、流量控制、日志记录、监控、插件等等

Kong的核心是一个Nginx服务器,它被设计为一个可扩展的平台,通过安装和配置不同的插件,可以将其扩展为适合各种需求的API网关和微服务管理平台。Kong提供了一系列的官方和第三方插件,包括OAuth2认证、IP白名单、HMAC签名、CORS、限流、缓存、Websocket支持等等。

除了提供API网关和微服务管理功能之外,Kong还支持多种部署模式,包括单节点、多节点和分布式部署。Kong还提供了丰富的监控和日志记录功能,包括实时流量监控、指标收集、错误日志等等。

Kong可以轻松地集成到现有的应用程序中,无论是使用Docker容器还是裸机部署,都能够快速部署和配置。Kong还提供了一个简单易用的RESTful API,可以用来管理API网关和微服务。

总之,Kong是一个强大的API网关和微服务管理平台,提供了许多核心功能和丰富的插件,可以帮助企业构建和管理高效、可扩展的分布式应用程序。


一、API网关选型和Kong的安装

1. 什么是API网关

API网关(API Gateway)是一种用于构建和管理现代应用程序的中间层服务。它充当了客户端和后端服务之间的转换器,将来自客户端的请求转发给相应的后端服务,并将后端服务的响应返回给客户端。

API网关为应用程序提供了一种标准化和统一的方式来管理多个后端服务。通过将请求和响应处理逻辑集中在一个中心位置,API网关可以简化应用程序的开发和维护,并提供一系列的功能,如负载均衡、缓存、认证和授权、请求转换、API分组、监控和日志记录等。

API网关可以作为一个独立的服务,也可以作为微服务架构中的一个微服务。它通常使用RESTful API或GraphQL API来与客户端和后端服务进行通信,并可以与容器编排工具(如Kubernetes)和持续集成/持续部署(CI/CD)工具集成。

作用:

  • 负载均衡:通过将请求分发到多个后端服务实例,实现负载均衡以提高应用程序的可伸缩性和性能。
  • 缓存:可以对响应进行缓存,以减少后端服务的负载和提高响应速度。
  • 认证和授权:API网关可以处理用户身份验证和授权,并在访问后端服务之前验证用户的凭据,以确保只有经过身份验证的用户才能访问API。
  • 请求转换:API网关可以对请求进行转换和格式化,以适应不同的后端服务接口。
  • API分组:API网关可以将多个API分组,并为每个API设置不同的路由和策略。
  • 监控和日志记录:API网关可以收集API使用情况的数据,并记录API请求和响应的详细信息,以便进行故障排除和性能优化。
  • 安全性:API网关可以提供一些安全性功能,如防火墙、DDoS攻击防护、IP过滤、加密和解密、数据保护等。
  • API文档:API网关可以生成API文档,并为开发人员提供API使用说明和代码示例。
  • 协议转换:API网关可以将一种协议转换为另一种协议,以适应不同的客户端需求。

总之,API网关在应用程序开发和运维中具有非常重要的作用,可以大大简化应用程序的开发、部署、管理和维护。

2. API网关技术选型

在这里插入图片描述
Kong是一个开源的API网关,它是一个针对API的一个管理工具。你可以在那些上游服务之前,额外地实现一些功能。

Kong本身是一款基于OpenResty(Nginx + Lua模块)编写的高可用、易扩展的,由Mashape公司开源的

API Gateway项目。Kong是基于NGINX和Apache Cassandra或PostgreSQL构建的,能提供易于使用的

RESTful API来操作和配置API管理系统,所以它可以水平扩展多个Kong服务器,通过前置的负载均衡配置把请求均匀地分发到各个Server,来应对大批量的网络请求。

3. 安装postgresql和migrations

docker run -d --name kong-database \
-p 5432:5432 \
-e "POSTGRES_USER=kong" \
-e "POSTGRES_DB=kong" \
-e "POSTGRES_PASSWORD=kong" \
-e "POSTGRES_DB=kong" postgres:12

docker run --rm \
-e "KONG_DATABASE=postgres" \
-e "KONG_PG_HOST=(这里填自己的IP)"
-e "KONG_PG_PASSWORD=kong" \
-e "POSTGRES_USER=kong" \
-e "KONG_CASSANDRA_CONTACT_POINTS=kong-database" \
kong kong migrations bootstrap

4. 安装kong

下载和安装:

官网下载rpm:https://download.konghq.com/gateway-2.x-centos-7/Packages/k/

sudo yun install 你下载的rpm

编辑kong配置
关闭防火墙、重启docker – 很重要

systemctl stop firewalld.service
systemctl restart docker

直接重启也行
修改配置 后续使用配置启动kong

cp /etc/kong/kong.conf.default /etc/kong/kong.conf
vim /etc/kong/kong.conf
#修改如下内容
database = postgres 
pg_host = 192.168.1.102 # 这⾥得配置对外ip地址 不能是127.0.0.1
pg_port = 5432 # Port of the Postgres server.
pg_timeout = 5000 # Defines the timeout (in ms), for connecting,
 # reading and writing.
pg_user = kong # Postgres user.
pg_password = kong # Postgres user's password.
pg_database = kong # The database name to connect to.
dns_resolver = 自己的IP:8600 #这个配置很重要,配置的是consul的dns端⼝,默认是8600 可以⾃
admin_listen = 0.0.0.0:8001 reuseport backlog=16384, 127.0.0.1:8444 http2 ssl reu
proxy_listen = 0.0.0.0:8000 reuseport backlog=16384, 0.0.0.0:8443 http2 ssl reuse
kong start -c /etc/kong/kong.conf

然后在浏览器中访问: http://你的ip地址:8001/ 来确定kong是否启动成功

5. 安装konga

Konga是Kong API网关的一个可视化管理界面,它允许用户管理Kong API网关中的各种资源,例如API、插件、服务、路由等。

Konga提供了一个用户友好的界面,使得管理Kong变得更加容易。通过Konga,用户可以轻松地创建、编辑和删除API、插件、服务、路由等资源,也可以查看API的使用情况、服务的性能等信息。

除了基本的管理功能,Konga还提供了许多高级功能,例如自定义插件、权限管理、多租户支持等。Konga还提供了RESTful API,可以方便地与其他应用程序集成。

总之,Konga是一个非常强大的工具,可以帮助用户轻松管理Kong API网关,并提供了许多高级功能和扩展性。

docker run -d -p 1337:1337 --name konga pantsel/konga

在这里插入图片描述


二、基本的路由转发配置

1. kong的8001、8000和1337端口号的关系

  • 8001:kong的管理的端口
  • 8000:用户访问
  • 1337:konga 地址

Services:
Service顾名思义,就是我们自己定义的上游服务,通过Kong匹配到相应的请求要转发的地方,Service可以与下面的Route进行关联,一个Service可以有很多Route,匹配到的Route就会转发到Service中,当然中间也会通过Plugin的处理,增加或者减少一些相应的Header或者其他信息.

Routes:
Route路由相当于nginx配置中的location
Route实体定义匹配客户端请求的规则.每个路由都与一个服务相关联,而服务可能有多个与之相关联的路由.每一一个匹配给定路线的请求都将被提交给它的相关服务.
路由和服务的组合(以及它们之间的关注点分离)提供了一-种强大的路由机制,可以在Kong中定义细粒度的入口点,从而引导您的访问到不同upstream服务.

在这里插入图片描述

2. 基本的路由转发配置

当使用Kong作为API网关时,可以通过Kong的管理界面或API来进行路由转发的配置。

以下是基本的路由转发配置详解:

创建服务:
在Kong中,服务(Service)表示你的API或应用程序的一个实例。要创建服务,可以通过以下步骤:

  • 登录Kong的管理界面,选择"Services"选项卡,然后点击"Add Service"按钮。
  • 在弹出的表单中填写服务的基本信息,例如名称和目标URL。
  • 点击"Save"按钮保存服务。

创建路由:
路由(Route)将请求路由到服务的特定实例。要创建路由,可以通过以下步骤:

  • 在服务的管理页面,选择"Routes"选项卡,然后点击"Add Route"按钮。
  • 在弹出的表单中填写路由的基本信息,例如路径和协议。
  • 点击"Save"按钮保存路由。

测试路由:
要测试路由,可以使用HTTP客户端工具,例如curl或Postman。
根据路由的配置,构建HTTP请求,包括请求的路径和Host头部。例如,如果路由的路径为"/example",服务的目标URL为"http://example.com",则请求的URL应该为"http://localhost:8000/example",Host头部应该为"example.com"。
发送HTTP请求,并查看响应是否正确。如果响应正确,则路由配置成功。

注意: 在使用Kong进行路由转发时,还需要考虑负载均衡、健康检查、认证授权等因素。可以在Kong的管理界面或API中配置这些功能。
在这里插入图片描述
在这里插入图片描述

3. kong集成consul实现服务发现和负载均衡

只需要设置service的Name为:consul里的名称.service.consul

4. kong配置jwt实现登录校验

在Kong中,可以使用JWT插件来实现基于JSON Web Token (JWT)的登录校验。下面是使用Kong配置JWT插件的详细步骤:

安装JWT插件:
Kong提供了JWT插件,因此不需要单独安装。可以通过以下步骤启用插件:

  • 登录Kong的管理界面,选择"Plugins"选项卡,然后点击"Add Plugin"按钮。
  • 在弹出的表单中选择"jwt"插件,并填写插件的配置信息。
  • 点击"Save"按钮保存插件。

配置路由:

要实现登录校验,需要配置一个路由,将未经授权的请求重定向到认证服务。可以通过以下步骤创建路由:

  • 登录Kong的管理界面,选择"Routes"选项卡,然后点击"Add Route"按钮。
  • 在弹出的表单中填写路由的基本信息,例如路径和协议。
  • 在"Plugins"选项卡中启用"jwt"插件,并配置插件的参数,例如密钥和有效期。
  • 点击"Save"按钮保存路由。

配置认证服务:
可以使用任何支持JWT的身份验证服务来实现登录校验。常见的认证服务包括Keycloak和Auth0。以下是使用Keycloak配置认证服务的示例步骤:

  • 在Keycloak中创建一个新的Realm,并配置客户端和用户。
  • 在Kong的管理界面,选择"Consumers"选项卡,然后点击"Add Consumer"按钮。
  • 在弹出的表单中填写用户的基本信息,例如用户名和密码。
  • 在"Plugins"选项卡中启用"jwt"插件,并配置插件的参数,例如密钥和有效期。
  • 点击"Save"按钮保存用户。

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

解析jwt认证:https://jwt.io/

测试登录校验:
要测试登录校验,可以使用HTTP客户端工具,例如curl或Postman。
构建HTTP请求,并将JWT令牌作为Authorization头部的Bearer令牌发送到Kong的API。
如果JWT令牌有效,则请求将被路由到相应的服务。如果JWT令牌无效,则请求将被拒绝,并返回HTTP 401错误。

注意: 在使用Kong配置JWT插件时,还需要考虑令牌的生成和刷新等因素。可以在认证服务中配置这些功能。
需要结合你的加密逻辑在后端做一定的修改认证规则

5. kong配置反爬和ip黑名单

在Kong中,可以使用Access插件和IPRestriction插件来实现反爬和IP黑名单功能。下面是使用Kong配置这两个插件的详细步骤:

安装Access和IPRestriction插件:
Kong提供了Access和IPRestriction插件,因此不需要单独安装。可以通过以下步骤启用插件:

  • 登录Kong的管理界面,选择"Plugins"选项卡,然后点击"Add Plugin"按钮。
  • 在弹出的表单中选择"access"插件或"ip-restriction"插件,并填写插件的配置信息。
  • 点击"Save"按钮保存插件。

配置路由:
要实现反爬和IP黑名单功能,需要配置一个路由,并将相应的插件应用于该路由。可以通过以下步骤创建路由:

  • 登录Kong的管理界面,选择"Routes"选项卡,然后点击"Add Route"按钮。
  • 在弹出的表单中填写路由的基本信息,例如路径和协议。
  • 在"Plugins"选项卡中启用"access"插件或"ip-restriction"插件,并配置插件的参数,例如最大请求数、限速和IP地址范围。
  • 点击"Save"按钮保存路由。

测试反爬和IP黑名单:
要测试反爬和IP黑名单功能,可以使用HTTP客户端工具,例如curl或Postman。
构建HTTP请求,并发送到Kong的API。
如果请求的频率超过了最大请求数或被限速,则请求将被拒绝,并返回HTTP 429错误。
如果请求的IP地址在黑名单中,则请求将被拒绝,并返回HTTP 403错误。

注意: 在使用Kong配置Access和IPRestriction插件时,还需要考虑白名单和自定义错误消息等因素。可以在插件的配置中进行相应的设置。
在这里插入图片描述

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

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

相关文章

程序员推荐的良心网站合集!

今天来给大家推荐几个程序员必看的国外良心网站合集。 IBM developer 技术性很强的博客网站,网站自带真实示例代码和架构解决方案,大家可以在上面找到适合自己的语言方向开始学习交流。 https://developer.ibm.com/ infoq 技术论坛社区,内…

【JavaScript】根据元素内容遍历元素的方案

▒ 目录 ▒🛫 导读需求1️⃣ jQuery2️⃣ XPATH(document.evaluate)3️⃣ 原生js(querySelectorAll & Array)🛬 文章小结📖 参考资料🛫 导读 需求 因业务需要,根据元…

文献阅读笔记 # 面向大规模多版本软件系统的代码克隆检测加速技术

面向大规模多版本软件系统的代码克隆检测加速技术,方维康 吴毅坚 赵文耘,《计算机应用与软件》复旦大学软件学院、复旦大学上海市数据科学重点实验室2022 April 面向大规模多版本软件系统的代码克隆检测加速技术 摘要 很多代码克隆检测方法主要针对软…

_Linux (网络版计算器简易实现)

文章目录1. 协议2. 网络版计算器简易实现代码链接3. 网络版计算器2-1. 约定的协议方案有两种2-3. 协议代码框架1. 自定义的协议方案2. json(库里的完整协议方案)2-4. send和recv单独使用不安全2-5. 剩余代码写法讲解参考如下:2-6. 代码运行结果示意图&am…

9.5 PIM-SM

实验目的 熟悉PIM-SM的应用场景掌握PIM-SM的配置方法 实验拓扑 实验拓扑如图9-40所示: 图9-40:PIM-SM 实验步骤 (1)配置IP地址 MCS1的配置 MCS1的配置如图9-41所示: 图9-41:配置MCS1的IP地址 R1的配置 …

VMware安装FreeBSD虚拟机

1. 下载FreeBSD镜像地址 国内阿里云下载地址: freebsd-releases-ISO-IMAGES安装包下载_开源镜像站-阿里云 选择自己需要的版本下载。 2. 创建FreeBSD虚拟机 2.1. 选择操作系统类型 2.2. 导入FreeBSD镜像 3. 安装FreeBSD 第1步:保持默认让其自动进入…

复习知识点十之方法的重载

目录 方法的重载 练习1: 练习1: 数组遍历 练习2: 数组的最大值 练习3: 练习4: 复制数组 基本数据类型和引用数据类型 方法的重载 Java虚拟机会通过参数的不同来区分同名的方法 练习1: public class Test4 {public static void main(String[] args) {//调用方法 // …

grid宫格布局新手快捷上手-f

前言 grid 网上有很多,但都是大而全的,感觉新人上手很吃力,本文仅以最快捷的方式进行介绍,如何使用grid宫格布局 本文是新人上手,若想了解更多grid布局,请阅读其他文章 使用 声明布局 display: grid;声…

springboot+pgbouncer+postgres数据库连接池集成方案及问题解决

期望通过每一次分享,让技术的门槛变低,落地更容易。 —— around 前言 旨在解决微服务项目全是连接池并影响数据库并发连接,作者的环境是基于sprongboot微服务连接postgres数据库,每个微服务的DAO层配置都使用了连接池技术。后续…

一个线程两次调用start()方法会出现什么情况?

第17讲 | 一个线程两次调用start()方法会出现什么情况? 今天我们来深入聊聊线程,相信大家对于线程这个概念都不陌生,它是 Java 并发的基础元素,理解、操纵、诊断线程是 Java 工程师的必修课,但是你真的掌握线程了吗&am…

如何编程实现从多数据库操作数据

对于数据量很大的复杂系统,有时候会采用分库或者分表的减轻单台数据库服务器压力,截止目前有一些工具直接支持读写分离等,例如ShardingSphere,如果不采用工具框架,从编码出发,如何实现从多个数据库读写数据…

FFmpeg 中的多线程解码

1.共享变量的互斥互斥锁(mutex-lock)是一种信号量,用来防止两个线程在同一时刻访问相同的共享资源,它有锁定状态和非锁定状态。在任意时刻,一个线程要想存取共享数据,线程必须首先获得mutex-lock&#xff0…

一种全新的图像变换理论的实验(四)——研究目的替代DCT和小波

一、前言 2023年02月28日凌晨1点 以前我定义为这个算法是滤波算法,实则上应该算是一种新变换算法,比如傅里叶变换(FFT)、离散余弦变换(DCT),以及小波变换。所以就把所有的标题改变了一下。 本次…

MySQL的InnoDB 三种行锁,SQL 语句加了哪些锁?

InnoDB 三种行锁: Record Lock(记录锁):锁住某一行记录 Gap Lock(间隙锁):锁住一段左开右开的区间 Next-key Lock(临键锁):锁住一段左开右闭的区间 哪些语句…

前端面试题 —— HTML

目录 一、src 和 href 的区别 二、对 HTML 语义化的理解 三、DOCTYPE(⽂档类型) 的作⽤ 四、script 标签中 defer 和 async 的区别 五、常⽤的 meta 标签有哪些? 六、HTML5 有哪些更新 八、行内元素有哪些?块级元素有哪些? 空(void)元素…

【正点原子FPGA连载】第十九章FreeRtos Hello World实验 摘自【正点原子】DFZU2EG_4EV MPSoC之嵌入式Vitis开发指南

1)实验平台:正点原子MPSoC开发板 2)平台购买地址:https://detail.tmall.com/item.htm?id692450874670 3)全套实验源码手册视频下载地址: http://www.openedv.com/thread-340252-1-1.html 第十九章FreeRto…

项目调研丨以太坊再质押项目EigenLayer白皮书四大看点(内附完整版中文白皮书)

北京时间2月21日下午,被众多一线投研机构视为2023年以太坊最重要的创新,有可能开启以太坊新叙事方向的项目Eigenlayer终于披露了其第一版白皮书。EigenLayer是以太坊的再质押集,允许共识层ETH质押者选择验证构建在以太坊生态系统之上的新软件…

第七节 面向对象

面向对象 1.类和对象是什么? )类:是共同特征的描述(设计图);对象:是真实存在的具体实例。 2.如何设计类? public class 类名 { 1、成员变量(代表属性的,一般是名词) 2、成员方法(代表行为的,一般是动词) 3.如何创建对象? 类名对象名new 类名(); 4.拿到对象后怎么…

ubuntu 编译安装支持CUDA的OpenCV

安装须知 cuda支持 在安装完“ linux CUDAtoolkitcudnntensorrt 的安装”之后进行支持cuda的opencv安装 否则报错:CMake Error at modules/dnn/CMakeLists.txt:41 (message): DNN: CUDA backend requires CUDA Toolkit. Please resolve dependency or disable OPE…

Ubuntu 安装指定版本 Mysql,并设置远程连接(以安装mysql 5.5 为例)

目录 一、安装Mysql 1、卸载Mysql(可跳过) 2、安装mysql 软件源 3、安装mysql 5.5 4、验证测试 二、设置远程登录 1、允许使用root账号远程连接 2、Mysql 允许远程登录 一、安装Mysql 1、卸载Mysql(可跳过) 如果之前安装…